pushMode、popMode、mode、OPEN 和 CLOSE 在词法分析器语法中是什么意思?
What does pushMode, popMode, mode, OPEN and CLOSE mean in the lexer grammar?
我正在研究词法分析器和解析器语法,并使用 ANTLR 创建基于 .g4 文件的解析器和词法分析器。但是,我很困惑 pushMode 和 popMode 通常做什么?
OPEN : '[' -> pushMode(BBCODE) ;
TEXT : ~('[')+ ;
mode BBCODE;
CLOSE : ']' -> popMode ;
OPEN、pushMode、BBCODE、CLOSE 和 popMode 在词法分析器语法中的含义是什么?我尝试搜索这些模式,但没有明确的定义和解释。
pushMode 和 popMode 用于所谓的“岛屿语法”或词法模式。这些允许处理同一文件中的不同格式。基本思想是让词法分析器在看到某些字符序列时在模式之间切换。
在您的语法示例中,当词法分析器遇到 [
时,它将从默认语法(即在任何 mode <name>
之外定义的语法)切换到
之间定义的语法
mode BBCODE;
和
CLOSE : ']' -> popMode ;
遇到]
会切换回默认语法
孤岛语法的一个例子是Java代码中的Javadoc标签。
理论上,词法模式也可用于解析 JavaHTML 中的脚本。例如,主语法会定义 HTML,但是当它遇到 <script ...
标记时,它会切换到 Java 带有 -> pushMode(javascript)
的脚本语法。当它遇到 </script>
标签时,它会 popMode
到 return 回到“默认” HTML 语法。
您示例中的 OPEN
和 CLOSE
是 '['
和 ']'
的词法规则,可用于解析器语法以提高可读性。你应该写 CLOSE
.
而不是写 ']' -> popMode
如果你打算认真学习 ANTLR4,我强烈推荐阅读这本书:The Definitive ANTLR 4 Reference by Terence Parr。
我正在研究词法分析器和解析器语法,并使用 ANTLR 创建基于 .g4 文件的解析器和词法分析器。但是,我很困惑 pushMode 和 popMode 通常做什么?
OPEN : '[' -> pushMode(BBCODE) ;
TEXT : ~('[')+ ;
mode BBCODE;
CLOSE : ']' -> popMode ;
OPEN、pushMode、BBCODE、CLOSE 和 popMode 在词法分析器语法中的含义是什么?我尝试搜索这些模式,但没有明确的定义和解释。
pushMode 和 popMode 用于所谓的“岛屿语法”或词法模式。这些允许处理同一文件中的不同格式。基本思想是让词法分析器在看到某些字符序列时在模式之间切换。
在您的语法示例中,当词法分析器遇到 [
时,它将从默认语法(即在任何 mode <name>
之外定义的语法)切换到
mode BBCODE;
和
CLOSE : ']' -> popMode ;
遇到]
会切换回默认语法
孤岛语法的一个例子是Java代码中的Javadoc标签。
理论上,词法模式也可用于解析 JavaHTML 中的脚本。例如,主语法会定义 HTML,但是当它遇到 <script ...
标记时,它会切换到 Java 带有 -> pushMode(javascript)
的脚本语法。当它遇到 </script>
标签时,它会 popMode
到 return 回到“默认” HTML 语法。
OPEN
和 CLOSE
是 '['
和 ']'
的词法规则,可用于解析器语法以提高可读性。你应该写 CLOSE
.
']' -> popMode
如果你打算认真学习 ANTLR4,我强烈推荐阅读这本书:The Definitive ANTLR 4 Reference by Terence Parr。