我在野牛中进行语义分析,我想使用与令牌相关联的多个属性。我的代码的一个相关部分是:
%union semrec
{
int Type;
char *id;
}
%start prog
%token <id> tIDENT
在这里,我只能使用tIDENT令牌的“id”属性。我还想将“Type”属性与tIDENT令牌相关联。为此,我尝试了以下方法:
%token <id> tIDENT
%token <Type> tIDENT
但它给了我一个令牌tIDENT的重新声明警告。我也尝试了以下内容:
%token <id> <Type> tIDENT
它也没用。我能做什么?我认为这只是一个小小的语法问题。
谢谢。
答案 0 :(得分:1)
你不能这样做:你必须以这样一种方式定义你的%union
,使所有具有多个“属性”的符号都有struct
来定义所有这些“属性”。像
%union
{
struct
{
int type;
char *id;
} type_id;
}
%type <type_id> tIDENT
并使用$1.type
或$1.id
等
但请注意,我非常怀疑你做的是正确的事情。您需要一个AST(抽象语法树)的机会很高。您应该查找相关信息。