[英]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.