ANTLR4 '+' 操作

ANTLR4 '+' operation

我正在使用 ANTLR4 class 我现在正在学习,我似乎理解其中的大部分内容,但我无法弄清楚“+”的作用。我只能说它通常在括号中的一组字符之后。

加号是 ANTLR 中的 BNF 运算符之一,它允许确定表达式的基数。其中有 3 个:加号、星号(又名 kleene 运算符)和问号。意思通俗易懂:

  • 问号代表:零或一个
  • 加上代表:一个或多个
  • 星号代表:零个或多个

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

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

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

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