ANTLR中是否存在逻辑AND和AND?

ANTLR中是否存在逻辑AND和AND?,antlr,grammar,antlr3,formal-languages,Antlr,Grammar,Antlr3,Formal Languages,ANTLR中没有逻辑吗?我基本上是想否定我的一条规则,我想知道它是否可能,是否有逻辑 ANTLR为(CFL)生成解析器。在这种情况下,not将转换为补码,和将转换为交叉点。但是,在补码和交集下,即不(规则)不一定是CFG规则 换句话说,不可能以合理的方式实现not和和,因此它们不受支持。@larsmans已经提供了答案,我只想举一个ANTLR规则中的法律否定的例子(因为在这些规则中犯错误的情况非常多) ANTLR中的否定运算符是~(tilde)。在lexer规则中,~对单个字符求反: NOT_A

ANTLR中没有逻辑吗?我基本上是想否定我的一条规则,我想知道它是否可能,是否有逻辑

ANTLR为(CFL)生成解析器。在这种情况下,
not
将转换为补码,
将转换为交叉点。但是,在补码和交集下,即
不(规则)
不一定是CFG规则


换句话说,不可能以合理的方式实现
not
,因此它们不受支持。

@larsmans已经提供了答案,我只想举一个ANTLR规则中的法律否定的例子(因为在这些规则中犯错误的情况非常多)

ANTLR中的否定运算符是
~
(tilde)。在lexer规则中,
~
对单个字符求反:

NOT_A : ~'A';
匹配除
'A'
之外的任何字符,并且:

NOT_LOWER_CASE : ~('a'..'z');
匹配除小写ASCII字母以外的任何字符。lats示例也可以写成:

NOT_LOWER_CASE : ~LOWER_CASE;
LOWER_CASE : 'a'..'z';
只要您只对单个字符求反,就可以使用
~
。这样做是无效的:

INVALID : ~('a' | 'aa');
因为您不能对字符串
'aa'
求反

在解析器规则中,否定不适用于字符,而适用于标记。因此,
parse
规则:

parse
  :  ~B
  ;

A : 'a';
B : 'b';
C : 'c';
不匹配除
'b'
以外的任何字符,但匹配除
b
标记以外的任何标记。因此,它将匹配令牌
A
(字符
'A'
)或令牌
C
(字符
'C'

相同的逻辑适用于
(DOT)运算符:

  • 在lexer规则中,它匹配集合中的任何字符
    \u0000..\uFFFF
  • 在解析器规则中,它匹配任何标记(任何lexer规则)

您好,您知道如何编写规则来匹配简单字符串而不是特定关键字吗?我试着在下面写这样的规则(但根本不起作用)字符串:~(“\r”|“\n”|“\t”|“|”关键字)你的例子,而不是小写:~LOWER\u CASE;小写字母:“a'…'z';在Antlr4中不起作用。我得到“当前集合中不支持规则引用小写”我得到的错误与@ccleve@baruchl我的答案是ANTLR3,而不是ANTLR4。所以在v4中,您只需这样做:
而不是小写:~[a-z];下_格:[a-z]