Flex& Bison Segmenation故障

时间:2015-05-01 08:35:16

标签: c bison flex-lexer

我要制作一个编译器,我使用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

Bison执行第一个Exp但是当它读取COMP时,我得到一个Segmenation错误。

有人有想法吗?

1 个答案:

答案 0 :(得分:0)

我通常在词法分析器中使用不同的样式,因此无法验证(...)|(...)...语法是否正确。但是,你的联盟与yylval相关联的是什么? svalcmp是缓冲区还是指针?如果它是缓冲区,您可能应该将scanf格式限制为一个长度。如果它只是一个指针,你可能已经消耗了内存,并且可能遇到空指针崩溃。

如果你在GDB中提出它,请附上一个回溯,并打印yylval

相关问题