ObjectiveC antlr v3 文法 ( http://www.antlr3.org/grammar/1212699960054/ObjectiveC2ansi.g ) を見ると、他の一般的な文法の多くは、条件を解決するためにこれと同様の構造を行っています。
conditional_expression : logical_or_expression
('?' logical_or_expression ':' logical_or_expression)? ;
constant_expression : conditional_expression ;
logical_or_expression : logical_and_expression
('||' logical_and_expression)* ;
logical_and_expression : inclusive_or_expression
('&&' inclusive_or_expression)* ;
inclusive_or_expression : exclusive_or_expression
('|' exclusive_or_expression)* ;
exclusive_or_expression : and_expression ('^' and_expression)* ;
and_expression : equality_expression ('&' equality_expression)* ;
equality_expression : relational_expression
(('!=' | '==') relational_expression)* ;
relational_expression : shift_expression
(('<' | '>' | '<=' | '>=') shift_expression)* ;
shift_expression : additive_expression (('<<' | '>>') additive_expression)* ;
additive_expression : multiplicative_expression
(('+' | '-') multiplicative_expression)* ;
multiplicative_expression : cast_expression
(('*' | '/' | '%') cast_expression)* ;
cast_expression : '(' type_name ')' cast_expression | unary_expression ;
unary_expression
: postfix_expression
| '++' unary_expression
| '--' unary_expression
| unary_operator cast_expression
| 'sizeof' ('(' type_name ')' | unary_expression) ;
unary_operator : '&' | '*' | '-' | '~' | '!' ;
あなたがそれを読むと、彼らがこの非常に長い 1 対 1 の条件付きチェーン from conditional_expression
to logical_or_expression
to logical_and_expression
to to をinclusive_or_expression
行っていることに気付くでしょうexclusive_or_expression
。
さて、私はANTLRに関してはかなり素朴ですが、これは条件を解析する奇妙な方法だと思います。logical_or_expression の定義が他のすべての条件式タイプをひねるのは非常に複雑に思えます。結局のところ、論理の定義はビットごとの左シフトとどのような関係があるのOR
でしょうか?
おそらくより良い方法がありますか、またはこの方法が必要な特定の理由がありますか?