yacc:e - 第85行“tac.y”,一个标记出现在作品的lhs上

时间:2018-03-21 15:48:54

标签: yacc lex

错误的确切含义是什么: yacc:e - 第85行“tac.y”,一个标记出现在制作的lhs上

第85行:

T:  INT { strcpy($$.type,"int"); }
            |
             REAL { strcpy($$.type,"real"); }

我已将属性与T

相关联
%union{
  struct attribute{
    char name[20];
    char type[20];
  }attr;
}
%token <attr> ID
%token <attr> E
%token <attr> T

1 个答案:

答案 0 :(得分:0)

这意味着它说:您正在尝试为令牌提供派生。标记来自lexcal分析,因此它们不能具有与之相关的语法规则。

我想你的意思是声明T的<语义值类型

%type <attr> T

您可能还需要更改E的声明。

避免这种混淆是将ALL_CAPS用于终端(令牌)和lower-case用于非终端的常见原因之一。