我对 bison/flex 有这个问题(我看过其他帖子,但我没有在任何地方定义 YYSTYPE,所以这不是这里的问题)。我想使用 %union 将变量从词法分析器传递给 .y。这就是我所拥有的
%{
#include "simple-expr.tab.h"
#include <math.h>
extern double vbltable[26];
extern int yyval;
%}
%%
([0-9]+|([0-9]*\.[0-9]+)([eE][-+]?[0-9]+)?) { yyval.integerID = atoi(yytext); return ID; }
\* { yyval.charTokens = yytext; return TIMES; }
\+ { yyval.charTokens = yytext; return PLUS; }
\( { yyval.charTokens = yytext; return LPAREN; }
\) { yyval.charTokens = yytext; return RPAREN; }
[ \t\n] ;
%%
和 yacc:
%{
%}
%union {
int integerID;
char* charTokens;
}
%token <charTokens> PLUS TIMES LPAREN RPAREN
%token <integerID> ID
%%
e : e PLUS t { printf("FROM THE yypars.y %c", PLUS); }
| t
;
t : t TIMES f
| f
;
f : LPAREN e RPAREN
| ID
;
%%
这些是我得到的错误:
simple-expr.lex:9:8: 错误:在不是结构或联合的东西中请求成员'integerID' simple-expr.lex:10:8: 错误:在不是结构或联合的东西中请求成员'charTokens' simple-expr.lex:11:8: 错误:在不是结构或联合的东西中请求成员 'charTokens' simple-expr.lex:12:8: 错误:在不是结构或联合的东西中请求成员'charTokens' simple-expr.lex:13:8: 错误: 请求成员 'charTokens' 不是结构或联合 make: * [simple-expr] 错误 1
正如我之前所说 - 我没有在任何地方定义 YYSTYPE,所以这应该不是问题。