Flex&Bison Segmenation故障
我做了一个编译器,我使用flex和bison。 我正在实施布尔比较。 但是当野牛进入我的令牌COMP时我有一个错误。
我已经这样宣布:
("==")|(">=")|("<=")|("!=")|(">")|("<")
{
sscanf(yytext,"%s",yylval.svalcmp); return COMP;
}
在野牛中我的Gramar是:
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;
}
和令牌中断:
%token <svalcmp> COMP
野牛执行第一个Exp,但是当它读取COMP时,我会遇到Segmenation故障。
任何人有想法?
我通常在词法分析器中使用不同的样式,因此无法验证(...)|(...)...语法是否正确。 但是,你的工会与yylval有什么关系? svalcmp是缓冲区还是只是一个指针? 如果它是一个缓冲区,你可能应该限制scanf格式的长度。 如果它只是一个指针,你可能已经清理了内存,并且可能会碰到空指针崩溃。
如果你在GDB中启动它,附加一个回溯,然后打印yylval
链接地址: http://www.djcxy.com/p/41745.html上一篇: Flex & Bison Segmenation fault
下一篇: Flex and Bison tools