我无法触发ANTLR规则

问题描述 投票:0回答:1

我正在尝试构建一个PCRE引擎,并且我正在使用这个ANTLR语法。以下是它的一些规则:

octal_char
 : ( Backslash (D0 | D1 | D2 | D3) octal_digit octal_digit
   | Backslash octal_digit octal_digit
   )

 ;

octal_digit
 : D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7
 ;

digit
 : D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 | D8 | D9 // just '0','1','2','3',...,'9'
 ;

当我尝试使用像

octal_char
这样的字符串触发
\075
规则时,它根本不起作用,我不明白为什么。

字符串的解析树示例

\075
:

parse
  alternation
    expr
      element
        atom
          shared_atom \0
      element
        atom
          literal
            shared_literal
              digit 7
      element
        atom
          literal
            shared_literal
              digit 5
  <EOF>
regex parsing antlr antlr4 pcre
1个回答
0
投票

shared_atom
规则位于
literal
规则中的
atom
规则之前。

对语言的意图一无所知,我无法判断这是否是一个错误,但这就是捕获

\0
的原因。

根据预期的语义,您可能需要重新排序这些规则引用、修改前瞻和/或使用语法谓词来解决此问题。

交换两个规则引用的顺序将使八进制匹配,但可能会导致

shared_atom
应该匹配的其他内容被
literal
捕获并可能失败。

© www.soinside.com 2019 - 2024. All rights reserved.