我现在正在使用ANTLR4上课,我似乎很了解它,但我无法弄清楚' +'确实。我只能说它通常在括号中的一组字符之后。
答案 0 :(得分:0)
加号是ANTLR中的一个BNF运算符,它允许确定表达式的基数。其中有3个:plus,star(aka。kleene operator)和问号。意思很容易理解:
这样的运算符适用于直接在它之前的表达式,例如ab+
(一个a
和一个或多个b
),[AB]?
(A
或B
中的零个或一个)或{{1 (a + (b | c | d)*
后跟a
,b
或c
的零或更多次出现。
ANTLR4还使用特殊构造来表示不合适的匹配。语法是BNF运算符之一加上问号(d
,+?
,*?
)。当您拥有:介绍者匹配,任何内容,然后匹配结束令牌时,这非常有用。以一个字符串为例(引用,任何字符,引用)。通过贪婪的匹配,ANTLR4会将多个字符串匹配为一个(直到最终引用)。然而,不匹配的匹配只匹配到第一个找到的结束标记(这里是引用字符)。
旁注:我不知道??
可能有用,因为它匹配单个条目,因此贪婪在这里不起作用。
实际上,这些运营商不是传统BNF的一部分,而是扩展的Backus-Naur形式。这些是在EBNF中记录某些语法比在老学校BNF中更容易(甚至可能)的原因之一,而BNF缺少许多这些算子。