野牛的多个属性

时间:2013-03-29 08:37:05

标签: compiler-construction semantics bison lexical-analysis

我在野牛中进行语义分析,我想使用与令牌相关联的多个属性。我的代码的一个相关部分是:

%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

它也没用。我能做什么?我认为这只是一个小小的语法问题。

谢谢。

1 个答案:

答案 0 :(得分:1)

你不能这样做:你必须以这样一种方式定义你的%union,使所有具有多个“属性”的符号都有struct来定义所有这些“属性”。像

这样的东西
%union
{
  struct
  {
    int type;
    char *id;
  } type_id;
}
%type <type_id> tIDENT

并使用$1.type$1.id

但请注意,我非常怀疑你做的是正确的事情。您需要一个AST(抽象语法树)的机会很高。您应该查找相关信息。