0
对于输入abb
答案被接受,但为什么?了解为何输入被解析器接受
输入ab
正确答案
输入aab
拒绝正确的答案
输入aabb
接受正确的答案
// parser file
%{
#include<stdio.h>
%}
%left '-' '+'
%left '*' '/'
%%
A: S { printf("accepted\n"); exit(1);}
| error
|
;
S : 'a' S 'b'
| 'a' 'b'
|
;
%%
void yyerror(char *s)
{
printf("%s",s);
exit(1);
}
int main()
{
yyparse();
return 1;
}
// lex file
%option noyywrap
%{
#include "first.tab.h"
%}
%%
[a-b] {yylval=(atoi(yytext));
return *yytext;}
\+|\-|\/|\* {return *yytext;}
. { yyerror("Invalid Character");}
\n { return 1;}
%%
谢谢你的回答。如果我想让abb不应该被接受。我应该怎么做 –
检查输入的结束。也就是说,不要让你的解析器寻找** a b **,而是** a b DONE **。 –
非常感谢你..现在它工作。 –