ANTLR4' +'手术

时间:2017-04-24 06:11:57

标签: parsing antlr antlr4 lexer

我现在正在使用ANTLR4上课,我似乎很了解它,但我无法弄清楚' +'确实。我只能说它通常在括号中的一组字符之后。

1 个答案:

答案 0 :(得分:0)

加号是ANTLR中的一个BNF运算符,它允许确定表达式的基数。其中有3个:plus,star(aka。kleene operator)和问号。意思很容易理解:

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

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

ANTLR4还使用特殊构造来表示不合适的匹配。语法是BNF运算符之一加上问号(d+?*?)。当您拥有:介绍者匹配,任何内容,然后匹配结束令牌时,这非常有用。以一个字符串为例(引用,任何字符,引用)。通过贪婪的匹配,ANTLR4会将多个字符串匹配为一个(直到最终引用)。然而,不匹配的匹配只匹配到第一个找到的结束标记(这里是引用字符)。

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

实际上,这些运营商不是传统BNF的一部分,而是扩展的Backus-Naur形式。这些是在EBNF中记录某些语法比在老学校BNF中更容易(甚至可能)的原因之一,而BNF缺少许多这些算子。