【发布时间】:2015-05-01 08:35:16
【问题描述】:
我要制作一个编译器,并为此使用 flex 和 bison。 我正在实施布尔比较。但是当野牛进入我的令牌 COMP 时出现错误。
我已经这样声明了:
("==")|(">=")|("<=")|("!=")|(">")|("<")
{
sscanf(yytext,"%s",yylval.svalcmp); return COMP;
}
在野牛中,我的语法是:
ExpBool :
Exp COMP Exp { printf("TEST= %s \n",$2); /*comp_exp_temp($2);*/}
| Exp BOPE Exp
| NEGATION Exp
;
我的工会:
%union {
char cval;
char * sval;
char * svalt;
char * svalcmp;
char svalas;
char * svalds;
int signedint;
int usint;
}
和令牌 decaring :
%token <svalcmp> COMP
Bison 执行第一个 Exp,但是当它读取 COMP 时,我得到一个分段错误。
有人有想法吗?
【问题讨论】:
-
您需要显示更多代码(尤其是创建
yylval联合的代码),但很可能您在其中有一个简单的char *,您永远不会设置指向任何地方有效。 -
我已添加我的联合代码
标签: c bison flex-lexer