关于使用Flex / Bison进行Mini-C解析的谜团

时间:2015-11-28 09:41:35

标签: parsing yacc flex-lexer

我正在尝试使用lex和yacc扫描和解析mini-C代码,我遇到了一些麻烦。

我在scanner.l文件中设置了令牌,如下所示,

...
"const"                return tconst
"int"                  return tint
[A-Za-z][A-Za-z0-9]*   return tident
...

我在parser.y文件

中声明了生产规则
...
dcl_specification        : dcl_specifiers                { semantic(8); };
dcl_specifiers           : dcl_specifier                 { semantic(9); }
                         | dcl_specifiers dcl_specifier  { semantic(10); };
dcl_specifier            : type_qualifier                { semantic(11); }
                         | type_specifier                { semantic(12); };
type_qualifier           : tconst                        { semantic(13); };
type_specifier           : tint                          { semantic(14); };
...
%%
...
void semantic(int n) {
    printf("%d\n", n);
}
...

然后,我想解析文本const int max=100, 结果是

13
11
9
8
syntax error

我希望显示10,因为规则10可能会减少const int, 但我错了。

为什么会发生这种情况,我应该怎么做?

请让我知道

0 个答案:

没有答案