2016-01-29 65 views
0

這是我的野牛解析器代碼。野牛表達式解析失敗C++

statement 
    : compound_statement 
    | expression_statement 
    ; 



expression_statement 
    : ';' 
    | expression ';'      {cout<<"expr found\n";} 
    ; 

expression 
    : number_expression     {cout << "number expression\n";} 
    ; 

number_expression 
    : number_arith_expression    {cout << "arith expression\n";} 
    ; 

number_arith_expression 

    : number_idenfiers 
    | number_constants 
    | number_arith_expression number_arith_expression '+' { cout<<"found\n";} 
    | number_arith_expression number_arith_expression '-' {} 

    ; 

number_idenfiers 
    : PPNUMVAR             {} 
    | PPSYSNUMVAR            {} 
    ; 

number_constants 
    : PPFLOAT             {} 
    ; 

我給表達

23 23 +;

我的結果是:

發現

ARITH表達

數量表達

行號:1 ..解析錯誤

爲什麼它不解析expression_statment?它不解析SEMICOLON。我應該更改以使用分號?

+0

最有可能的是您的詞法掃描儀不正確地返回分號令牌,但很難知道沒有看到掃描儀。爲什麼不使用bison的內置調試工具,它會給你更多的信息,包括它實際看到的令牌。請參閱https://www.gnu.org/software/bison/manual/bison.html#Enabling-Traces – rici

+0

謝謝rici。 –

回答

0

根據你的語法,一個有效的加法表達式將是兩個表達式,後跟一個+,但是你的輸入的中間是+

+0

哎呀!抱歉。我誤入歧途。它是一個後綴表達式。現在我糾正了這個問題。 –