我正在尝试使用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
,
但我错了。
为什么会发生这种情况,我应该怎么做?
请让我知道