ANTLR4“+”操作

Ale*_*775 1 parsing antlr lexer antlr4

我正在使用 ANTLR4 来上课,我似乎理解其中的大部分内容,但我不明白“+”的作用。我只能说它通常位于括号中的一组字符之后。

Mik*_*hke 10

加号是 ANTLR 中的 BNF 运算符之一,可用于确定表达式的基数。其中有 3 个:加号、星号(又名 kleene 运算符)和问号。其含义很容易理解:

  • 问号代表:零或一
  • Plus代表:一个或多个
  • 代表:零个或多个

这样的运算符适用于直接在其前面的表达式,例如ab+(onea和一个或多个b)、[AB]?( 或 的零个或一个A)Ba (b | c | d)*(a后跟零个或多个出现的b,cd)。

ANTLR4 还使用特殊的构造来表示非贪婪匹配。语法是 BNF 运算符之一加上问号 ( +?, *?, ??)。当您有以下情况时,这非常有用:介绍人匹配、任何内容,然后匹配结束标记。以字符串(引号、任何字符、引号)为例。通过贪婪匹配,ANTLR4 会将多个字符串作为一个匹配(直到最后的引用)。然而,非贪婪匹配仅匹配到第一个找到的结束标记(此处为引号字符)。

旁注:我不知道??有什么用,因为它匹配单个条目,因此贪婪在这里不起作用。

实际上,这些算子并不是传统 BNF 的一部分,而是扩展巴科斯-诺尔范式的一部分。这是用 EBNF 比在老式 BNF 中更容易(甚至可能)记录某些语法的原因之一,因为老式 BNF 缺乏许多此类运算符。