19、解析XML:从分离岛屿到构建完整解析器

解析XML:从分离岛屿到构建完整解析器

1. 流中的岛屿语言

在处理文件时,我们常见的文件格式大多只包含单一语言,如DOT、CSV、Python和Java文件等。但还有一些文件格式,其中结构化区域(岛屿)被随机文本(海洋)包围,我们将这类格式称为岛屿语言,并用岛屿语法来描述。例如模板引擎语言(如StringTemplate)、LaTeX文档准备语言,而XML是典型的岛屿语言,其文件包含结构化标签和实体,周围是大量我们不关心的内容。

分类是否为岛屿语言往往取决于我们的视角。例如,构建C预处理器时,预处理器命令构成岛屿语言,C代码是海洋;而构建适用于IDE的C解析器时,解析器需忽略大量预处理器命令。

我们的目标是学会忽略海洋部分,对岛屿部分进行分词,以便解析器验证这些岛屿内的语法,这是构建真正XML解析器的关键。

1.1 从文本海洋中分离XML岛屿

要将XML标签与文本分离,我们可能首先想到构建一个输入字符流过滤器,去除标签间的所有内容。但这样会丢弃所有文本数据,并非我们想要的结果。例如,输入 <name>John</name> ,我们不希望丢弃 John

因此,我们构建一个简单的XML语法,将标签内的文本作为一个标记,标签外的文本作为另一个标记。这里我们关注词法分析器,使用单个语法规则匹配一系列标签、实体、CDATA部分和文本(海洋)。

grammar Tags;
file : (TAG|ENTITY|TEXT|CDATA)* ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值