在野牛多个属性(Multiple attributes in bison)

2019-10-29 07:14发布

我做野牛语义分析,我想用一个令牌关联的多个属性。 我的代码一个相关的部分是:

%union semrec
{
    int Type;
    char *id;

}

%start prog

%token <id>  tIDENT

在这里,我只能用witht的tIDENT令牌“id”属性。 我也想与tIDENT令牌“类型”属性相关联。 要做到这一点,我试过如下:

 %token <id>  tIDENT
 %token <Type>  tIDENT

但它给我的令牌tIDENT一个重新声明警告。 我也试过如下:

 %token <id> <Type> tIDENT

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

谢谢。

Answer 1:

你不能做到这一点是这样的:你必须定义%union在所有具备多个符号“属性”有一个这样的方式struct来定义所有这些“属性”。 就像是

%union
{
  struct
  {
    int type;
    char *id;
  } type_id;
}
%type <type_id> tIDENT

并使用$1.type$1.id等。

但是请注意,我很怀疑你在做正确的事情。 机会是很高,你将需要一个AST(抽象语法树)。 你应该看看,以了解有关信息。



文章来源: Multiple attributes in bison