Mini-C编译器的设计与实现
2023-12-26 17:05:41
论文总字数:28140字
摘 要
编译程序是现代计算机系统的重要组成部门,其功能是将高级程序设计语言编写的程序翻译成机器能理解的低级语言程序,因此它是人机对话的一座桥梁。编译器的设计涉及到计算机学科的方方面面,原理、实践性都很强。本项目以微软的C#.NET为开发环境,主要完成对C语言的一个自定义子集的编译器的设计和实现,主要实现的功能是设计文法、词法分析、语法分析、语义分析和中间代码的生成,其中文法是对高级语言的规则的描述,它定义了语言的字母集合、单词构成以及语句的构成。关键字:编译器程序,文法,词法分析,语法分析,语义分析
Abstract:Compiler is an important compnent of the morden computer system, its function is to translate a program written in a high-level programming language into machine can understand a program or a low-level program, so it is a bridge of man-machine dialogue. The computer design involves all aspects of computer science, the principle, practicality is all very important . This project by microsoft C#.NET as a development environment,mainly for a custom subset of the C language compiler design and implementation, its importmant function is the design of the grammar, lexical analysis, syntactic analysis, semantic analysis, and the intermediate code generation, the grammar is a description of the rules of the high-level language, it defines language collection of the letters, words and sentences.
Keywords: compiler, grammar,lexical analysis, syntactic analysis, semantic analysis
目 录
1 绪论 4
1.1 编译器背景 4
1.2 关于程序设计语言 5
1.3 语法(文法)的描述 6
1.4 本文工作内容 7
1.5 本文结构 7
2 系统需求和文法设计 7
2.1 需求描述 7
2.2 Mini-C词法说明 7
2.3 语法(文法)和语义的描述和说明 8
3 系统功能概述和实现 10
3.1 系统结构图 10
3.2 词法分析程序 11
3.3 语法分析程序 13
3.4 语义分析程序 20
结 论 22
参 考 文 献 23
致 谢 24
附 录A 25
1 绪论
1.1 编译器背景
高级程序设计语言作为一种语言,是人机对话的工具。目前比较流行的高级语言如C、C 、Java等,人们用这些高级语言写程序来表达自己想做的事情和期望达到效果,计算机接受这些语言,然后运行而产生相应的效果。高级语言是一种符号语言,采用接近数学用语的表示法,使人们容易书写与理解,也容易相互交流。然而,高级语言归根结底总是一个字符序列,其中包括英文字母、数字、运算符、括号及标点符号等。计算机能直接理解的只能是二进制机器代码,为使计算机能理解高级语言程序,其间必须有一个“翻译”,把符号程序翻译成计算机可直接接受和运行的二进制代码程序,这个翻译程序就是编译器,通常一种高级语言对应一个编译器。
图1-1编译器程序图
编译器将原始程序作为输入,翻译产生目标语言的等价程序。原始程序一般为高级语言编写,一个现代的编译器的主要工作流程如下:源代码→预处理器→编译器→汇编程序→目标代码→链接器→可执行文件[1]。其中编译器的主要工作包括词法分析、语法分析、语义分析、和目标代码的生成。
如同不同的程序设计语言一样,也存在着各种各样的编译程序,根据用途或侧重面,大致可以把编译程序分成如下几类[2]:
诊断型编译程序:此类编译程序专门设计用来帮助开发人员开发与调试程序,诊断程序只在程序开发的初始阶段使用,当程序已接近完成或完成时,其相应目标程序中不应该再包含诊断用代码。
优化型编译程序:此类编译程序专门设计出来产生高功效的机器代码,其代价是增加编译程序复杂性和编译时间。功效指时空功效,即期望目标程序占用的存储空间少,而运行时间短。
可重定目标编译程序:通常一个编译程序是为一个特定的程序设计语言和一种特定的目标计算机而设计的,从源程序编译生成的目标程序只能在某种特定计算机上运行,而另一种架构的机器无法运行,可重定目标型编译程序是易移植的编译程序。
交叉型编译程序:编译程序在一种型号计算机上运行,却生成另外一种型号计算机运行的目标程序。
增量型编译程序:增量型编译程序发现源程序错误时,仅从源程序错误修改附近的正文开始重新编译。
应用并行技术的编译程序:此编译程序能够处理并行和通信成分,实现共享变量、消息传递和同步等。
1.2 关于程序设计语言
在计算机领域里,程序是指一系列指令或语句,它规定了依次要进行的一系列工作,由计算机执行特定的指令或语句序列以获得某种预期的效果。程序设计语言是用来书写计算机程序的语言,它可以是与具体计算机特性紧密相关的低级语言,如各种特定计算机的机器语言与汇编语言,也可以是接近日常用语与数学表示法的高级语言。用户可以根据应用领域实际问题的特定情况,选择合适的程序设计语言,如用于工程计算的Fortran,用于教学和科学计算的Pascal,用于开发系统或嵌入式产品的C,等等。
一般程序语言的定义涉及语法、语义、语用、和语境四个方面[2]:
语法:语法是指如何由程序设计语言基本符号组成程序中各个语法成分(包括程序)的一组规则,其中由符号(单词)构成语法成分的规则为一般的语法规则,而由基本符号构成符号(单词)的书写规则称为词法规则。语法规则可用形式的方式描述,也可用语法图这样的非形式的方式描述,甚至口语方式描述。
语义:语义是程序设计语言中按语法规则所构成的各个语法成分的意义。一个程序执行的效果说明了该程序的含义,也就是程序的语义。程序的语义取决于相应程序设计语言各种语法成分的语义定义,即取决于程序设计语言的语义。语义又分为静态语义和动态语义,静态语义指编译时刻可确定的语法成分的含义;运行时刻才能理解与确定的含义称动态语义。语义通常用非形式的口语方式来定义。
语用:语用表示语言符号及其使用者之间的关系,设计符号的来源、使用和影响。对于程序设计语言,语用表示程序和使用者之间的关系。在程序中往往用注解形式解释某些变量的物理意义与用途等。
剩余内容已隐藏,请支付后下载全文,论文总字数:28140字