语法分离-构建可进化的语言解析项目

原创
2017/02/11 23:47
阅读数 110

能接受某种语言作为扩展的项目,通常都会内置一个代码解析器。

代码解析器比较复杂,通常是把语法解析和语法树解析放在一起:边解析代码,边构建数据结构。

如果把语法作为一种配置文件分离出来,那么就可以设计通用的语法解析算法,让语言解析的复杂度降低。

新的架构需要新的抽象:语法抽象。

语法组合方式通常分为:顺序结构,分支结构,嵌套结构。而基本语法包括:字符串,字符类,可有可无,重复和没有。

顺序结构: a b c 分支结构: [a b c] 嵌套结构: [a [a b] ] 字符串是连续的字符:abc 字符类是某类字符的集合:[:alpha] 可有可无: a? 重复: a+ 没有: !a 能扩展的应用程序大部分都接受某种形式的语法文本作为配置文件,从而构建定制较为复杂的同类产品。

随着用户需求的变化,这种形式化的语言也变得复杂。大部分产品中解析这种形式语言的代码是一个整体,并没有将语言分离出来,而是将语言规则和生成可处理的数据结构合成一体。

这通常很快,而且也不太复杂。但随着语法需求的变化,这段代码成为最为频繁的改动部分,而且越来越复杂。

这种情况导致语言解析类产品的升级非常缓慢,因为牵一发而动全身,某个部分的修改可能导致相关的许多代码发生变化。

但这部分代码复杂到一定程度,即使最聪明的人也会感到沮丧。也许新的语言类产品诞生,也许这个产品成为历史。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部