万物皆有模式,程序也是如此。
一个程序如何从代码编写完成一直到执行完成,可以归结为一系列的组件,而每一种组件则可以基于不同的业务使用不同的行为方法,我们称之为模式。
从下图看到语言执行的整个过程:
下面简要介绍下每个部分的作用:
翻译器:翻译器读入字符文本(代码)生成不同语言的输出,其实就是我们耳熟能详的编译器或者汇编器,是将代码转化其他语言的一种程序,如C++编译器就是一种翻译器,其将C++转化成机器语言,并直接执行机器码;
解释器:通过读入文件、解码然后执行指令,跳过了产生输出这一环,如Java,直接将代码转化成指令在java虚拟机上执行,不产生作为中间介质的机器码;
文件读取器:通过读入输入流,并对源代码建立数据结构。一般输入流是字符文本或者二进制是数据。通常可以作为源代码分析工具,特定格式配置文件读取器,方法调用分析等;
语义分析器:用于高级语言的类型推导,语法制导翻译等,语义分析器不分析“这样做格式对不对”,而是分析这样做合不合逻辑;
当然,每一类组件的设计,都可以用一类模式作为归属,在后续的文章中会分别介绍下列各个模式。作为总论,下面依次列出于设计不同组件的一系列模式:
文件读取器:
1. 递归下降识别器 2. LL(1)递归下降词法分析器 3. LL(1)递归下降语法分析器 4.LL(K)递归下降语法分析器 5.回溯解析器 6.记忆解析器 7.谓词解析器
语义解析器:
a.解析数据结构:8.解析树模式 9.同型解析树 10.规范化异型解析树 11.不规则异型解析树
b.遍历数据结构:12.内嵌式遍历器 13.外部访问者模式 14.树文法模式 15.模式匹配器
c.搜集数据信息:16.单作用域符号表 17.嵌套作用域符号表 18.数据聚集符号表 19.类符号表
d.静态类型检查:20.计算表达式类型 21.自动类型提升模式 22.检查类型安全 23.多态类型检查
解释器模式:
24.语法制导解释器模式 25.基于树解释器模式 26.字节码汇编器 27.栈解释器 28.寄存器解释器
翻译器模式:
29.语法制导翻译器模式 30.基于规则的翻译器 31.领域驱动的翻译器
后续会分多篇介绍相关模式。