我正在使用 PLY 编写一个 C 解析器,最近遇到了一个问题。这段代码:
typedef int my_type;
my_type x;
是正确的 C 代码,因为 my_type 被定义为之前使用的类型。我通过在解析器中填充类型符号表来处理它,词法分析器使用该表来区分类型和简单标识符。
但是,虽然类型声明规则以 SEMI(';' 标记)结尾,但 PLYmy_type
在决定使用第一行完成之前将标记从第二行转移。因此,我没有机会将类型符号表中的更新传递给词法分析器,它会将 my_type 视为标识符而不是类型。
任何修复的想法?
完整代码位于:http ://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py 不知道如何从中创建一个更小的示例。
编辑:
问题解决了。请参阅下面的解决方案。