首页 文章

ANTLR4 '+'操作

提问于
浏览
0

我正在使用ANTLR4参加我现在正在学习的课程,我似乎很了解它,但我无法弄清楚它的作用 . 我只能说它通常在括号中的一组字符之后 .

1 回答

  • 0

    加号是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]? (零或一个 AB )或 a + (b | c | d)*a 后跟零或多个出现的 bcd ) .

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

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

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

相关问题