美文网首页
编译过程介绍

编译过程介绍

作者: 云中翻月 | 来源:发表于2020-03-27 23:12 被阅读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 劣势

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

    相关文章

      网友评论

          本文标题:编译过程介绍

          本文链接:https://www.haomeiwen.com/subject/tlxduhtx.html