编译过程介绍

2020-03-27  本文已影响0人  云中翻月

编译过程介绍

1 问题简述

程序需要读入用户的脚本,然后判断是否符合预定义的语法规则。若存在则将第一条出错反馈给用户,否则,程序将对用户的脚本代码进行转化,生成可进一步处理的中间代码。

2 具体过程

2.1 第一步

载入预定义颜色映射表,关键字表。
初始化字典树。

2.2 第二步

检查各类可能错误。

2.2.1 具体步骤一

检查用户输入脚本代码的括号匹配,若存在问题,则进行反馈并中止编译。

2.2.2 具体步骤二

分解用户输入的脚本代码,将其分解为关键词形式。若存在未知关键词或者关键词冲突,则进行反馈并中止编译。

2.2.3 具体步骤三

检查变量声明问题,若存在变量未定义或重复定义,则进行反馈并中止编译。

2.2.4 具体步骤四

检查函数调用问题,若存在不合法调用、函数参数缺省或赘余,则进行反馈并中止编译。

2.3 第三步

通过上述编译过程后,程序完全分解用户代码。根据预定义的语法规则,输出对应符号相关信息(如变量内容,函数参数等)。

2.4 第四步

对函数的参数中的表达式一项进行化简处理,按照运算符优先级进行模拟展开,并建立表达式树,依次划分运算顺序,分离运算过程。

3 总结

3.1 时空复杂度分析

所有涉及操作的空间复杂度均低于OceanView中其他过程的空间复杂度,因此这里并不会产生空间使用超限的问题。

所有涉及操作的时间复杂度与读入脚本的长度几乎为线性相关,相比较于OceanView中其他过程的时间复杂度,编译用户脚本的占用时间可以忽略不计。

3.2 优势

程序较为完美的根据预定义的语法规则,完成了代码的转化。(目前尚未测试出bug)
最终生成的代码,依据表达式树的形式给出,便于OceanView做进一步处理。
程序代码经过多次重构,封装良好,最终只提供给用户唯一调用接口,方便迁移和复用。

3.3 劣势

由于预定义的语法规则比起一门正规语言要简便,最终生成的目标代码也可以理解为高级语言的形式。因此程序省略了传统编译器中的部分过程,并不能算作一个完整的编译器。

上一篇下一篇

猜你喜欢

热点阅读