SIGSEGV 在创建解析器树时

SIGSEGV while creating a parser-tree

我正在尝试使用 flex/bison 创建解析器生成器。这是我的部分 parser.y 代码:

func_definition : type_specifier ID LPAREN parameter_list RPAREN compound_statement
                 {
                    $$=new Symbol_info();
                    $$->code+="PROC:"+ ->symbol+"\n";

                    if(->symbol!="main")
                    {
                        $$->code+="PUSH AX\n";
                        $$->code+="PUSH BX\n";
                        $$->code+="PUSH CX\n";
                        $$->code+="PUSH DX\n";
                    }

                    $$->code += ->code ;

                    if(->symbol!="main") {
                        $$->code+="POP DX\n";
                        $$->code+="POP CX\n";
                        $$->code+="POP BX\n";
                        $$->code+="POP AX\n";
                    }

                    fprintf(parseLog, "GRAMMER RULE: func_definition -> type_specifier ID LPAREN parameter_list RPAREN compound_statement  \n"); 
                 }
                ;

这是我的部分 lex.l 代码。

{id} {
    Symbol_info *s= new  Symbol_info(yytext, "ID");
    yylval = (YYSTYPE)s;

    return ID;
}

这是我的部分 symbol_table.h 代码

class SymbolInfo{
    string type;
    string symbol;
public:
    string code;
    SymbolInfo *next;


    SymbolInfo(){
        symbol="";
        type="";
        code="";
    }
    SymbolInfo(string symbol, string type){
        this->symbol=symbol;
        this->type=type;
        code="";
    }
    SymbolInfo(char *symbol, char *type){
        this->symbol=string(symbol);
        this->type= string(type);
        code="";
    }

    SymbolInfo(const SymbolInfo *sym){
        symbol=sym->symbol;
        type=sym->type;
        code=sym->code;
    }

所以,当我创建一个程序时,我得到了一个 SIGSEGV 分段错误。 (地址边界错误)。当我尝试访问 lex 函数返回给我的 yylval 时,似乎出现了该错误。

我试图在 Ubuntu 64 位实例 (Ubuntu 17.10) 上 运行 这段代码。我不知道为什么,但相同的代码 运行 在 32 位系统 (Ubuntu 14.10) 上没问题。

可能是因为整数的大小。 Here is the code如果你有兴趣。