antlr - ANTLR中是否存在逻辑AND和NOT?

标签 antlr grammar antlr3 formal-languages

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

最佳答案

@larsmans 已经提供了答案,我只想举例说明 ANTLR 规则中的法律否定(因为经常发生错误)。

ANTLR 中的否定运算符是 ~(波浪号)。在词法分析器规则中, ~ 否定单个字符:

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) 运算符:

词法分析器中的
  • 规则它匹配来自集合 \u0000..\uFFFF 的任何字符;
  • 在解析器规则中匹配任何标记(任何词法分析器规则)。
  • 关于antlr - ANTLR中是否存在逻辑AND和NOT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5532576/

    相关文章:

    java - Antlr 处理异常

    java - 我如何引用在 ANTLR 中多次调用同一规则?

    error-handling - 什么是ANTLR3错误恢复方法?

    parsing - ANTLR 在词法分析/解析中包含元数据的最佳方式(自定义对象、注释类型)

    antlr - 权威的 ANTLR 引用 - 第一个程序不起作用

    java - ANTLR: "missing attribute access on rule scope"问题

    antlr - ANTLR 解析器/词法分析器中的可选前缀

    parsing - LL(1) : non-ambiguous grammars and First/Follow Conflicts

    Java泛型语法

    c# - 计算类计数的部分语法