我有一个使用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错误。
您会推荐其他方法吗? 或者预先编译所有的不同方法?
答案 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等预填充结构。在解析输入时需要添加其他类型。