1、手机端页面文档仅支持阅读 15 页,超过 15 页的文档需使用电脑才能全文阅读。
2、下载的内容跟在线预览是一致的,下载后除PDF外均可任意编辑、修改。
3、所有文档均不包含其他附件,文中所提的附件、附录,在线看不到的下载也不会有。
语句处理首先用变量记下当前代码段分配位置,作为循环开始位置。
然后通过递归调用语句分析过程分析,直到遇到保留字,如果未对应则出错。
调用条件表达式处理过程生成相应代码把结果放在数据栈顶,再生成条件转移指令,转移位置为上面记录。
五相关代码及运行结果实验代码代码保留字个数标示符表长度容量标示符最大长度数字最大长度寻址空间最大允许块嵌套层数类目标代码数组长度可容纳代码行数行缓冲区长度类型标识了不同类型词汇类型用于标识符三种标识符类型类指令类型,包含三个字段指令层差和另个操作数词法分析器中用于临时存放正在分析词保留字表保留字表中每个保留字对应类型些符号对应类型表类指令助记符表声明开始表达式开始和项开始符号集合符号表构造函数,保存代码代码,词法分析,分析个词分程序分析处理功能保存代码对目标代码解释执行程序实验运行结果运行文件见下图右侧实验中我是固定了文件名,可以是改写成动态输入,由于在测试中我把所有测试语句都放在同个文件中了,没有太多必要。
六心得体会在编译程序实现过程中反复使用了递归调用思想,且也使用了模块化处理问题思想,使用模块化思想关键是在抽象阶段要抽象出对应模块,且模块层次必须是清晰。
在实现此程序中,由于要实现关键字和符号表中字段搜索,实现中就必须注意快速查找方法,而在实现过程中多次用到了二分搜索方法,这是个比较快搜索方法。
由于此程序实现相对比较复杂,且不方便调试,改进时可以把此程序词法分析,语法分析和执行原代码作为单独测试程序来测试,这样也方便大家来调试。
通过本次课设我知道了个算法设计是需要静下心来仔细研究,且实现中必须先了解程序整个流程,也就是说在编程中首先必须看懂那些对应图,只有在图指导下,编程中才不会盲目,也有定方向性。
同样在编程中必须注意代码规范,多写些对应注释是很必要,要时刻想这代码并不是给你自己看,而是必须要给别人看,因此我觉得代码规范是相当重要。
码段分配指针位置也是上面指令转移位置,也是通过前面记录下位置指令位置,把它跳转到当前代码段指针位置。
语句处理首先用变量记下当前代码段分配位置,作为循环开始位置。
然后通过递归调用语句分析过程分析,直到遇到保留字,如果未对应则出错。
调用条件表达式处理过程生成相应代码把结果放在数据栈顶,再生成条件转移指令,转移位置为上面记录。
五相关代码及运行结果实验代码代码保留字个数标示符表长度容量武汉纺织大学编译原理课程设计实验报告学院数学与计算机专业计算机姓名班级学号编译原理编译原理课设报告实验目加强对编译程序整体认识和了解,巩固编译原理课程所学知识。
通过本次课程设计掌握编译程序调试技巧和设计编译程序般原则,加深对词法分析语法分析语义分析等编译阶段及实用编译系统认识。
使学生能将编译理论与实际应用结合起来,提高学生软件开发能力。
二实验内容仔细阅读编译程序文本编译原理第二版张素琴吕映芝蒋维杜戴桂兰主编清华大学出版社,并上机调试通过。
对语言进行下列扩充扩充维整型数组。
扩充数组下界和上界可用常量标识名。
扩充条件语句功能使其为增加重复语句可根据自己具体情况从中选择个以上题目进行扩充。
三实验原理语言可以看成语言子集,它编译程序是个编译解释执行系统。
目标程序为假想栈式计算机汇编语言,与具体计算机无关。
编译程序和目标程序解释执行程序都是用语言书写,因此语言可在配备语言任何机器上实现。
其编译过程采用趟扫描方式,以语法分析程序为核心,词法分析和代码生成程序都作为个过程,当语法分析需要读单词时就调用词法分析程序,而当语法分析正确需要生成相应目标代码时,则调用代码生成程序。
用表格管理程序建立变量常量和过程表示符说明与引用之间信息联系。
当源程序编译正确时,编译程序自动调用解释执行程序,对目标代码进行解释执行,并按用户程序要求输入数据和输出运行结果。
四实验分析语言编译程序采用以语法分析为核心遍扫描编译方法。
词法分析和代码生成作为子程序供语法分析程序调用。
语法分析同时,提供了出错报告和出错恢复功能。
在源程序没有编译通过情况下,调用类解释程序解释执行生成类代码。
词法分析子程序分析词法分析子程序名为,功能是从源程序中读出个单词符号,把它信息放入全局变量和中,字符变量放入中,语法分析器需要单词时,直接从这三个变量中获得。
过程通过反复调用子过程从源程序过获取字符,并把它们拼成单词。
过程中使用了行缓冲区技术以提高程序运行效率。
词法分析器分析过程调用时,它通过过程从源程序中获得个字符。
如果这个字符是字母,则继续获取字符或数字,最终可以拼成个单词,查保留字表,如果查到为保留字,则把变量赋成相应保留字类型值如果没有查到,则这个单词应是个用户自定义标识符可能是变量名常量名或是过程名字,把置为,把这个单词存入变量。
查保留字表时使用了二分法查找以提高效率。
如果获得字符是数字,则继续用获取数字,并把它们拼成个整数或实数,然后把置为或,并把拼成数值放入变量。
如果识别出其它合法符号比如赋值号大于号小于等于号等,则把则成相应类型。
如果遇到不合法字符,把置成。
语法分析子程序分析语法分析子程序采用了自顶向下递归子程序法,语法分析同时也根据程序语义生成相应三元代码,并提供了出错处理机制。
语法分析主要由分程序分析过程参数变量分析过程参数变量处理过程数组处理过程常量定义分析过程变量定义分析过程语句分析过程表达式处理过程项处理过程因子处理过程和条件处理过程构成。
这些过程在结构上构成个嵌套层次结构。
除此之外,还有出错报告过程代码生成过程测试单词合法性及出错恢复过程登录名字表过程查询名字表函数以及列出类代码过程作过语法分析辅助过程。
由语法图可知个完整程序是由分程序和句号构成。
因此,本编译程序在运行时候,通过主程序中调用分程序处理过程来分析分程序部分分程序分析过程中还可能会递归调用过程,然后,判断最后读入符号是否为句号。
如果是句号且分程序分析中未出错,则是个合法程序,可以运行生成代码,否则就说明源程序是不合法,输出出错提示即可。
语句处理按语句语法,首先调用逻辑表达式处理过程处理语句条件,把相应真假值放到数据栈顶。
接下去记录下代码段分配位置即下面生成指令位置,然后生成条件转移指令遇或遇假转移,转移地址未知暂时填。
然后调用语句处理过程处理语句后面语句或语句块。
后语句处理完后,如果遇到,就调用语句处理过程处理语句后面语句或语句块,这时当前代码段分配指针位置就应该是上面指令转移位置。
通过前面记录下指令位置,把它跳转位置改成当前代码段指针位置,否则没遇到,那么此时当前代码段分配指针位置也是上面指令转移位置,也是通过前面记录下位置指令位置,把它跳转到当前代码段指针位置。
语句处理首先用变量记下当前代码段分配位置,作为循环开始位置。
然后通过递归调用语句分析过程分析,直到遇到保留字,如果未对应则出错。
调用条件表达式处理过程生成相应代码把结果放在数据栈顶,再生成条件转移指令,转移位置为上面记录。
五相关代码及运行结果实验代码代码保留字个数标示符表长度容量标示符最大长度数字最大长度寻址空间最大允许块嵌套层数类目标代码数组长度可容纳代码行数行缓冲区长度类型标识了不同类型词汇类型用于标识符三种标识符类型类指令类型,包含三个字段指令层差和另个操作数
