当前位置: 首页 > 知识库问答 >
问题:

pushMode、popMode、mode、OPEN和CLOSE在lexer语法中是什么意思?

文嘉禧
2023-03-14

我正在研究lexer和解析器语法,并使用ANTLR创建基于.g4文件的解析器和lexer。然而,我很困惑的是pushMode和popMode通常是做什么的?

OPEN                : '[' -> pushMode(BBCODE) ;
TEXT                : ~('[')+ ;

mode BBCODE;

CLOSE               : ']' -> popMode ; 

共有1个答案

李永寿
2023-03-14

pushMode和popMode用于所谓的“孤岛语法”或词汇模式。这些允许在同一文件中处理不同的格式。其基本思想是让lexer在看到某些字符序列时在模式之间切换。

在语法示例中,当lexer遇到[时,它将从默认语法(即在任何模式 之外定义的语法)切换到在

mode BBCODE;

而且

CLOSE               : ']' -> popMode ;

示例中的openclose'['']'的词法规则,可用于分析器语法以提高可读性。您可以编写close而不是编写']'->popmode

如果你计划用ANTLR4做任何认真的封套,我强烈建议你阅读这本书:Terence Parr的ANTLR4参考文献。

 类似资料:
  • 问题内容: 我使用PHP已有很长时间了,但是我看到的类似, 确切地说,我在PHP Mongo页面中看到了这一点: 那么,该怎么办?这是相当难与谷歌或像字符PHP文件中进行搜索,和。 问题答案: (美元大括号)被称为 复杂(卷曲)语法 : 之所以称其为“复杂”,是因为语法复杂,而是因为它允许使用复杂的表达式。 可以通过此语法包括具有字符串表示形式的任何标量变量,数组元素或对象属性。只需以与出现在字符

  • 我在这个Config::INI Perl中找到了一个tilde 我正在处理的文本中没有波浪号。我知道很重要,因为省略、和中的任何或所有内容都会使语法与我的文本不再匹配。 因为我知道我匹配的模式是什么,所以我改变了它,使方括号位于文本表达式周围,因此: 所以在我看来,实际上是说在这里匹配一个方括号,然后期待最后一个括号。 无论如何,我知道在正常的Perl中 不管怎样,我在留档中搜索了语法和正则表达式

  • 问题内容: 我遇到了以下我不认识的Java语法。 这部分很好: 但是,我没有得到: 这是什么? 问题答案: 这提供了该类的内联(匿名)子类。 从功能上讲,它与: 和 但是由于该类定义不在方法主体之外使用,因此可以将其定义为匿名。

  • 在以下代码示例中,来自颤振文档:

  • 问题内容: 我已经和Lombok一起使用并积极使用了2个月。使用Java时,我会更加熟悉。但是,我第一次遇到了该语言的以下语法结构: 这是什么意思,如何编译? 问题答案: 这是一种实验性的Lombok语法,其创建目的是在引用多个注释时支持间接层,而不是使用。 语法有点奇怪;要使用这3种功能中的任何一种,您必须在中包装要应用于构造函数/方法/参数的注释。要应用多个注释,请使用。注释本身显然也可以具有

  • 问题内容: 我正在寻找有关Google Go语言的信息。在“ A Go of Go”中,他们具有以下代码: 但是什么和 意味着什么呢? 您可以在http://tour.golang.org/#14上查看所有代码 问题答案: 它们是按位移位运算符。表示 x ×2 y ,而表示 x ×2 -y 或等效地x÷2 y。这些运算符通常用于操作值的二进制表示形式,就像十进制的10的幂一样,乘或除以2的幂分别具