编译原理复习1

1.绪论

1.1  编译程序的概念

回顾:程序设计语言及程序设计语言的处理方式(编译和解释)

编译程序:是指这样的程序,它能够把某种语言的程序转换成另一种语言的程序,而后者与前者在逻辑上是等价的。

编译程序的分类

根据不同的用途和侧重点

诊断编译器:用于程序的开发和调试

优化编译器:具有优化能力,提高目标代码的效率

交叉编译器:该编译器产生不同于其宿主机的机器代码(就是在一个平台上生成另一个平台上的可执行代码。所谓平台,实际上包含两个概念:体系结构(Architecture)、操作系统(Operating System)

 宿主机:编写程序的计算机

   目标机: 运行程序的计算机

1.2  编译过程概述

主要工作:

高级语言写的程序翻译成等价的目标程序

1.2.1 词法分析

        主要工作

        词法规则(正规式有限状态自动机正则表达式3型文法等)

主要工作:

读入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词(也称单词符号,或简称符号,token),报告发现的词法错误(拼写错误)

源程序的格式化处理:删除无用的符号(空格、回车符等),删除注释语句

在词法分析阶段工作所依循的是语言的词法规则。描述词法规则的有效工具是正规式和有限自动机

例:for (i=0;i<=30;i++)    /*  循环语句*/

1.2.2 语法分析

语法:定义了语言各语法成分的形式或结构

语法分析的任务:在词法分析的基础上,根据语言的语法规则单词符号划分成各类语法单位(语法范畴),如短语句子子句程序段,确定整个输入串是否构成语法上正确的程序

   语法规则通常用上下文无关文法(2型文法)描述。

简单的文法(GrammarG=(VT,VN,S,P)

P: S->xAy

A->**|*

判断x*y是否是一个合法的语法范畴(语法单位)

通过构造语法树来实现

 

1.2.3 语义分析与中间代码的产生

        语义:定义了各语法成分功能和含义,即规定了语法单位的属性在执行时应进行的运算

语义:定义了各语法成分的功能和含义,即规定了他们的属性或在执行时应进行的运算。

这一阶段通常包括两方面的工作:首先对各种语法范畴进行静态语义检查,如果正确则进行另一方面的工作,即进行中间代码的翻译。

    通常使用属性文法述语义规则

2.高级语言及其语法描述

2.1 程序设计语言的定义

建立在有限字母集之上的一个符号系统

有一定的语法和语义规则

语法规则:词法规则语法规则

语义规则:描述语法单位的功能和含义

在定义方面, 编译程序研制者 一般用户 有所不同

一般用户:关心语言如何使用

编译器开发人员:关心文法的定义。他们对些构造允许出现更感兴趣。

程序语言主要由 语法和语义 两方面定义。
2.1.1 语法

语法:一组规则,用这组规则可以产生形式上正确的程序

2.1.2 语义

对于一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义。这就是语义问题。

语义是指这样的一组规则,使用它可以定义一个程序的意义。

语义描述方法:属性文法和基于属性文法的语法制导翻译方法。

2.2 高级语言的一般特征

高级程序设计语言最基本的、共有的技术特征

(待更新)

文法定义相关的几个概念和术语:

字母表由若干元素组成的有限非空集合,用S表示,它的每个元素称为一个符号

符号串: S中的符号所构成的有穷序列。

符号串的前缀后缀子串:设x是一个符号串,将x的尾(前)部删掉几个字符后形成的符号串,称为x的前(后)缀;从一个符号串中删去他的一个前缀和后缀后所剩下部分称为x的子串

空字:不包含符号的序列称为空字,记为e

S*表示S上的所有符号串的全体,空字也包括在其中。

f表示不含人何元素的空集{}

 分析e{}{e}的不同

符号串的连接运算

  xy是两个符号串,如果将y直接拼接在x之后,称这种操作为符号串的连接;

符号串的方幂

  一个符号串与其自身的n-1的任意连接称为此符号串的n次幂,记作:xn

   特别地:x0= e

2.3.1 上下文无关文法

文法是描述语言的语法结构的形式规则(即语法规则

上下文无关文法的特点

  它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。

特点:独立性

缺点:不能用来描述自然语言

归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号(非终结符)以及一组产生式

形式上定义一个上下文无关文法G是一个四元式

(V,V,S,P

c4adb54ecc53441483aca76314668e6f.png

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值