使用回文字符串的野牛/ Flex练习

问题描述 投票:0回答:1

我正在与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;
}

当我尝试使用正确的字符串ababbbbababaabaaaaabaab时,它将返回语法错误。我认为语法可能有问题,但是使用Antlr进行相同的实验就可以了。

现在,我知道Antlr的工作原理是自上而下,而Bison自下而上,但这不是问题。谁能向我解释这个问题?谢谢。

bison flex-lexer yacc lex
1个回答
0
投票

无法使用从左到右的解析器来解析该语法,因为在不知道输入多长时间的情况下,无法知道何时应用非递归产生式。

© www.soinside.com 2019 - 2024. All rights reserved.