我正在为我现在正在学习的一个类使用ANTLR4,我似乎理解其中的大部分内容,但我不知道'+‘是干什么的。我所能知道的是,它通常是在括号中的一组字符后面。
发布于 2017-04-24 06:44:12
加号是ANTLR中允许确定表达式基数的BNF运算符之一。他们有三个:加,明星(又名)。( kleene算子)和问号。这个意思很容易理解:
这样的运算符适用于直接继承它的表达式,例如ab+ (一个a和一个或多个b)、[AB]? ( A或B中的一个)或a (b | c | d)* (a后面接零或多个b、c或d)。
ANTLR4还使用一个特殊的结构来表示非贪婪的匹配。语法是BNF运算符之一,加上问号(+?、*?、??)。这是有用的,当你有:介绍者匹配,任何内容,然后匹配一个结束令牌。例如,一个字符串(引号、任何字符、引号)。对于贪婪的匹配,ANTLR4将多个字符串匹配为一个字符串(直到最后的引号)。然而,不贪婪的匹配只匹配到第一个找到的结束令牌(这里是引号)。
附带注意:我不知道??可能有什么用处,因为它匹配一个条目,因此贪婪在这里不起作用。
实际上,这些运算符不是传统BNF的一部分,而是扩展Backus形式的一部分。这就是为什么在EBNF中记录某些语法比在缺乏这些操作的老式BNF中更容易(甚至可能)。
https://stackoverflow.com/questions/43580908
复制相似问题