本科毕业论文题目一个类C解析器的设计与实现

上传人:笛音 文档编号:39762591 上传时间:2018-05-19 格式:DOC 页数:5 大小:40.50KB
返回 下载 相关 举报
本科毕业论文题目一个类C解析器的设计与实现_第1页
第1页 / 共5页
本科毕业论文题目一个类C解析器的设计与实现_第2页
第2页 / 共5页
本科毕业论文题目一个类C解析器的设计与实现_第3页
第3页 / 共5页
本科毕业论文题目一个类C解析器的设计与实现_第4页
第4页 / 共5页
本科毕业论文题目一个类C解析器的设计与实现_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《本科毕业论文题目一个类C解析器的设计与实现》由会员分享,可在线阅读,更多相关《本科毕业论文题目一个类C解析器的设计与实现(5页珍藏版)》请在金锄头文库上搜索。

1、普通本科毕业论文题目普通本科毕业论文题目:一个类一个类 C 解析器的设计与实现解析器的设计与实现 摘要编译程序是现代计算机系统的基本组成部分,从功能上看,一个编译程序是一个语言翻译 程序,它把一种语言称作源语言书写的程序翻译成另一种语言称作目标语言书写的等价的程 序. 本系统的目标是应用在大学阶段学习的理论知识,进行一个简单的类 C 解析器的设计与实现 并尽可能地做一定的改进.本文介绍了语法分析器、中间语言、语义翻译器三部分的实现过 程,其中语法分析器中的仿 YACC 程序并没有直接生成分析程序,而是生成 LALR 分析表,这 样做的好处是任何语言都可以用这张分析表,为了提高仿 YACC 程序

2、的速度,采用了造核算 法和 SPONSOR 算法.在语义翻译器中解决了在 C 语言编译器中全局变量名不能与自定义函 数名重名和指针变量指向多维数组不能正常访问的问题. 【关键词】 C 语言表达式;LALR 分析表;解释器 The Design and implementation of similar C language Ou yang tian Abstract: Compiling program is one basic part of the modern computer system. From the functional perspective, a compiling pr

3、ogram is a language translation program which can translate a program written by a language called source language into another equivalent program written by a language called objective language. The objective of this system is the design and implementation of a simple expression compiler of the C l

4、anguage and does some improvements of functions as far as possible by using theory knowledge learned during the college. This paper mainly introduces the implemental process of grammar analyzer, intermediate language and semantic translator, and the YACC program of the grammar analyzer does not gene

5、rate the analytical program directly but LALR analytical table. In this way, every language can use this table. In order to enhance the speed of the YACC, we use the accounting method and algorithm SPONSOR. In the part of semantic translator, we have resolved the problem that the name of global vari

6、ables and user defining variables cant be the same and pointer variables which point to multi-dimensional array do not access normally in the compiler of the C language. Keywords: C language expression; LALR analysis table; Interpreter 目录 1 引言 1 1.1 开发模型 1 1.2 实现方案 2 2 语法分析器 3 2.1 LALR 表生成工具 4 2.1.1

7、 C 语言文法 5 2.1.2 仿 YACC 程序 8 2.2 语法分析 13 3 中间语言 16 4 语义翻译器 17 4.1 数据结构 18 4.1.1 符号表 18 4.1.2 系统栈 18 4.2 表达式翻译 184.2.1 隐式类型转换 19 4.2.2 强制类型转换 20 4.3 控制结构、函数与指针的实现 21 4.3.1 循环语句与判断语句翻译 21 4.3.2 自定义函数翻译 21 4.3.3 系统函数的封装 22 4.3.4 指针实现 22 5 总结 23 参考文献 24 致谢 25 引言 计算机软件发展到今天已经出现了各种各样的编程语言,像比较流行的 C+、JAVA 等高

8、级 语言.它们的语法接近自然语言,因此具有很好的可读性,编写起来也符合人的思维,然而我们 知道计算机只能执行机器指令程序,那它又是怎么执行像自然语言一样的程序呢?当然这些 高级语言都是经过编译器的编译之后,才能被计算机执行. 在 20 世纪 50 年代,编译器的编写一直被认为是十分困难的事情.在人们尝试编写编译器的同 时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更 大.就像数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不 少著名的理论. 直到今天,编译技术已经有了较前沿的并且较成熟的理论技术支持.通过学习其相关知识,可 以理解一段高

9、级语言程序是经过怎么的一个过程转换成计算机可执行的程序,显然这里涉及 到一个语言的等价转换过程,可以理解为将一种语言转换成另一种语言.而本设计是运用编译 理论构建的一个类 C 语言解析器. 通过实现这个解释器,可以帮助自己更加深层次的理解程序语言和内部机制,并且提高了自己 的编程能力. 开发模型 本系统采用编译原理开发技术中的流程,主要包括词法分析器、语法分析器、语义翻译器三 大部分. 流程如图 1-1 所示: 操作系统文件系统:储存源文件,以文件字符流的形式提供给词法分析器. 词法分析器:从文件流中读出源文件并将其识别出一个个的单词符号. 语法分析器:接受词法分析器识别出的单词符号并组成相应

10、的语法句子,并判断是否是属于该 文法.如果属于该文法则加入已构建的语法树中,否则输入错误并中止分析. 语义翻译器:从语法分析器已构建的语法树的根结点使用树的遍历法进行翻译. 实现方案 本系统可采用多种编程语言,如 C、C+、JAVA、C#等. 经小组讨论后,决定使用 JAVA 技术进行开发.JAVA 是一种纯面向对象的编程语言,并且拥 有丰富的 API、跨系统平台以及反射类等良好特性,而且拥有 eclipse 这个非常好的开发环境 1.运用它可以降低开发难度,加快开发速度. 词法分析器实现:根据 C 语言的关键字、变量、常量及符号的特点,绘制相应的状态转换图, 根据该状态图进行手工编写代码.

11、语法分析器实现:语法分析设计与开发是比较难的部分,考虑其扩展性和维护性,决定采用较 强的 LALR 分析法,为此我们开发了一个简单的 LALR 分析表生成工具2,4.通过该生成工 具可将一个文法转换成一张 LALR 表和几个相应 的辅助文件.语法分析器参照这些表和辅助文件可进行语法分析,并生成一棵语法树.分析过程如图 1-2 所示: 语义翻译器的实现:从语法树的根结点开始执行翻译部分,并对相对应的符号表进行处理,执 行树的每个结点时调用相对应处理函数.如图 1-3 所示: 开发工具 jdk1.5+eclipse 3.2. 语法分析器 语法分析器是接受词法分析器识别出的单词,然后对应的 LALR

12、 分析表相应的内容进行分析 处理. LALR 表生成工具 本系统语法分析采用的是 LALR(1)分析法,在分析时需要 LALR 表,而 C 语言语法是以一个 文法文件表示的,所以模仿 YACC 并改进设计了一个将文法文件转成 LALR 分析表的程序4.首先,文法文件的格式如下所述: 文法文件的各个部分用%进行分隔.其中,第一部分和第二部分是分析运行必不可少的,而对 于第三部分并没有做严格要求,文法文件结构如图 2-1 所示: 终结符部分 通常,在编码规范中终结符用大写字母,非终结符为小写字母. %token 用于定义终结符,其后紧跟一个或多个终结符名,直到换行默认结束. 具体格式如下: %to

13、ken 终结符,终结符,终结符 . %token 终结符,终结符,终结符 . %start 用于定义开始符,其后紧跟一个有且只有一个非终结符. 具体格式如下: %start 非终结符 文法部分 具体格式如下: 非终结符:终结符或非终结符 终结符或非终结符 . ; 除了在终结符部分定义的终结符名字之外,其余在文法中出现的单词均为非终结符.用 引用 的字符也为终结符. 在 里的语句是当前文法的语义动作,用 JAVA 语句进行编写.该部分语句会被自动添加到 之后生成语义结点函数中去,其中“$+数字“是表示第几个结点的语义值. 辅助函数部分 此部分是自定义的 JAVA 函数,函数可被语义动作中的语句调

14、用,这部分是可选的. C 语言文法 下面将说明一下我们采用 C 语言的标准文法中的部分内容.我们没有使用全部的 C 语言文 法,原因是我们设计系统的目的是为了巩固和提高在大学阶段所学到的知识,以达到理论和实 践相结合以及掌握解释器或编译器的工作原理,因此我们只实现其中的几个重要部分. 文法中的终结符: IDENTIFIER 标识符 CONSTANT 常量 STRING_LITERAL 字符串常量 INC_OP +运算符 DEC_OP -运算符 LE_OP =运算符 GE_OP =运算符 EQ_OP =运算符 NE_OP !=运算符 AND_OP 运算符 OR_OP |运算符 MUL_ASSIG

15、N *=运算符 DIV_ASSIGN /=运算符 MOD_ASSIGN %=运算符ADD_ASSIGN +=运算符 SUB_ASSIGN -=运算符 CHAR char 类型 SHORT short 类型 INT int 类型 LONG long 类型 SIGNED signed 类型 UNSIGNED unsigned FLOAT float 类型 DOUBLE double 类型 VOID void 类型 IF if 关键字 ELSE else 关键字 WHILE 关键字 DO do 关键字 FOR for 关键字 CONTINUE continue 关键字 BREAK break RET

16、URN return 关键字 文法主体中的元素分为两种,如下: 终结符:上图所定义的以及在 中引用的字符,主要根据 C 语言语法特点来设计定义的. 非终结符:通过终结符归约而来,然后又可对终结符或非终结符进行归约. 下面列举一下我们用到的产生式: 最基本的表达式,如括号表达式等等 primary_expression : IDENTIFIER | CONSTANT | STRING_LITERAL | ( expression ) postfix_expression : primary_expression | postfix_expression expression | postfix_expression | postfix_expression ( argument_expression_list ) | postfix_expression INC_OP | postfix_expression DEC_OP 参数列表 argument_expressi

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 其它文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号