Написание правила для синтаксического анализатора

#c #parsing #grammar #yacc #rule

#c #синтаксический анализ #грамматика #yacc #правило

Вопрос:

Hii,

У меня есть синтаксический анализатор, в котором много правил, и с ним нет проблем, все работает.. я использую lex и yacc…

Проблема в том, что мне нужно правило, такое, что если входная строка не соответствует ни одному из правил, определенных в анализаторе, то я хочу написать правило, которое будет принимать такую входную строку..

Итак, в основном, что я хочу сделать, так это то, что я не хочу, чтобы анализатор прекращал выдавать сообщение об ошибке самому себе, если входные данные не соответствуют какому-либо другому правилу, я хочу отобразить это сообщение об ошибке, а затем заставить анализатор продолжить свой синтаксический анализ вместо завершения..

Я знаю, что мне нужно внести изменения в функцию yyerror(), но как именно.. или есть ли какое-либо другое, я могу написать такое правило…

Спасибо .. 🙂

Ответ №1:

Вы можете поместить «.» (точку) в конце других правил синтаксического анализа. Оно соответствует любой строке, которая не соответствовала другим правилам. Смотрите эту ссылку для получения подробной информации.

Надеюсь, это то, что вы имели в виду.

Редактировать: похоже, я неправильно понял. Чтобы определить действие по умолчанию, вы можете просто поместить { } action в файл синтаксического анализатора. Смотрите здесь.

Комментарии:

1. Я думаю, что то, на что вы ссылались, предназначено для токенизации, а не для синтаксического анализа.

2. Спасибо за эти ссылки, это было полезно.. Проблема решена .. 🙂 🙂