2015-02-11 2 views
0

Итак, моя цель здесь - определить, является ли вход приемлемым или нет. Ниже приведены приемлемые входы:Правило грамматики для flex/bison не работает

Любая комбинация "U", "D", "л", "R", "N"

**Example of valid inputs:** 
udlrn 
uuuuuuuuuuuu 
dunrldd 
dddddllll 
dldnrrrrrrrrrrr 

**Example of invalid inputs:** 
abc 
abcudlr 
xudz 
dclrxy 

Вот мой код Flex

%% 
"u" return UP; 
"d" return DOWN; 
"l" return LEFT; 
"r" return RIGHT; 
"n" return NONE; 
\n return END; 
%% 

а вот мой бизон код

Однако, когда я обеспечиваю вход, такие как:

  • ldruabc

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

ответ

3

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

Вы, вероятно, следует добавить кетчуп все правила после того, как ваши другие сгибают правила:

. return *yytext; 

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

Смежные вопросы