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