1.概述
ANTLR有三个与词法符号有关非常棒的特性,值得付诸笔墨。首先,我们将会尝试处理XML .这样的具有不同词法结构的输入格式
(标签内外不同)。其次,我们将会学习通过修改输入的词法符号流,在Java类中插入一个字段的方法。它将会展示,如何以最低的代价来生成和输入内容相似的输出。最后,我们将会看到ANTLR语法分析器如何忽略空白字符和注释,同时不丢弃它们。
2.孤岛语法:处理相同文件中的不同格式
迄今为止,我们看到的样例输入文件都只包含一种语言,但是事实上,有很多常见的文件格式包含多重语言。
例如,Java文档注释中的@author标签等内容使用的是一种特殊的微型语言;在注释之外的-切内容都是Java代码。类似StringTemplatet4和Django!2l的模板引擎也存在相似的问题。它们必须将模板语言表达式之外的文本按照不同的方式进行处理。这种情况通常称为孤岛语法。
ANTLR提供了一个众所周知的词法分析器特性,称为词法分析模式(lexical mode)
,使我们能够方便地处理混杂着不同格式数据的文件。它的基本思想是,当词法分析器看到一-些特殊的“哨兵”字符序列时,执行不同模式的切换
。
XML是个很好的例子。一个XML解析器将除了标签和