Bison:what():basic_string :: _ S_construct null无效

时间:2014-12-22 20:01:48

标签: c++ parsing bison

所以我正在将Bison用于我正在进行的项目。我的野牛文件看起来与此相似:

%{
#include <iostream>
....
%}
%union
{
  int intVal;
  double dVal;
  char charVal;
  char* strVal;
}
%token ID NUMBER INT DOUBLE CHAR STR END
%type <strVal> ID 
%type <strVal> INT DOUBLE CHAR STR END
%type <intVal> NUMBER
%type <strVal> dataType
%start program
%%
program: expressions
...
dataType: INT
        | DOUBLE
        | CHAR
        | STR
varDef: dataType ID { std::cout << $1 << endl; }
....

当我编译并运行它并尝试通过它运行“int a”时,它将打印出$ 2的varDef(“a”)但是当我告诉它打印$ 1时,我得到了

terminate called after throwing an instance of 'std::logic_error'
    what():  basic_string::_S_construct null not valid

我也尝试将我的%union更改为

%union
{
   struct {
      ....
   };
}

并没有改变一件事。我知道我做错了什么?

2 个答案:

答案 0 :(得分:4)

你没有采取任何行动:

  dataType: INT
    | DOUBLE
    | CHAR
    | STR

野牛的默认操作是

{ $$ = $1 }

作为代币

%token ID NUMBER INT DOUBLE CHAR STR END

没有类型你传递的东西没有任何价值,没有类型传递给*char

类型的东西

(我看到你现在已经解决了,但希望我的解释能解释原因)

答案 1 :(得分:0)

如果有人感兴趣我就解决了。我改变了

dataType: INT { $$ = "int"; }
        | DOUBLE { $$ = "double"; }
....

所以我实际上是将一些null传递给了cout。谢谢你的帮助!