最近在构思一个程序,对多个C源文件进行分析,找出各个变量、函数、结构、宏的定义和引用(跟sourceinsight差不多吧)。
从网上找到了c语言的lex/yacc解析器代码,但是这个代码在处理下面的代码时出错:
typedef unsigned char uint8_t;
uint8_t var;
原因在于,当lex碰到uint8_t时,无法判定其是否为一个变量还是一个类型,只能把IDENTIFIER返回给yacc。而c的语法允许这样的语句:
some_var_or_type;
所以,不借助符号表,yacc无法判断其到底是变量还是类型。
先写到这,晚上看看文档,看看能不能解决。
没有评论:
发表评论