【发布时间】:2021-11-22 16:45:58
【问题描述】:
我在 yacc 中编写了一个非常简单的左递归语法,它基于一种简单的类 C 语言的数据类型。生成的 yacc 解析器在左递归后缀之前减少,我也不知道为什么。
这里是源代码:
%%
start: type {
printf("Reduced to start.\n");
};
type: pointer {
printf("Reduced pointer to type.\n");
}
| char {
printf("Reduced char to type.\n");
};
char: KW_CHAR {
printf("Reduced to char.\n");
};
pointer: type ASTERISK {
printf("Reduced to pointer.\n");
};
%%
给定输入char * (KW_CHAR ASTERISK):
Reduced to char.
Reduced char to type.
syntax error
【问题讨论】:
-
我认为您的源代码在语法之外有问题,或者您没有正确构建它。很难说,因为显示的不够多。填写详细信息,对我来说效果很好。
-
很可能是词法分析器问题——也许是空间引起了问题。尝试在启用 YYDEBUG 的情况下运行(在调用
yyparse();之前设置yydebug = 1;)