Все еще изучал yacc и flex, и наткнулся на сценарий, который я не рассматриваю с практическими рекомендациями и учебными пособиями.Я пытаюсь проанализировать файл, и по ходу дела я делаю некоторую вторичную проверку ошибок в коде, который я поместил в мой parser.y
файл.Когда я сталкиваюсь с чем-то, что является лексикографически правильным (то есть, синтаксический анализ соответствует правильно), но логически неправильным (неожиданное значение или неуместное значение), как я могу получить yyparse
для выхода?Кроме того, могу ли он вернуть мне код ошибки, который я могу проверить в своем коде вызова?
/* Sample */
my_file_format:
header body_lines footer
;
header:
OBRACE INT CBRACE
|
OBRACE STRING CBRACE {
if ( strcmp ( $1, "Contrived_Example" ) != 0 ) { /* I want to exit here */ }
}
;
/* etc ... */
Я понимаю, что в моем примере я могу просто искать "Contrived_Example", используя правило,но моя точка зрения находится в if
-блоке - могу ли я сказать yyparse
, что я хочу прекратить разбор здесь?