目录
程序设计语言的分类
编译型语言和解释型语言
一、编译程序
编译程序流程
1、词法分析+语法分析
(1)词法分析
输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误。
(2)语法分析——分析句子结构
语法分析阶段:语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。
通过语法分析确定整个输入串是否构成一个语法上正确的程序。
词法分析与语法分析本质上都是对源程序的结构进行分析
2、语义分析+中间代码+出错处理
(1)语义分析阶段——分析句子含义
主要检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用。语义分析分为静态分析和动态分析两个部分。
静态语义分析使用语法制导翻译。
(2)中间代码
不依赖具体计算机,表现形式如下。
- (1)后缀式(逆波兰式)
- (2)树型表示
- (3)三元式:X=(a+b)*(c+d) ①(+,a,b)②(+,c,d)③(*,①,②)④(=,③,x)
- (4)四元式
(3)出错处理
典型真题一
试题分析:
语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,按语法规则分析检查每条语句是否有正确的逻辑结构。
参考答案:C
典型真题二
试题分析:
符号表在编译程序工作的过程中需要不断收集、记录和使用源程序中一些语法符号的类型和特征等相关信息。这些信息一般以表格形式存储于系统中。
参考答案:B
典型真题三
试题分析:
中间代码的作用是可使程序的结构在逻辑上更为简单明确,特别是可使目标代码的优化比较容易实现。
中间代码有多种形式,常见的有逆波兰记号(后缀式)、四元式和三元式,它们的共同特点是与具体的机器无关,不依赖于具体的计算机。
参考答案:B
二、文法——语法翻译规则
文法G定义为一个四元组(VN,VT,P,S),其中,
- VN为非终结符集合,
- VT终结符集合;
- P是产生式结合;
- S称为识别符或开始符号,也是一个非终结符,至少要在一条产生式的左边出现。
三、有限自动机——状态转化
确定的有限自动机 DFA:该状态机在任何一个状态,基于输入的字符都能做成一个确定的状态转换
不确定的有限自动机NFA:该状态机在任何一个状态,基于输入的字符都不能做成一个确定的状态转换。
这里分为两种状况
- ①对于一个输入,它有两个状态可以转换;
- ②存在ε的情况,即没有任何字符输入的情况下,NFA可以从一个状态迁移到另一个状态。
四、正规式
五、真题解析
典型真题一
由字符a、b构成的字符串中,若每个a后至少跟一个b,则该字符串集合可用正规式表示为( )。
试题分析
正规式中|表示或的意思,*表示*前的字符或字符串出现了0次或多次。
参考答案:A
典型真题二
在仅由字符a、b构成的所有字符串中,其中以b结尾的字符串集合可用正规式表示为( )。
试题分析
首先所有选项都是以b结尾的,但只有选项D中的 (a|b)*可以表示 {ε,a,b,aa,ab......}由字符a、b构成的所有字符串。
参考答案:D
典型真题三
【参考答案】A
典型真题四
![](https://img-blog.csdnimg.cn/20210308133739643.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N3YWRpYW4yMDA4,size_16,color_FFFFFF,t_70)
参考答案:A
典型真题五
参考答案:C