解析C头文件

时间:2011-07-11 20:08:07

标签: c++ c yacc lex

我有一个使用gcc -E标志预编译的C头文件,现在我正在尝试使用Lex和Yacc进行解析;然而,它正在挂起typedef变量。

例如:

typedef unsigned long ULONG;
ULONG i = 5;

会在第二行的ULONG上抛出语法错误。

我尝试重新定义部分语法(在此处找到)http://www.quut.com/c/ANSI-C-grammar-y.html,特别是在type_specifer下,将TYPE_NAME替换为IDENTIFIER,但这会创建多个s / r和我无法解决的r / r错误。

您会推荐其他方法吗? 或者预先编译所有的不同方法?

1 个答案:

答案 0 :(得分:3)

在你连接的代码中:
http://www.quut.com/c/ANSI-C-grammar-y.html

看看底部:
你会看到这个功能

int check_type(void)
{
 /*
  * pseudo code --- this is what it should check
  *
  * if (yytext == type_name)
  *     return TYPE_NAME;
  *
  * return IDENTIFIER;
  */

/*
 *  it actually will only return IDENTIFIER
 */

    return IDENTIFIER;
}

你实际上需要编写标识天气序列的代码(yytest,yytext + yylength)是一个标识符或TYPE_NAME。这意味着在解析器中你需要在解析代码时构建一些结构,这样这个函数就可以了在结构中查找标识符。

使用默认类型char / int / short / long / float / double等预填充结构。在解析输入时需要添加其他类型。