簡體   English   中英

野牛:what():basic_string :: _ S_construct null無效

[英]Bison: what(): basic_string::_S_construct null not valid

因此,我正在將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 {
      ....
   };
}

它並沒有改變任何事情。 知道我在做什么錯嗎?

您沒有采取以下行動:

  dataType: INT
    | DOUBLE
    | CHAR
    | STR

野牛的默認動作是

{ $$ = $1 }

作為代幣

%token ID NUMBER INT DOUBLE CHAR STR END

沒有類型,您傳遞了沒有值的東西,也沒有類型傳遞給*char類型的東西

(我看到您現在已經解決了問題,但希望我的解釋能夠解釋原因)

如果有人感興趣,我就解決了。 我變了

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

所以我實際上是將null傳遞給cout。 謝謝您的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM