编译原理的基本概念(一)

编译原理的基本概念(一)1.词法分析词法分析程序又称为扫描程序。进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单位,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数。2.语法分析语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类。分析时如果发现有不合语法规则的符号,要把这些出错的符号及错误性质报告给程序员。此外,在分析过程中若无法将某个单词符号进行归类,则该表达式有语法错误。分析过程常用
摘要由CSDN通过智能技术生成

编译原理的基本概念(一)

1.词法分析
词法分析程序又称为扫描程序。进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单位,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数。

2.语法分析
语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类。分析时如果发现有不合语法规则的符号,要把这些出错的符号及错误性质报告给程序员。此外,在分析过程中若无法将某个单词符号进行归类,则该表达式有语法错误。分析过程常用语法树来表示句子。

3.语义分析
语义分析的功能是确定源程序的语义是否正确。语义分析主要能识别的语义错误有变量未经声明就使用,变量重复声明,运算对象类型是否匹配等。
为识别出这些语义错误,语义分析要使用编译程序中建立的许多表。

4.中间代码
语义分析程序通常将源程序生成一种中间表达形式,即中间代码。中间代码易于产生、易于翻译成目标程序的特点,可看成是一种抽象机的指令代码。

5.代码优化
经过语义分析后,编译程序将源程序生成中间代码,这时的中间代码往往有些重复和冗余。优化的目的是提高目标程序的执行效率。代码优化首先在中间代码上进行。在局部范围可能做的优化有:常数表达式的计算;根据操作符的某些性质,如可结合性、可交换性和分配性以及检测公共子表达式进行优化。

6.目标代码
编译的最后一步是将中间代码生成特定机器上的机器语言代码,即目标代码。目标代码的形式可以是绝对指令代码、可重定位的机器指令代码或汇编指令代码。

7.可重定位的机器代码
可重定位的机器代码可以装载到内存的任何地方,这种代码采用相对地址,起始地址为0,各条指令集所访问的地址都是相对于0的逻辑地址。若加载到内存单元 L 处,则所有指令地址及访问地址都要加上 L 。

8.符号表
符号表由若干记录组成的数据结构,每个标识符在表中有一条记录,每条记录有多个域,每个域记载标识符的一个属性。

9.错误处理
编译的各个阶段都可能发现源程序中的错误。任意时刻发现错误,都应该报告错误信息,包括错误出现的位置和错误信息等。

  • 语法分析 可以检测出源程序中的非法符号,就好比语句中出现的错字和错词。
  • 语法分析 能够发现程序中的各种语法错误,如括号不匹配。
  • 语义分析 能够判断运算对象的类型是否匹配,变量是否重复声明或未经声明就使用等错误。

10.单遍编译程序
单遍编译程序只对源程序进行一遍扫描,就完成编译的各项任务,产生目标代码。其中不产生中间代码,常以语法分析程序为中心,词法分析和语义分析作为语法分析的子程序。
一“遍”是指编译程序在编译时把源程序或中间形式从头到尾扫描一遍,并做相关的处理,生成新的中间形式或目标代码。

11.端的概念
把编译程序分为前段和后端的优点是便于移植和编译程序的构建。

  • 前端
    主要与源语言有关,包括词法分析、语法分析、语义分析和中间代码生成、符号表的建立,以及相应的错误处理和符号表操作。
  • 后端
    主要与目标机器有关,包括代码优化、目标代码生成,以及相应的错误处理和符号表操作。

12.连接加载程序
连接加载程序完成两个主要任务。

  • 连接
    把几个可重定位的机器代码文件连接成一个可执行的程序,这些文件可能是分别编译得到的,也可能是由系统提供的库文件。
  • 加载
    读入可重定位的机器代码,根据装入地址将相对地址转换成绝对地址,并存储到内存中。

13.字母表
字母表是元素的非空有穷集合。字母表中的每个元素称为符号,因此字母表也可称为符号集。典型的符号有字母、数字、各种标点符号和运算符号。

14.符号串
符号串是由字母表上0个或多个符号组成的任何有穷序列。ε也是字母表上的符号串,它是由0个符号组成词
。一个字母表上的全部符号串所组成的集合是无穷的。

15.符号串及其集合的运算

(1)符号串的长度:若用x表示字母表上的符号串,则x的长度为所含字符的个数,记为|x |。

例如:|abc |=3,|an+*a|=5,|ε|=0。

(2)字符串相等:x,y为两个字符串,当且仅当组成它们的符号依次相等时,符号串x、y相等,记作 x=y。

例如:x=abc,y=abc,则 x=y。x=ab,y=ba,则x≠y。

(3)字符串的前缀:从字符串x 的末尾删除0个或多个字符后得到的字符串。

如:c,com,computer都是computer的前缀。

(4)字符串的后缀:从字符串x的开头删除0个或多个符号后得到的字符串。

如:ty,puty ,computer 都是computer的后缀。

(5)字符串的子串:从字符串的开头和末尾删除0个或多个符号后得到的字符串。

如 put 是computer的子串,字符串的前缀和后缀都是它的子串。

(6)字符串的连接:若x、y是两个字符串,则 xy 表示连接,是将符号串y连接在符号串x的后面。若x,y是字母表∑上的两个符号串1,则xy也是也是字母表∑上的字符串。

如:x=ab,y=ba,则xy=abba。
注:连接没有交换率,即xY≠yx;而空串ε有εx=xε=x。

(7)集合的乘积运算:令A,B为两个符号串集合,A和B的乘积AB定义为:AB={xy |x∈A,y∈B}
>如:A={a,b},B={c,d},则AB={ac,ad,bc,bd}

(8)符号串的幂运算:若x是符号串,则x的幂运算定义为:
x⁰=ε,x¹=x,x²=xx,···,xⁿ=xx···x=xxⁿ⁻¹=xⁿ⁻¹x,其中n>0

如:x=abc,x⁰=ε,x¹=abc,x²=abcabc,···

(9)集合的幂运算:设A为符号串集合,则A的幂运算定义为:
A⁰={ε},A¹=A,A²=AA,···,Aⁿ=AA···A=AAⁿ⁻¹=Aⁿ⁻¹A,其中n>0。

如:A={a,b},则A⁰={ε},A¹={a,b},A²={aa,ab,ba,bb},···

(10)集合的正闭包和集合的闭包:设A为一个集合,则集合A的正闭包用A⁺表示,定义为:A⁺=A¹∪A²∪···∪Aⁿ∪···
集合A的闭包用A表示,定义为:A=A⁰∪A⁺

如:A={a,b}则
A⁺={a,b,aa,ab,ba,bb,aaa,abb,···}
A*={ε,a,b,aa,ab,ba,bb,aaa,aab,···}

16.文法形式定义
文法可表示一个四元式 G=(Vn,Vt,P,Z) ,具体含义如下:

  • Vn 是一个非空有穷集合,该集合中的每个元素称为非终结符。它们至少在规则中“::=”左边出现一次。
  • Vt 是一个非空有穷集合,该集合中的每个元素只能在规则中“::=”的右边出现,称为终结符号。而Vt 和Vn 的并集 V=Vt ∪ Vn 就是该文法的字母表,并且Vt ∩ Vn =∅,即Vt 集合与Vn 集合的 交集为空。
  • P 是一个非空的有穷集合,它的每个元素叫做产生式或规则。产生式的形式为:α→β 或 α::=β 。其中α 是产生式的左部且不能为空,β 是产生式右部,并且α、β∈(Vt ∪Vn )* ,“→”或“::=”含义相同,表示“定义为”或“由···组成”。
  • Z 是 Vn 集合的一个特殊的非终结符号,称为文法的识别符号或开始符号。它至少出现必须在某个产生式的左部出现一次。

17.文法的EBNF表示
BNF为巴科斯-诺尔范式。文法的EBNF(扩充的BNF)表示就是为了提高文法规则的表达能力,增加了一些特殊的符号“|、{、}、<、>、(、)、[、]”来表示文法,这些符号称为元符号。除了“|”,其他的元符号总是成对出现。

  • 元符号|,表示“或”。对于具有相同左部的那些规则,如α→β1 ,α→β2 ,···,一α→βn 可以缩写为:α→β1 |β2|···|βn
  • 元符号< 和 > ,用于括起由中文字组成的非终结符号或多个字母组成的符号。
  • 元符号{ 和 } ,表示可重复连接, { t } n m \{t\}_n^{m} { t}nm表示符号串t可重复连接n~m次,而 {t}表示符号串t可重复连接0到无穷次。
  • 元符号 [ 和 ] 。[t]表示其中的符号串t可有可无。
  • 元符号( 和 ),表示括号内的成分优先。常用于在规则中提取公因子。

    如:U→xy|xw|···|xz
    可写成:
    U→x(y|w|···|z)

18.推导

  • 直接推导定义
  • 推导定义:如果存在一个直接推导序列 α 0 ⇒ α 1 ⇒ α 2 ⇒ ⋅ ⋅ ⋅ ⇒ α n \alpha_0 \Rightarrow \alpha_1\Rightarrow\alpha_2\Rightarrow···\Rightarrow\alpha_n α0α1α2αn ,其中 n>0,那么称 α 0 \alpha_0 α0 产生 α n \alpha_n αn α n \alpha_n αn 归约到 α 0 \alpha_0 α0<
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值