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

Parsing 在词法语法中,pushMode、popMode、mode、OPEN和CLOSE是什么意思?,parsing,antlr,antlr4,lexer,Parsing,Antlr,Antlr4,Lexer,我正在研究lexer和parser语法,并使用ANTLR基于.g4文件创建解析器和lexer。然而,我很困惑,pushMode和popMode通常做什么 OPEN : '[' -> pushMode(BBCODE) ; TEXT : ~('[')+ ; mode BBCODE; CLOSE : ']' -> popMode ; OPEN、pushMode、BBCODE、CLOSE和popM

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

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

mode BBCODE;

CLOSE               : ']' -> popMode ; 
OPEN、pushMode、BBCODE、CLOSE和popMode在lexer语法中是什么意思?我尝试搜索这些模式,但没有明确的定义和解释。

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

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

mode BBCODE;

当遇到]时,它将切换回默认语法

孤岛语法的一个例子是Java代码中的Javadoc标记

理论上,词汇模式也可以用来解析HTML中的JavaScript。例如,主语法将定义HTML,但当它遇到pushModejavascript时。当它遇到标记时,它将返回默认的HTML语法

在您的示例中,OPEN和CLOSE是“[”和“]”的词汇规则,可以在解析器语法中使用它们来提高可读性。而不是写“]->popMode,而是写CLOSE

如果您计划使用ANTLR4进行任何严肃的封装,我强烈建议您阅读这本书:。

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

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

mode BBCODE;

当遇到]时,它将切换回默认语法

孤岛语法的一个例子是Java代码中的Javadoc标记

理论上,词汇模式也可以用来解析HTML中的JavaScript。例如,主语法将定义HTML,但当它遇到pushModejavascript时。当它遇到标记时,它将返回默认的HTML语法

在您的示例中,OPEN和CLOSE是“[”和“]”的词汇规则,可以在解析器语法中使用它们来提高可读性。而不是写“]->popMode,而是写CLOSE


如果您打算用ANTLR4进行任何严肃的封装,我强烈建议您阅读这本书:。

我阅读了这个链接,但解释还不够。@coderX:然后问一个在阅读该文档时出现的特定问题。您可以下载这本书的源代码并检查代码->教程->XMLLexer.g4。我阅读了这个链接,但是解释还不够。@coderX:然后问一个在阅读该文档时出现的特定问题。您可以下载本书的源代码,然后查看代码->教程->XMLLexer.g4。