我需要使用 flex 和 bison 来解析一些代码。
YYSTYPE 的默认类型是int
,尽管我从来没有这样声明过。这是野牛的默认设置吗?
将字符串传回对我有很大帮助。我读到这个:如何解决 Bison 警告“...没有声明的类型” 这看起来是个好方法。(我还不需要联合的全部功能,只需要 char* 部分,但我不妨使用联合,因为它以后可能会有所帮助。)
它不适合我。我收到这些错误:
y:111.37-38: $1 of `ConstExpression' has no declared type
y:113.34-35: $1 of `ConstFactor' has no declared type
y:114.35-36: $1 of `ConstFactor' has no declared type
y:119.34-35: $1 of `Type' has no declared type
y:109.23-48: warning: type clash on default action: <str> != <>
y:115.23-27: warning: type clash on default action: <str> != <>
[...more of the same snipped...]
以下是我的y
语法文件中的声明:
%union {
char *str;
}
%type<str> ConstExpression ConstFactor Type
.l
这是我文件中的一行:
[a-zA-Z]+[a-zA-Z0-9]* { yylval.str = strdup(yytext); return yident;}
我还需要做什么来解决错误?