PushMode,Popmode,模式,打开和关闭的含义在Lexer语法中是什么



我正在研究Lexer和Parser语法,并使用ANTLR根据.G4文件创建解析器和Lexers。但是,我很困惑,因为PushMode和Popmode通常会做什么?

OPEN                : '[' -> pushMode(BBCODE) ;
TEXT                : ~('[')+ ;
mode BBCODE;
CLOSE               : ']' -> popMode ; 

在Lexer语法中,打开,PushMode,BBCode,Close和Popmode的意思是什么?我尝试搜索这些模式,但是对这些模式没有明确的定义和解释。

pushmode popmode 用于所谓的"岛语法"或词汇模式。这些允许在同一文件中处理不同格式。基本思想是在看到某些字符序列时将Lexer切换在模式之间。

在您的语法示例中,当Lexer遇到[时,它将从默认语法(即在任何mode <name>之外定义的语法)切换到在

之间定义的语法
mode BBCODE;

CLOSE               : ']' -> popMode ;

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

一个岛语法的一个示例将是Java代码中的Javadoc标签。

理论上,词汇模式也可用于在HTML内解析JavaScript。例如,主语法将定义HTML,但是当它遇到<script ...标签时,它将切换到使用-> pushMode(javascript)的JavaScript语法。当它遇到</script>标签时,popMode将返回"默认值"。html语法。

OPENCLOSE在您的示例中是'['']'的词汇规则,可以在解析器语法中使用以提高可读性。而不是编写']' -> popMode,您将编写CLOSE

如果您计划与Antlr4进行任何严重的信封,我强烈建议您阅读这本书:terence parr的确定性Antlr 4参考。

相关内容

  • 没有找到相关文章

最新更新