1

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

%union semrec
{
    int Type;
    char *id;

}

%start prog

%token <id>  tIDENT

在这里,我只能使用带有 tIDENT 令牌的“id”属性。我还想将“类型”属性与 tIDENT 令牌相关联。为此,我尝试了以下方法:

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

但它给了我一个令牌 tIDENT 的重新声明警告。我还尝试了以下方法:

 %token <id> <Type> tIDENT

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

谢谢你。

4

1 回答 1

2

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

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

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

Note however that I very much doubt that you're doing the right thing. Chances are high that you will need an AST (Abstract Syntax Tree). You should look for information about that.

于 2013-03-29T08:43:06.453 回答