#c #parsing #grammar #yacc #rule
#c #синтаксический анализ #грамматика #yacc #правило
Вопрос:
Hii,
У меня есть синтаксический анализатор, в котором много правил, и с ним нет проблем, все работает.. я использую lex и yacc…
Проблема в том, что мне нужно правило, такое, что если входная строка не соответствует ни одному из правил, определенных в анализаторе, то я хочу написать правило, которое будет принимать такую входную строку..
Итак, в основном, что я хочу сделать, так это то, что я не хочу, чтобы анализатор прекращал выдавать сообщение об ошибке самому себе, если входные данные не соответствуют какому-либо другому правилу, я хочу отобразить это сообщение об ошибке, а затем заставить анализатор продолжить свой синтаксический анализ вместо завершения..
Я знаю, что мне нужно внести изменения в функцию yyerror(), но как именно.. или есть ли какое-либо другое, я могу написать такое правило…
Спасибо .. 🙂
Ответ №1:
Вы можете поместить «.» (точку) в конце других правил синтаксического анализа. Оно соответствует любой строке, которая не соответствовала другим правилам. Смотрите эту ссылку для получения подробной информации.
Надеюсь, это то, что вы имели в виду.
Редактировать: похоже, я неправильно понял. Чтобы определить действие по умолчанию, вы можете просто поместить { }
action в файл синтаксического анализатора. Смотрите здесь.
Комментарии:
1. Я думаю, что то, на что вы ссылались, предназначено для токенизации, а не для синтаксического анализа.
2. Спасибо за эти ссылки, это было полезно.. Проблема решена .. 🙂 🙂