欢迎来到天天文库
浏览记录
ID:47909188
大小:36.50 KB
页数:2页
时间:2019-10-23
《浅谈编译原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、首先还是耍说•些非话的:所谓的编译器就是对使用某种规则编出来的程序进行翻译,•般iflJH,特定的语言都必须冇特定的编译器,没冇什么可以兼容的说法,大家熟悉C语言的编译器,如TurboCo这些规则就纯粹是人为的啦,也正因此,诞生了我们所熟悉的大量的各种各样的高级语言,如Pascal、C、C++、Algol~~~~因此所谓的编译器也就是-堆程序,他们检查你是否按照规则來了,以及充分了解你的要求,并把结果返回给你。凶此,编译器耍做的事情其实很简单:首先检杳语言规则(包括词法规则和语法规则),然厉做语义分析,余下的就由计算机里的破件去执行运算指令了(当然这种说法并不恰当)。这里还应该讲
2、一讲词法分析和语法分析以及语义分析的大概情况,山于时间关系,我以后再补齐,诘:见谅。我这里主要说的是我所作的事情,这也是我的毕业设计:为…个类似C语言的小语言Tiny-C做翻译。词法规则和语法规则都是我自己定的要求充分接近C语言。本來是雄心壮志,想把他做的完美,一方面由于实力——只能止步于语法分析,一方而由于时间一使得该分析器未能如愿工作。我使用的是自下而上的LR⑴分析法,因此花了我不少的时间和粘力啊;为此我写了K10页的项目集,最终得到75个状态,最要命的是画出分析表一一一张75X41的表格。其实难度不大,量多了一些而已。粗略的谈了-下编译原理,相信大家己经了解到他的过程大致是
3、:词法分析、语法分析、语义分析、中间代码生成、中间代码优化、目标代码生成。而凭借我目前的能力,我只能讲述前两个方面的知识,而且只能说到我所了解的深度和广度,同时基于时间,我实在不能说得太多。1.词法分析:首先必须明确,单词是语言的基木单位。词法分析是编译的第一个阶段,其中心任务就是识别出源程序中的单词,并告诉下-阶段(语法分析)这些单词是按照怎样的顺序组织的,并且要承担-定的语义分析任务(比如说保存变量的值、区分标识符的类型)。我们将单词常常划分为以下儿种类型:(1)标识符它可能在源程序中充当函数名,也可能充当变量名,甚至有可能充当标号(如果在程序中允许使用goto)。(2)关键
4、字它是语言的特征之一,如常见语言的关键字有:char、int、if>else、switch、case、while>foi等等(3)运算符即运算符号:+、・、/、&等(4)界限符常见的有:;,:()等等(5)常数要知道当前单词是哪一种类型,就必须了解单词的词法规则描述。我们通常使用正规表达式來描述单词的构成,比如说标识符可以被定义A:letter(digit
5、letter)*,即以字母开头,后面紧跟字母或者数字(这也是C语言中对标识符的规定)。那么究竟如何进行词法分析呢,关于这一点,一般的教科书首先都会告诉你关于自动机的概念和理论,当语言的词法比较复杂时,利用自动机却是I•分冇用,
6、因为它能简化程序中的状态数。但我习惯于不左构造冇穷自动机,而是乎工肓接编写代码,这也许不是一个好的习惯和作风,但分析的语言对彖很小的时候是完全可以应付的。我建议你为每种单词定义•个整型的类型号,你以后将发现这在口下而匕的语法分析中很有川,简直就是必须这样做。写出词法分析程序并不怵I难,然而你-定要好好的构思-KS序的整个结构,据我所知,在过滤空白字符I:最容易出错,将空白字符的过滤代码放在程序的那一部分以及I叫退字符的处理是词法分析中值得注意的两个方面。我总觉得词法分析实在是简单不过,然而我也不能保证白C编写的代码是高效而口优雅的,尤其在文件读写方面,我总觉得TC有很大的问题。好
7、了,词法分析到此结束,如果你还冇什么问题销告诉我。(如果我能起作用)2.语法分析:这里的工作就是对词法分析的结果进行处理,词法分析的结果大概是这个样子,打个比方,源程序中有这样的语句:a=b+c:词法分析的结果是:IMID+ID:语法分析的结果是:expression;可能最终这个结果会被归约成:statement做语法分析,你首先必须获得这个语言的语法描述,我们常常使用BNF范式來描述语言的文法。比如说C语言中的语句是如此定义的:语句可以是表达式语句、选择语句、分支语句、循环语句,其中选择语句可以是IF语句或者IF・・・..ELSE…..语句,选择语句是SWITCH等等。那么它
8、的BNF定义可能是:statement::expression_statement
9、if_statement
10、switch_statement
11、circulate_statementif_statement::IFexpressionstatement
12、IFexpressionstatementELSEstatement我无法在这里给你详细解释,你需要自己去仔细学习和体会。那么我们怎么做语法分析呢?前提条件是,词法分析已经得到了源程序的单词序列。语法分析方法总的來说有两大类:口上
此文档下载收益归作者所有