我有一个 Yacc 程序来检查一个数字是否是 0^n 1^n 的形式。
%start S
%%
S:'0' S '1' {printf("Success\n");}|;
%%
(所有标记都在 lex 文件中定义)
我得到的输出如下
0011
Success
Success
syntax error
1100
syntax error
我理解为什么成功打印两次,但是第一个输出中的语法错误是什么?
此外,bison
LALR(1) 解析器生成器是如何完成这项任务的?