2017-11-05 3 views
1

私はAntlr4を使用しています。ここに私の文法は次のとおりです。なぜこの文法はあいまいですか?

assign : id '=' expr ; 
    id : 'A' | 'B' | 'C' ; 
    expr : expr '+' term 
     | expr '-' term 
     | term ; 
    term : term '*' factor 
     | term '/' factor 
     | factor ; 
factor : expr '**' factor 
     | '(' expr ')' 
     | id ; 
    WS : [ \t\r\n]+ -> skip ; 

私はこの文法があいまいである知っているとも私は文法に要素を追加する必要があります知っているが、私は文法を明確にする方法がわかりません。

答えて

1
factor : expr '**' factor 

入力

A + B ** C 

A + Bは、私たちはfactorとしてそれを分析することができexprで検討し、意味的(A+B)C

しかし、他の、より従来的な解釈(A + (BC))も可能です。

<expr>     => 
<expr> + <term>   => 
<term> + <term>   => 
<factor> + <term>  => 
A  + <term>  => 
A  + <factor>  => 
A + <expr> ** <factor> => 
A + <term> ** <factor> => 
A + <factor> ** <factor> => 
A + B ** <factor>  => 
A + B ** C 
関連する問題