ANTLRにNOTロジックはありますか? 私は基本的に私が持っているルールを否定しようとしていて、それが可能かどうか疑問に思っていました.ANDロジックもありますか?
7770 次
2 に答える
15
@larsmans はすでに回答を提供しています。ANTLR ルールの法的な否定の例を挙げたいと思います (それらで間違いが起こることが非常に多いため)。
ANTLR の否定演算子は~
(チルダ) です。lexer ルール内で、~
は単一の文字を否定します。
NOT_A : ~'A';
'A'
および以下を除く任意の文字に一致します。
NOT_LOWER_CASE : ~('a'..'z');
小文字の ASCII 文字を除く任意の文字に一致します。lats の例は、次のように書くこともできます。
NOT_LOWER_CASE : ~LOWER_CASE;
LOWER_CASE : 'a'..'z';
1 文字だけ否定する限り、使用は有効です~
。次のようなことは無効です。
INVALID : ~('a' | 'aa');
文字列を否定できないためです'aa'
。
パーサー ルール内では、否定は文字では機能せず、トークンで機能します。したがって、parse
ルールは次のとおりです。
parse
: ~B
;
A : 'a';
B : 'b';
C : 'c';
以外の文字には一致しません'b'
が、トークン以外のB
トークンには一致します。したがって、トークンA
(文字'a'
) またはトークンC
(文字) のいずれかに一致します'c'
。
.
(DOT) 演算子にも同じロジックが適用されます。
- lexer ルール内では、set の任意の文字に一致します
\u0000..\uFFFF
。 - パーサー規則の内部では、任意のトークン (任意のレクサー規則) に一致します。
于 2011-04-04T06:49:22.593 に答える