所以我的目标是能够确定输入是否可接受。以下是可接受的输入:
" u"," d"," l"," 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;
%%
这是我的野牛代码
%token UP
%token DOWN
%token LEFT
%token RIGHT
%token NONE
%token END
%%
start: directions END
{
printf("\nParse complete with acceptable input\n");
}
;
directions: direction
|
directions direction
;
direction: UP | DOWN | LEFT | RIGHT | NONE
;
%%
但是,当我提供输入时,例如:
即使此输入无效,我也会收到解析完成消息。
答案 0 :(得分:3)
任何与flex代码中的任何模式都不匹配的内容都会回显到stdout并被忽略,因此,就目前的构成而言,任何由单行组成的输入都是可以接受的。
您应该在其他弹性规则之后添加一个包罗万象的规则:
. return *yytext;
这样,输入中的任何其他字符都将返回到解析器,在那里它将触发语法错误。