2011-07-22 13 views
2

私は、次のANTLRの文法ファイルをコンパイルし、ANTLRあいまいな参照

conditional_expression 
    : (logical_or_expression -> logical_or_expression) ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))? 
    ; 

私は、次のエラーメッセージが表示されます。

エラー(132):nesC.g:769:109:参照$ conditional_expressionは です。ルールconditional_expressionは、誰もが私にこの解決策を教えてもらえます

を生産(assu明囲むルール)で参照ルールと を囲むていますか?ありがとう。 :-)

答えて

2

ANTLRは、$conditional_expressionの意味を決めることができません。ルール自体、または$rhsとラベル付けされたものです。

conditional_expression 
    : (logical_or_expression -> logical_or_expression) 
    ('?' expression ':' rhs -> ^('?' $conditional_expression expression rhs))? 
    ; 

rhs 
    : conditional_expression 
    ; 

でもないでしょう:

conditional_expression // <--- this one? 
    : (logical_or_expression -> logical_or_expression) 
    ('?' expression ':' rhs=conditional_expression -> ^('?' $conditional_expression expression $rhs))? 
          // ^
          //  | 
          //  +--- or this one? 
    ; 

あなたが今しようとしたとして、それが働いて得るために、あなたは何のあいまいな名前付けが存在しない、その場合には、それ自身のルールにrhs=conditional_expressionを移動する必要がありますこれはまた、あなたのためのトリックを行います

conditional_expression 
    : (e=logical_or_expression      -> logical_or_expression) 
    ('?' if_true=expression ':' if_false=expression -> ^('?' $e $if_true $if_false))? 
    ; 

か:

conditional_expression 
    : (e=logical_or_expression            -> logical_or_expression) 
    ('?' if_true=conditional_expression ':' if_false=conditional_expression -> ^('?' $e $if_true $if_false))? 
    ; 

関連する問題