自制编译器pdf完整版《编译原理课程设计报告(一个完整的编译器)》简介:爱读书的网友给大家分享以下关于《编译原理课程设计报告(一个完整的编译器)》的资料,希望对大家有所帮助对您有帮助帮助,感谢您对92to的支持! 6364每个产生式大括号中的内容是产生式的集合。 可以看出,同一个产生式的不相交集是一个LL(1)文法。 根据以上集合可以构建LL(1)分析表。 由于产生式数量较多,LL(1)分析器主要由两部分组成:LL(1)分析表和LL(1)控制程序: LL(1)分析表是存储语法的知识表收藏。 通过预设的语法栈顶符号和当前扫描的单词可以确定产生式的序号,从而进行下一步的判断或出栈操作。 后续的语法分析主要功能是根据上面写的分析表,获取需要分析的单词,然后以栈顶区域进入分析表,根据分析表将单词压入栈中和弹出栈中。 当分析完成时,语法被认为是没有错误的。 ,否则认为有错误。 当发现情况与分析表无法对应时,也认为发生了错误。 3.3.5 运行截图可以直观地看到LL(1)的分析过程。 可见,对于稍微简单的语法,LL(1)分析过程需要多个步骤才能完成判断。 至此,LL(1)分析方法的设计完成。 3.4 符号表生成模块(负责人:**齐) 3.4.1 功能 1. 建立活动记录表 2. 建立符号表 3. 建立函数表 4. 建立长度表 5. 添加活动记录 6. 添加变量表 7.符号表预处理 8. 添加函数表 9. 添加参数表 10. 构建活动记录和变量表(二合一) 符号表是目标代码生成中提供查询服务不可缺少的表,程序记录在其中收集并记录源程序所使用的语法符号的类型、特征等相关信息。 这些信息集中反映了标识符的语义特征。
在词法分析和语法分析过程中,表中的信息不断积累和更新,在从词法分析到代码生成的每个阶段,根据各自的需要从表中获取不同的属性信息。 在本次课程设计中,符号表的作用和地位是重要且关键的。 符号表是编译器的核心数据结构。 它代表了标识符的动态语义字典,属于编译期间进行语义分析的知识库。 符号表中注册的信息在编译的不同阶段使用。 对于多遍扫描编译器来说,不同遍中使用的符号表往往是不同的,因为每遍中关注的信息不同。 符号表的组织方式也决定了以后处理符号表内容的效率。 我设计的符号表生成器可以在定义标识符时将相应的语义信息填充到符号表中; 当语句中使用标识符时,可以通过查找相应的表项来判断该标识符是否存在并使用。 正确的。 符号表的常用功能包括定义和重定义检查、类型匹配检查、数据越界和溢出检查、值单元存储分配信息以及函数参数传递和验证。 由于时间有限,我设计的符号表系统只完成了上述部分功能。 3.4.2 数据结构 在编译器中,传统上使用三种构造方法来组织符号表项:线性组织、排列组织和二分法、散列组织。 线性表按照符号扫描的顺序依次填充,但查询效率较低; 排序表按照第一个字符的大小填充符号表,查询效率较高,但填充实现较复杂。
因此哈希表可以通过一定的哈希函数实现符号表的高效填充和查询。 至此,我们就可以写出符号表的整体数据结构了: [16][15]{};/*变量表*/{in,real,ch,b,};/*类型,包括int、float , char, {f,con,t,d,v,vn,vf,};/*类型,包括f函数、c常量、t域名、v变量、vn重命名参数、vf、赋值参数*/{, LENL ,VALL,};/*地址表,包括函数表、活动记录表[16];/*记录标识符在代码中第一次出现的位置*/{/*符号表*/{/*函数表* /[15];;;;;;编译原理编程报告一个简单语法编译器的设计与实现专业课:计算机3导师2016年12设计科组长学号及姓名:****分工:语法与数据结构设计 词法分析 语法分析(LL1) 基于 DAG 的中间代码优化 部分目标代码生成 团队成员 1 学号及姓名:**华** 分工:中间代码生成(LR0) 部分目标代码生成 团队成员 2 学号且名称:**奇20**3754 分工:符号表组织部分目标代码生成 概要 编译器是一种将易于人们编写、阅读和维护的高级计算机语言翻译成低级计算机语言的程序。计算机可以解释和运行的机器语言。 编译是从源代码(通常是高级语言)到可以直接由计算机或虚拟机执行的目标代码(通常是低级语言或机器语言)的翻译过程。 1(编译器概述