yacc: e - "tac.y" 的第 85 行,一个标记出现在产生式的 lhs 上
yacc: e - line 85 of "tac.y", a token appears on the lhs of a production
错误的确切含义是什么:
yacc: e - "tac.y" 的第 85 行,一个标记出现在生产的 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
意思就是它所说的:您正在尝试提供 令牌 的派生。标记来自词法分析,因此它们不能有与之关联的语法规则。
我猜你是想声明 T
的(语义值)类型:
%type <attr> T
您可能还需要更改 E
的声明。
避免这种混淆是通常使用 ALL_CAPS 表示终端(令牌)和 lower-case
表示 non-terminals 的原因之一。
错误的确切含义是什么: yacc: e - "tac.y" 的第 85 行,一个标记出现在生产的 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
意思就是它所说的:您正在尝试提供 令牌 的派生。标记来自词法分析,因此它们不能有与之关联的语法规则。
我猜你是想声明 T
的(语义值)类型:
%type <attr> T
您可能还需要更改 E
的声明。
避免这种混淆是通常使用 ALL_CAPS 表示终端(令牌)和 lower-case
表示 non-terminals 的原因之一。