1.概述
上一篇文章:【Antlr】使用语义谓词改变语法分析
目前我们看到的输入文件都只包含一种语言,但在实际应用中我们会遇到有些包含多种语言的常用文件格式。例如,Java的文档注释,XML文件等。这些环绕着模板表达式的文本需要不同的处理方式,它们被称为孤岛语言。
ANTLR有提供一个称之为“词法模型”的词法分析器特性,它让我们可以很容易地处理包含混合格式的文件。基本思路是:当词法分析器看到特殊的哨兵字符序列时,让它在模式之间来回切换。
XML是一个很好例子,它通常会在同一个文件中包含不同的词法结构。一个XML语法分析器会把除标签和实体引用(例如♥)之外的任何东西当作文本块。当词法分析器看到<
时,它切换到“inside”模式;当它看到>或/>时
,就切换回默认模式。以下语法展示了该特性是如何工作的:
lexer grammar