解析C头文件

Parsing C Header Files

本文关键字:文件 解析      更新时间:2023-10-16

我有一个C头文件,我已经使用gcc -E标志预编译,现在正试图使用Lex和Yacc解析;但是,它在类型定义变量上挂起了。

例如:

typedef unsigned long ULONG;
ULONG i = 5;

将在第二行ULONG抛出语法错误。

我试图重新定义部分语法(在这里找到)http://www.quut.com/c/ANSI-C-grammar-y.html,特别是在type_specifer下,用IDENTIFIER代替TYPE_NAME,但是这会产生多个s/r和r/r错误,我无法修复。

你会推荐其他的方法吗?或者是一种不同的预编译方法?

在代码中你也链接:
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等预填充结构体。在解析输入时需要添加的其他类型