第三章 程序语言和语言处理程序基础知识

                                     一、概述

1、汇编、编译、解释系统的基础知识和基本工作原理。

2、程序设计语言的基本成分:数据、运算、控制和传输,程序调用的实现机制。

3、各类程序设计语言的主要特点和适用情况:过程式程序语言、面向对象程序设计语言、函数式程序设计语言、逻辑程序设计语言的基本特点、脚本语言的特点。

                  二、汇编、编译、解释系统基础

1. 解释与编译

     在计算机中,使用高级语言开发的程序都是不能直接运行的。需要经过一系列的处理,才能运行。这个过程,根据其处理方式的不同,可分为:解释型和编译型。

解释型:接受所输入的用程序语言编写的源程序,然后直接解释执行;这类语言中的最典型代表是BASIC.  

编译型:它是将用某种程序语言编写的源程序直接翻译成为另一种语言(目标语言程序),而且两者在逻辑上等价。如:C语言。

2. 编译过程

所谓编译过程,就是使用编译程序将高级语言源程序翻译为等价的机器语言程序的过程。一般来说,编译程序分为以下几个部分:词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成以及贯穿始终的表格管理与出错处理。各部分之间的关系如图3-2所示。

词法分析:从左到右逐字符读入源程序,识别出一个个单词符号;它是根据语言的词法规则(单词结构规则)进行的。本节第4部分对词法分析进行了详细介绍。

语法分析:在词法分析的基础上将单词符号序列分解成各类,诸如"程序"、"语句"、"表达式"等

语法单位。

语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息。

中间代码生成:在语法分析过程中,随着分析的进展,一条产生式获得匹配或用于归约时,根据这条产生式所对应的语义子程序进行翻译的方法称为语法制导翻译。通过翻译后,将生成中间代码。不同的高级程序语言可能生成同样的中间代码。编译程序使用的中间代码通常有逆波兰、三元式、四元式和树形四种表示法。

代码优化:代码优化是对程序进行等价变换,使其生成更有效(运行时间更短、占用空间更小)的目标代码。根据优化所涉及的程序范围,可以分为局部优化、循环优化和全局优化三个不同的级别。

目标代码生成:目标代码生成是把经过语法分析或优化后的中间代码作为输入,将其转换成特定机器的机器语言或汇编语言代码作为输出,这样的转换程序称为代码生成器。

3. 形式语言基本知识

抽象地说,语言是按照一定规则排列的符号和集合。要形式化地描述一个语言,就需要借助以下一些基本概念。

字母表∑ :非空的有穷集合,例如 ∑ = {a,b}.

字符串:由∑ 的符号组成的有穷序列叫做字母表∑ 上的字符串。其中包含的字符数,称为长度。记做|字符串名|.长度为0的为空串,记做e.要注意的是,e中包括一个元素!而 ∅才是没有元素的空串。

形式语言: 上的字符串的全体记为∑ *, ∑*的任何子集都称做字母表?上的形式语言,简称语言。

前缀、后缀:设v是一个字符串,由v左边若干连续符号组成的字符串称做v的前缀。由v右边若

干连续符号组成的字符串称为v的后缀。

连接:设a=a1a2...an,b=b1b2...bn,则ab表示它们的连接,值为:a1a2...an b1b2...bn.

连续重复(方幂):把n个a的连接记做an.

下面是几个常见的字集运算(设A,B?S*,即A、B是字母表S上的字集):

或操作:AxB={a |axA或a∈B}.

积运算:AB={ab |axA且b∈B}.

幂运算:An=A·An-1=An-1·A,A0={e}.  

正则闭包:A+=A1∪A2∪A3∪...∪An∪...(也就是所有幂的组合)。 

 闭包:A*=A0∪A+(在正则闭包的基础上,加上A0)。

(1)什么是形式文法

文法就是用来描述语言的语法结构的形式规则。我们可以从一个简单的例子来理解文法,如下所示:

张三和李四是工程师。

由五个词组成:张三 和 李四 是 工程师  组成一个句子:由主语、谓语构成。我们知道中文的文法:

<句子>→<主语><谓语>

<主语>→<名词词组>

<名词词组>→<名词><连词><名词词组>

<谓语>→<动宾词组>

<动宾词组>→<动词><宾语>

<宾语>→<名词>

<名词>→张三|李四|工程师

<连词>→和

<动词>→是

而在上面的例子中:所有用<>包括起来的都是"非终结符",而所有直接写出来的就是"终结符",以上规则就是产生式。从上面的例子中,我们通过感性认识理解。

非终结符:它不是语言的组成部分,而是在推导过程中的占位符,最终要替换成终结符。  终结符:语言是组成部分,是最后的内容。

产生式:用终结符替代非终结符的规则。  起始符:能够用于语言开头的符号,在本例中的<主语>就是起始符。  总结而言,整个推导的过程为:

<句子> <主语><谓语>

<名词词组><谓语> <主语>→<名词词组>

<名词><连词><名词词组><谓语>

<名词词组>→<名词><连词><名词词组>

<名词><连词><名词词组><动宾词组> <谓语>→<动宾词组>  <名词><连词><名词词组><动词><名词>

<动宾词组>→<动词><宾语>

张三和李四是工程师  我们可以从中发现,它也可以推导出:"张三和工程师是李四",很显然,它属于文法正确,但语义是错误的。

(2)文法的分类

根据乔姆斯基的分类法,文法可以分成四种类型,如表3-3所示

         要根据这样的定义来对文法进行判断,总是让许多考生无从下手,其实只要掌握一些规律,就能够更好地完成这一任务。

        0型文法:就是一般形式的方法,只要符合我们前面的定义,就属于0型文法。因此也称为无限制文法、短语文法。由0型文法生成的语言称为0型语言。

       1型文法:它的每一个产生式应该满足以下条件:jAf→jaf;其中:A?V (也就是说,A属于非终结符),f,j,a (VxT)* (也就是说,f,j,a是非终结符或终结符的组合)。由于这些产生式在替换非终结符时,需要考虑它的前一个、后一个元素(也就是产生式替换的非终结符的前、后均有一个不变的符号),因此又称为上下文有关文法,其产生的就是上下文有关语言,即1型文法。

      2型文法:如果它的所有产生式都形如:A→a;其中:A?V(也就是说,A属于非终结符),a ?(V?T)* (也就是说,a是非终结符和/或终结符的组合)。那么,它就是一个2型方法,由于转换与前后元素没有关系(也就是产生式的前后都是空的),因此,也称之为上下文无关文法。

3型文法:它也是一个2型方法。  

右线性文法:如果它的所有产生式都形如:A→aB或A→a(也就是除了A→a这种特殊形式外,每个产生式的右边都有一个非终结符);其中:A,BxV(也就是说,A,B属于非终结符),a(VxT)* (也就是说,a是非终结符和/或终结符的组合)。  

左线性文法:如果它的所有产生式都形如:A→Ba或A→a(也就是除了A→a这种特殊形式外,每个产生式的左边都有一个非终结符);其他与上面一样。 

 右线性、左线性都称做3型文法或正则文法。

4. 词法分析

        词法分析是整个分析过程的一个子任务,它把构成源程序的字符串转换成语义上关联的单词符号(包括关键字、标识符、常数、运算符和分界符等)的序列。词法分析可以借助于有限自动机的理论与方法进行有效的处理。

(1)有限自动机

        有限自动机是一种自动识别装置,能够准确地识别正规集。它与3型文法对应,可以分为确定的有限自动机和不确定的有限自动机两种。

 确定的有限自动机(DFA)

M=(S,S, δ,S0,Z)

1)S是一个有限集,每个元素为一个状态  2)S是一个有穷字母表,每个元素为一个输入字符

3)δ是转换函数:是一个单值对照

4)S0,属于S,是其唯一的初态

5)Z是一个终态集(可空)  

有限状态自动机可以形象地用状态转换图表示,设有限状态自动机:

DFA = ({S, A, B, C, f}, {1, 0},δ,S, {f}),

其中:

δ(S, 0) = B, δ(S, 1) = A, δ(A, 0) = f, δ(A, 1) = C, δ(B, 0) = C, δ(B, 1) =f,δ(C, 0) = f, δ(C, 1) = f

其对应的状态转换图如图3-3所示。

不确定的有限自动机(NFA)

M=(S,S, δ,S0,Z)

1)S是一个有限集,每个元素为一个状态  2)S是一个有穷字母表,每个元素为一个输入字符

3)δ是转换函数,是多值对照

4)S0,属于S,是非空初态集

5)Z是一个终态集(可空)

        与确定的有限自动机一样,不确定有限自动机同样可以用状态转换图表示,所不同的是,在图

中一个状态结点可能有一条以上的边到达其它状态结点。

        从定义的角度来区分NFA与DFA,我们发现:DFA是单值对照,NFA是多值对照(其实也就对应

着上面所述的"NFA图中一个状态结点可能有一条以上的边到达其它状态结点")。

NFA可以转换为等价的DFA.

(2)正规式

对于字母表而言,正规则式和它所表示的正规集的递归定义是:

空集是正规表达式。

任何属于的a,都是其正规式。 

 假定U和V都是上的正规式,那它们的或、连接、闭包都是正规式。

  通常在正规表达式中,一元运算符"*"具有最高的优先级,连接运算具有次优先级,运算符"|"具有最低优先级,这三个运算都是左结合的。每一个正规表达式R都对应一个有限自动机M,使M所接受的语言就是正规表达式的值。经过以下步骤可以从一个正规表达式R构造出相应的有限自动机M.

首先定义初始状态S和终止状态f,并且组成有向图:

然后反复应用以下规则:

      直到所有的边都以Σ中的字母或ε标记为止。由此产生了一个带ε–转移的非确定有限自动机,然后可以通过上面介绍的方法,把该自动机转换成确定有限状态自动机。

    下面举一个例子说明自动机理论在词法分析程序中的应用。C语言中对标识符的规定为由"_"或以字母开头的由"_"、字母和数字组成的字符串,该标识符的定义可以表示为下面的正则表达式:

     式中的α代表字母字符{A,...,Z,a,...,z},d代表数字字符{0,1,...,9}.利用前面的方法构造出如图3-4所示的有限自动机。

该自动机所接受的语言就是C语言中的标识符。

     在有限自动机的状态转换过程中,需要执行相关的语义动作。例如当识别到一个标识符时,需要在符号表中添加该标识符,并且向语法分析程序输送表示该标识符的单词。

5. 语法分析

      语法分析的任务是识别由词法分析给出的单词符号序列是否为给定文法的正确句子(程序),语法分析可以分为自底向上分析和自顶向下分析两大类。

(1)自底向上分析

       自底向上分析也称为移进--归约分析法。它的基本思想是:对输入符号串自左向右进行扫描,并将输入符号逐一移进一个后进先出的栈中,边移进边分析;一旦栈顶符号串形成某个句型的可归约串时,就用某产生式的左部非终结符来替代(这称之为归约)。一直重复这个过程,直到栈中只剩下文法的开始符号。

由于"可归约串"的不同,也就形成了几种不同的自底向上分析法。

规范归约分析法:用"句柄"来刻画"可归约串".

 规范归约是规范推导的逆过程。LR分析法是一种规范归约分析法,它根据当前分析栈中的符号串和向右顺序查看输入串的k个符号,就可以确定分析器的移进还是归约。

常用的LR分析器有LR(0),SLR(1),LALR(1)和LR(1)四种。一个LR分析器由总控程序、分析表、分析栈三个部分组成。

算符优先分析法:用"最左素短语"来刻画"可归约串".

算符优先分析法是定义文法中终结符之间的优先关系,利用这种关系定义和操作可归约串,从而达到语法分析的目的。

如果文法G中不存在形如P→...QR...的产生式(P,Q,R均为非终结符),也就是产生式中没有非终结符连续出现的情况,则称G为算符文法。

对于一个不含e产生式的算符文法G,任何一对终结符a和b之间具有如下的优先关系,如表3-4所示

(2)自顶向下分析

自顶向下分析法也称为面向目标的分析方法,也就是从文法的开始符号出发尝试推导出与输入

的单词串相匹配的句子。它可以分为确定和不确定两种,如表3-5所示。

有一类称为LL(1)的文法可用递归子程序方法或预测分析方法来实现确定的自顶向下的语法分

析。要采用自顶向下的分析,必须消除左递归、提取公共左因子,然后采用下列方法之一进行分

析,如表3-6所示。

                              三、程序设计语言基础 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,780评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,424评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,397评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,576评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,997评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,945评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,107评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,850评论 0 208
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,625评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,804评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,285评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,613评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,291评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,164评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,963评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,096评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,886评论 2 278

推荐阅读更多精彩内容