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