程序设计语言发展及其高级语言实现
- 机器语言->汇编语言->高级语言
- 高级语言的实现:
- 编译方式:生成目标程序
- 解释方式:边解释边执行,有利于人机交互,空间开销大
编译程序的组成
- 源程序->词法分析->语法分析->语义分析->中间代码生成->中间代码优化->目标代码生成->目标程序(错误处理,表格管理贯穿)
章节测验
- “用高级语言书写的源程序都必须通过编译,产生目标代码后才能投入运行。”,这种说
法正确与否? 。
A、
正确
B、
不正确
C、
不能确定
正确答案:B
答案解析:实现高级语言的方式包括编译、解释和转换,所以用高级语言编写的源程序可以通过解释方式或转换方式来实现运行。 - 【单选题】编译程序必须完成的工作有( )。
① 词法分析 ② 语法分析 ③ 语义分析
④ 中间代码生成 ⑤ 中间代码优化 ⑥ 目标代码生成
A、
①②③④⑤⑥
B、
①②③④
C、
①②③⑥
D、
①②③④⑤
正确答案:C
答案解析:源程序在经过词法分析、语法分析和语义分析之后可以直接转换为目标程序,有中间代码生成的目的是为了方便优化和移植,因此中间代码生成和中间代码优化不是编译过程中必须完成的工作。 - 【单选题】以下关于高级语言实现方式的说法中错误的是( )。
A、
编译方式与解释方式的根本区别在于是否生成目标代码;
B、
编译方式对源程序的处理是先翻译后执行;
C、
解释方式是按源程序中语句的动态顺序逐句地进行分析解释,并立即执行;
D、
解释方式并不对源程序进行翻译;
正确答案:D
答案解析:解释方式也需要对源程序进行翻译,只不过是边翻译边执行,不生成目标程序。 - 【多选题】编译程序各阶段的工作都要涉及( )和( )。
A、
表格管理
B、
语法分析
C、
出错处理
D、
代码优化
正确答案:AC
答案解析:在编译过程中,各个阶段都涉及表格管理(用于存储各种中间数据)和出错处理。 - (单选题, 5分)符号串集合A= { a,b,c,d,…,z,A,B,C,D,…,Z },下面对集合A*说法正确的是:
A. 该集合中符号串长度都相同
B. 该集合中符号串长度必定大于1
C. 该集合是英文串集合或空串
D. 该集合是英文字母集合
正确答案: C:该集合是英文串集合或空串;
答案解析:是英文字母集合A自我n次乘积,可以表示长度为n的英文串集 - (单选题, 5分)下述正则表达式中与(a*|b*)(c|d)等价的是:
A. a*(c|d)b(c|d)
B.
C.
D. a*(c|d)|b*(c|d)
正确答案: D:
答案解析:应用正则表达式中运算*对运算|的分配律可得。 - 设正则表达式r=(a|b)(x|y)*,则下面错误的正规集元素是:
A. abx
B. bxxx
C. bxyyxxy
D. a
正确答案: A:abx ;
答案解析:r表示的正规集中元素都包含两部分,前部分只能是a或b,后面可以由x或y的任意次幂连接,因为是星闭包,也可以不包含x和y。 - (单选题, 5分)r=(a|b|c)(x|y|z),则L®中元素个数是:
A. 6
B. 27
C. 18
D. 9
正确答案: D:9 ;
答案解析:r表示的正规集中每个字符串都包含两部分,前部分只能是a、b或c三种之一,后面部分只能是x、y或z三种之一,共有3*3也就是9种变化。 - (多选题, 5分)字母表Σ={0,1},下面属于Σ的符号串的是
A. 000
B. fai
C. 1
D. ε
我的答案: ACD:000; 1; ε;正确答案: ACD:000; 1; ε;
5分
答案解析:基本概念。符号串是由字母表中的符号组成的任意有穷序列。符号串中可以不包含任何符号,称为空串e。而fai表示空集。 - 设字母表S={a,b,c},请写正规式表示以a或b开头并以c结尾的字符串。
(a|b)(a|b|c)*c - 设字母表S={0,1},写正则表达式表示所有偶数个0和偶数个1组成的字符串。
答案不唯一。
参考答案1:(00|11) * ((01|10)(00|11) * (01|10)(00|11) * ) *
参考答案2:(00|11| ((01|10)(00|11) * (01|10)) ) *
解析:偶数个0偶数个1组成的串的数字个数肯定为2的倍数,所以我们可以以两位数字为最小考察单位,即分别考察接受00,11,01,10四种情况,则偶数个0偶数个1串可以反复出现以下三种串,即(情况1|情况2|情况3)*
情况1:00;
情况2:11;
情况3:如果出现01或10,则后面必定有01或10,中间允许经过多个00或11。
- 设字母表S={0,1},写正则表达式表示所有偶数个0和奇数个1组成的字符串。(提示:假设上一题偶数个0偶数个1的正则表达式可以表示为A,在此基础上则分别考虑0开头和1开头的情况)
1A | 0(00|11)*(01|10)A
解析:
在已知偶数个0和偶数个1的正则表达式A后,考虑判断偶数个0和奇数个1串的起始数字0或1两种情况:
情况1:如果起始是1,则剩下的部分一定是满足偶数个0偶数个1的A,即1A
情况2:如果起始是0,则后面一定会出现01或10,中间可以经过若干个00或11,即0(00|11)*(01|10)。若串未结束,后面剩下部分一定满足偶数个0偶数个1的A。