第七章:程序设计语言与语言处理程序
主要内容
1.基本概念
2.编译与解释
2.1 编译过程概述
编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机器语言)。
2.2 各阶段解释
3.文法定义
3.2 语法推导树
3.3 有限自动机
选C
3.4 正规式
3.4.1 正规式例题
上面这道例题,其中的丨表示“或”,*表示重复 [0,+∞)次。那么对于文法G[S]的分析如下:👇👇👇
第一空:👇👇👇
A选项:首先S→aA丨bB,可以推出aA;根据A→bS丨b,可以推出abS;根据S→aA丨bB,可以推出abaA;根据A→bS丨b,可以推出ababS;可以发现这样的正规式是一个以ab循环多次的字符串,即可以推出ababab。
B选项:首先S→aA丨bB,可以推出bB;根据B→aS丨a,可以推出baS;根据S→aA丨bB,可以推出babB;根据B→aS丨a,可以推出babaS;可以发现这样的正规式是一个以ba循环多次的字符串,即可以推出bababa。
C选项:首先S→aA丨bB,可以推出aA;根据A→bS丨b,可以推出abS;根据S→aA丨bB,可以推出abbB;根据B→aS丨a,可以推出abbaS;根据S→aA丨bB,可以推出abbaaA;根据A→bS丨b,可以推出abbaab。
D选项:首先S→aA丨bB,可以推出bB;根据B→aS丨a,可以推出baS;根据S→aA丨bB,可以推出babB;此时根据B→aS丨a,无法推出babb,因为B要么是aS、要么是a,不可能出现b这种情况,所以D选项是错误的!!!
第二空:意思是说这四个选项中哪一个可以将第一空中文法G[S]可以识别的三个选项都表示出来:👇👇👇
A选项:(a丨b)*,它可以将由a或b组成的任意串表达出来,也就是这样:a、ab、baa、babba这些都可以。那么它所表达的范围已经超出了文法G[S]可以识别的范围,它无法与文法G[S]保持等价,所以排除A选项。
B选项:(ab)*,它可以将由ab组成的串循环表示 [0,+∞) 次,也就是这样:ab、abab、abababab这些都可以。但是它无法表达第一空的B、C两个选项,因为它全部是以ab这样的形式表达的。所以排除B选项。
C选项:(ab丨ba)*,它可以生成任意数量的ab串或ba串,也就是这样:ababab、bababa或者abbaab这些都可以,它所表达的范围与文法G[S]完全等价!!!
D选项:(ab)(ba),它的意思是:先来若干个ab串、再来若干个ba串,也就是这样:ababab、bababa、ababbaba这些都可以,但是它无法表示第一空的C选项。所以排除D选项。
4.表达式
将表达式(a-b)*(c+5)构造成树的步骤为:括号不能出现在树中;按照表达式的计算顺序来依次构造!!!
第一步肯定是要计算(a-b),之后再计算(c+5),最后将这两者的结果相乘,所构造的树即为上图这种形式:👆👆👆
那么将树构造出来之后,对于前缀、中缀、后缀,无非就是二叉树的的前序、中序、后序遍历的过程:a b - c 5 + *。
5.函数调用——传值与传址
选D
6.各种程序语言特点
6.1 主要特点
①C:指针操作能力强,高效。
②C++:面向对象,高效。
③C#:面向对象,中间代码,.Net。
④Java:面向对象,中间代码,跨平台。
⑤Python:解释型,面向对象,胶水语言。
⑥Fortran:科学计算,执行效率高。
⑦Pascal:为教学而开发的,表达能力强,Delphi。
⑧Lisp:函数式程序语言,符号处理,人工智能。
⑨Prolog:逻辑推理,简洁性,表达能力,数据库和专家系统。
6.2 语言分类
①编译型:逐段编译,生成可执行程序exe等,执行效率高。
②解释型:逐句,解释器,跨平台,执行效率低。