Есть некоторые проблемы с парсингом кода в задачах - проблема касается того, что ваш парсер ждёт однозначного совпадения с вашим шаблоном, что несколько неверно. Встречаю уже не в первый раз, но сообщить решил только сейчас
Например, в https://javarush.com/quests/lectures/questsyntaxpro.level02.lecture03
в последнем задании у вас ожидается только
System.out.println(usa.toUpperCase());
System.out.println("Винни Пух".toUpperCase());
И будет ошибкой употребление скобок
System.out.println((usa).toUpperCase());
System.out.println(("Винни Пух").toUpperCase());
Хотя фактически решение правильное. Но тестирование выдаёт, например:
Проверь, что в методе main есть команда System.out.println("Винни Пух".toUpperCase())
Павел
3 уровень
Парсинг проверки задачи сравнивает код только с шаблоном, что некорректно
Обсуждается
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел
12 июля 2024, 13:47
Если что, я ни в коем случае не сводил тему к тому, о чём написал Денис - к проверке того, что выведет программа
Я вроде как и в постановке задачи это ясно написал - дело именно в лексическом разборе кода
0
Павел
12 июля 2024, 13:45
Как скобки влияют на ошибки и непредсказуемость работы программы?? И в каком контексте это может быть ошибкой? По крайней мере в контексте рассматриваемых примеров это ни разу не ошибка
Как это делать? Был у нас в унике предмет замечательный "теория компиляторов", где на курсовую мы должны были чуть ли не весь парсер языка написать. Вот такие познания в помощь
Денис как раз пишет про лексический разбор кода.. Сравнение с шаблоном лоб-в-лоб - это одно. Лексический анализ - другое. Лексический анализ - это как раз то, о чём я писал в параграфе выше. И лексический анализ сводится к (((token))) == token
0
Денис Enterprise Java Developer
12 июля 2024, 15:01
Чтобы ответить на твой вопрос полноценно надо понимать как именно написаны тесты на эту задачу, сейчас можно только гадать, а это неблагодарное занятие.
Я тут набросал из любопытства подобный тест, но скобки для него реально не проблема, возможно при написании теста для этой задачи использовали не библиотеку для парсинга, а что-то самописное. Ну или просто используется более старая либа, курсу то уже сколько лет.
Вот эта штука например считает вызов методов безотносительно скобок.
+1
ГоффMaster
20 июня 2024, 07:34
Поддержу Дениса - в принципе, из кода надо убирать всё, что не нужно. Именно эти ненужности часто вызывают ошибки или непредсказуемость работы программы (в данном конкретном случае - непредсказуемость тестирования: ожидаешь одно, получаешь другое).
Поэтому ненужные скобки на фиг - это ошибка, просто не грамматическая, а смысловая.
0
Денис Enterprise Java Developer
4 июня 2024, 16:42
Если опустить тот факт что скобки здесь не нужны, как именно ты предлагаешь тестировать эту задачу?)
Проверить вывод в консоль? Что мешает туда сразу вывести нужную строку, без вызова метода вообще. Запись требуемая валидатором синтаксически верна, и в 9 случаях из 10 люди будут писать так.
Строчный литерал конечно же является объектом у которого вызывается метод, но на этот объект нет ссылки в коде, потому даже нельзя его захватить и проверить что у него были вызваны какие-то методы. Потому единственным адекватным методом тестирования является банальный лексический разбор кода.
+1