我正在与Bison和Flex一起练习。我的目标是为回文字符串的语言创建一个解析器。这是我非常简单的.l
文件:
%{
#include <stdio.h>
#include <string.h>
#include "G1.tab.h"
%}
%%
"a" { return (A);}
"b" { return (B);}
%%
这是我的.y
文件:
%{
#include <stdio.h>
int yylex();
int yyerror(char *s);
%}
%token A B
%%
prog:
srule
;
srule
: A srule A
| B srule B
| A A
| B B
| A
| B
;
%%
int yyerror(char *s){
printf("\nParsing result: %s\n\n", s);
return 0;
}
int main()
{
int parse = yyparse();
if(parse == 0) printf("\nParsing result: SUCCESS\n\n");
return 0;
}
当我尝试使用正确的字符串ababbbbaba
或baabaaaaabaab
时,它将返回语法错误。我认为语法可能有问题,但是使用Antlr进行相同的实验就可以了。
现在,我知道Antlr的工作原理是自上而下,而Bison自下而上,但这不是问题。谁能向我解释这个问题?谢谢。
无法使用从左到右的解析器来解析该语法,因为在不知道输入多长时间的情况下,无法知道何时应用非递归产生式。