11

ある規則expr : expr '<' expr | ...; では、ANTLR パーサーは1 < 2 < 3( のような式を受け入れ、括弧に対応する左連想ツリーを構築します(1 < 2) < 3

演算子を右結合として扱うように ANTLR に指示できます。

expr : expr '<'<assoc=right> expr | ...; 

解析ツリーを生成します1 < (2 < 3)

ただし、多くの言語では、関係演算子は非結合的です。つまり、式1 < 2 < 3禁止されています。これは、YACC およびその派生物で指定できます。

ANTLRでも指定できますか?たとえば、expr : expr '<'<assoc=no> expr | ...;

これまでのところ、ANTLR4-book で何かを見つけることができませんでした。

4

1 に答える 1

1

次のアプローチはいかがでしょうか。基本的に、の「結果」はa < b、演算子<またはの別のアプリケーションと互換性のない型を持っています>:

expression
    :   boolExpression
    |   nonBoolExpression
    ;

boolExpression
    :   nonBoolExpression '<' nonBoolExpression
    |   nonBoolExpression '>' nonBoolExpression
    |   ...
    ;

nonBoolExpression
    :   expression '*' expression
    |   expression '+' expression
    |   ...
    ;

個人的にはダリエン を使い、解析後にエラーを検出します。

于 2014-04-10T12:42:50.280 に答える