编译原理知识点总结

   概述

       计算机程序设计语言分为机器语言,汇编语言,高级语言。其中机器语言是可以被计算机直接理解。为了更好的理解机器语言,所以有了汇编语言。后来出现了高级语言,高级语言跟接近人们的表达习惯。是类似与数学定义或自然语言的简洁形式。而高级语言和汇编语言最终都要变成由0和1构成的机器代码。将汇编语言翻译成机器语言的过程就叫做汇编。而将高级语言翻译成汇编语言或直接由高级语言到机器语言的过程我们叫做编译。

编译:将高级语言翻译成汇编语言或机器语言的过程。

我们把前者称为源语言,后者翻译出来的语言称为目标语言。

编译器在语言处理系统中的位置

源程序到预处理器,然后经过预处理器处理的源程序再经编译器成为汇编语言程序,然后再由汇编器转变成为了可重定位的机器代码。再经过连接器或加载器生成了目标机器代码。

语言在翻译的过程中,与我们现实生活中的翻译非常类似。

词法分析

词法分析的主要任务

从左到右逐行扫描源程序的字符,识别出各个单词,确定单词的种类。将识别出的单词转换成统一的机内表示——词法单词形式。

语法分析

语法分析器从词法分析器输出的token序列中识别出各类短语,并构造语法分析树。

语法分析树描述了句子的语法结构。

语义分析

语义分析的主要任务:收集标识符的属性信息。(种属、类型、存储位置、长度、值、作用域、参数和返回值信息)

语义检查

语义检查:变量或过程未经声明就使用。变量或过程名重复声明。运算分量类型不匹配。操作符与操作数之间的类型不匹配。

符号和符号串

字母表:字母表\sum是一个有穷符号集合。

                符号:字母、数字、标点符号、......

字母表上的运算

 字母表上的运算:字母表\sum _{1}\sum _{2}的乘积。\sum _{1}\sum _{2}={ab|a\in\sum _{1},b\in\sum _{2}}

例:{0,1}{a,b}={0a,0b,1a,1b}

 字母表\sum的n次幂:

\sum ^{0}={\varepsilon},

\sum ^{n}=\sum ^{n-1}\sum,n\geqslant1

例:\left \{ 0,1 \right \}^{3}=\left \{0,1 \right \} \left \{ 0,1\right \} \left \{ 0,1 \right \}=\left \{ 000,001,010,011,100,101,110,111 \right \}

字母表的n次幂:长度为n的符号串构成的集合。

字母表\sum正闭包\sum ^{+}=\sum ^{1}\cup \sum ^{2}\cup \sum ^{3}\cup......

字母表的正闭包:长度正数的符号串构成的集合。

字母表\sum闭包\sum ^{*}=\sum ^{0}\cup \sum ^{1}\cup \sum ^{2}\cup \sum ^{3}\cup......

字母表的闭包:任意符号串(长度可以为零)构成的集合。

符号串 :由字母表中的符号组成的任何有穷序列称为符号串。

如果某符号串x中有m个符号,则称其长度为m,表示为|x|=m。

例如:001110的长度是6。

有空符号串,即不包含任何符号的符号串,用\varepsilon表示,其长度为0,即|\varepsilon|=0。

有关符号串的一些运算

符号串的头尾,固有头和固有尾:如果z=xy是一符号串,那么x是z的头,y是z的尾,如果x是非空的,那么y是固有尾,同样,如果y非空,那么x是固有头。设z=abc,那么z的头是\varepsilon,a,ab,abc;除abc外,其他的都是z的固有头。而z的尾是\varepsilon,c,bc,abc;除了abc外,其他都是z的固有尾。

符号串的连接:设x和y是符号串,它们的连接xy是把y的符号写在x的符号之后得到的符号串。

符号串的方幂:设x是符号串,把x自身连接n次得到符号串z,称为符号串x的方幂,写作z=x^{^{n}},即把符号串x相继的重复n遍。如:x=AB,x^{^{0}}=\varepsilonx^{^{1}}=AB,x^{2}=ABAB,x^{3}=ABABAB。......

符号串的子串:符号串中连续的若干个符号。

如:符号串x=ABCDEFG,即子串有AB,BC,CDE,EFG,DEF,BCDE等等。

文法

文法G定义为四元组(V_{N},V_{T},P,S),其中V_{N}为非终极符集,V_{T}为终结集,P为规则的集合,且至少含有一个非终结符,S称作识别符或开始符,它是一个非终结符,至少要在一条规则中作为左部出现。

设G[S]是一个文法,如果符号串x是从开始符S推导出来的,则称x是文法G[S]的句型。而句子是不包含非终极符的句型。

文法的类型

设G=(V_{N},V_{T},P,S),如果每一个产生式都是a\rightarrowb这样的结构,a\epsilonV_{N}\cupV_{T})^{*}且至少含有一个非终结符,而b\epsilonV_{N}\cupV_{T})^{*},则G是一个0型文法

在0型文法的基础上,满足若P中的每一个产生式a\rightarrowb均满足|b|>=|a|,仅S\rightarrow\varepsilon除外,则文法G是1型或上下文有关的

在1型文法的基础下,若P中的每一个产生式a\rightarrowb满足:a是一个非终结符,b\epsilonV_{N}\cupV_{T})^{*},则此文法称为2型的或上下文无关的

在2型文法的基础下,若P中的每一个产生式的形式都是A\rightarrowaB或A\rightarrowa,其中A和B都是非终极符,a\epsilonV_{T^{}}^{*},则G是3型文法或正规文法

最左(最右)推导

最左(最右)推导:在最左(最右)推导中,总是选择每个句型的最左(最右)的非终结符进行替换。

文法二义性的判断

若一个文法的某个句子能有两个不同的最右(左)推导。

短语、直接短语、句柄

短语:给定一个句型,其分析树中的每一棵子树的边缘称为该句型的一个短语。

直接短语:如果子树只有父子两代结点,那么这棵子树的边缘称为该句型的一个直接短语。

句柄:直接短语中的最左直接短语为该句型的句柄。

小栗题

1.文法G=({A,B,S}),{a,b,c},P,S),其中P为S\rightarrowAc|aB     A\rightarrowab      B\rightarrowbc  写出L(G[S])的全部元素。

将A,B代入到S\rightarrowAc|aB 当中,得S\rightarrowabc|abc,得L(G[S])的全部元素为abc。

2.一个上下文无关文法生成句子abbaa的唯一语法树如下:

(1)给出该句子相应的最左推导和最右推导。

S\rightarrowABS|Aa|\varepsilon

A\rightarrowa

B\rightarrowSBB|b

最左推导:S\rightarrowABS

               S\rightarrowaBS

               S\rightarrowaSBBS

               S\rightarrowa\varepsilonBBS

               S\rightarrowa\varepsilonbBS

               S\rightarrowa\varepsilonbbS

               S\rightarrowa\varepsilonbbAa

               S\rightarrowa\varepsilonbbaa\rightarrowabbaa

最右推导:S\rightarrowABS

                  S\rightarrowABAa

                  S\rightarrowABaa

                  S\rightarrowASBBaa

                  S\rightarrowASBbaa

                  S\rightarrowASbbaa

                  S\rightarrowA\varepsilonbbaa

                  S\rightarrowa\varepsilonbbaa\rightarrowabbaa

(2)该文法的产生式集合P可能有哪些元素。

S\rightarrowABS|Aa|\varepsilon

A\rightarrowa

B\rightarrowSBB|b

(3)找出该句子的所有短语、简单短语、句柄。

短语:a,b,\varepsilon,aa,bb,abbaa

简单短语:a,b,\varepsilon

句柄:a

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值