欢迎来到我的博客,我会带着大家一起学习软件设计师的知识,来帮助大家更好的学习。大家如果想要看往期内容,可以点击下面连接:
大一 大二的学生如何在大学里面就拿到软考中级软件设计师(1)
https://blog.csdn.net/2303_79274306/article/details/140398388
大一 大二的学生如何在大学里面就拿到软考中级软件设计师(2)
https://blog.csdn.net/2303_79274306/article/details/140415177
大一 大二的学生如何在大学里面就拿到软考中级软件设计师(3)
https://blog.csdn.net/2303_79274306/article/details/140569724
大一 大二的学生如何在大学里面就拿到软考中级软件设计师(4)
https://blog.csdn.net/2303_79274306/article/details/140656985
如果想要了解以下软考都考哪些题,可以点击下面连接:
2023年上半年全国计算机技术与软件专业技术资格考试(软件设计师 上午试卷+下午试卷)
https://download.csdn.net/download/2303_79274306/89559561
2022年下半年全国计算机技术与软件专业技术资格考试(软件设计师 上午试卷+下午试卷)
那么,我们接下来就开始今天的学习吧!!!
2.2语言处理程序基础
2.2.2编译程序基本原理
文法
- 描述语言语法结构的规则称为文法。一个形式文法式一个有序四元组G=(
,
,P,S) ,其中:
:非终结符集合。不是语言组成部分,不是最终结果,可理解为占位符。
:终结符集合。是语言的组成部分,是最终结果。
=
。
P:产生式集合。形如α→β。用非终结符推导出终结符的规则。
S:起始符。是语言的开始符号。
终结符:最终结果,不能推导出其他元素。
非终结符:能够推导出其他元素。
产生式:即非终结符推导出终结符的公式。
正则闭包:
=
````
````(也就是所有幂的组合)
闭包:
=
(在正则闭包的基础上,加上
={
})
例如:
={
,a,aa,aaa,````},(
)={
,ab,abab,ababab,````}。
文法分类
程序设计语言的绝大多数语法规则可以采用上下文无关文法进行描述。语义是上下文有关的。
正规表达式
- 用于词法分析,对于字母表
,其上的正规式及其表示的正规集可以递归定义如下:
(1)
是一个正规式,它表示集合L(
)={
}。
(2)若a是
上的字符,则a是一个正规式,它所表达的正规集为{a}。
(3)若正规式r和s分别表示正规集L{r}和L{s},则:
r|s是正规式,表示集合L(r)
L(s)。
r·s是正规式,表示集合L(r)L(s)。
r*是正规式,表示集合(L(r))*。
(r)是正规式,表示集合L(r)。
- 示例
设={a,b},如下列出了
上的一些正规式和相应的正规集。
有限自动机
- 有限自动机分为两个:确定的有限自动机(DFA)和不确定的有限自动机(NFA)。
DFA是NFA的特例:对于每一个NFA,都可以转换为DFA。
- 区分:
区别 | DFA | NFA |
初态 | 有且只有一个初态 | 可以有多个初态(非空) |
终态 | 非空终态集 | 可空终态集 |
输入(弧上的标记) | 输入仅能为长度为1的单个字符 | 输入可以是字符或正规式。同一个字符可以出现在同状态的多条弧上 |
后继状态 | 若有后继状态,则后继状态是唯一的 | 后继状态不是唯一的 |
其他 | 易于程序 | 易于人工设计 |
- 正规式与有限自动机之间的转换
(1)有限自动机转换为正规式:
(2) 正规式转换为有限自动机:
语法分析方法
- 自上而下语法分析法: 最左推导,从左至右。给定文法G和源程序串r,从G的开始符号S出发,通过反复使用产生式P对句型中的非终结符进行替换(推导),逐步推导出r。
- 递归下降分析法:原理是利用函数之间的递归调用,模拟语法树自上而下的构造过程,是一种自上而下的语法分析方法。
- 自上而下语法分析方法:最右推导,从右至左。从给定的输入串r开始,不断寻找子串与文法G中某个产生式P的候选式进行匹配,并用P的左部代替(归纳)之,逐步规约到开始符号S。
- 移进-归约分析法:设置一个栈,将输入符号逐个移进栈中,栈顶形成某产生式P的右部时,就用左部去代替,称为归纳。这个思想时通过右部推导出左部,因此是自上而下语法分析的核心思想。
编译和解释:都是将高级语言翻译成计算机硬件认可的机器语言加以执行。
区别 | 编译 | 解释 |
目标代码 | 生成,优化 | 不生成 |
独立的可执行文件 | 生成 | 不生成,逐行边翻译边执行 |
执行效率 | 较快(翻译一次,多次运行) | 较慢(反复扫描源程序) |
占用内存 | 较少 | 较多 |
灵活性 | 较低 | 较高(反复扫描源程序) |
可移植性 | 较差 | 较高 |