bison - Bison/Flex 练习回文字符串的语言
问题描述
我正在与 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 自下而上工作,但这不是问题。谁能向我解释这个问题?谢谢你。
解决方案
该语法无法使用从左到右的解析器进行解析,因为在不知道输入多长时间的情况下无法知道何时应用非递归产生式。
推荐阅读
- json - package.json 知道是否有任何未使用的依赖项
- parallel-processing - 了解如何在 Slurm 上提交并行计算作业
- r - 增加三元图中的箭头粗细 [ggtern]
- wpf - 绑定命令到加载的视图模型
- python-3.x - 如何在太平洋时区使用 Google Calendar API 提取我今天拥有的所有事件
- postgresql - postgres查询不同的表
- php - 通过 ODBC 将 codeigniter 3 连接到任何地方的 SQL
- python - discord.py 给自定义状态排名
- list - 我的递归函数总是返回 None
- python - Matplotlib 不会在 Jupyter Notebook 中显示图像