软考(中级)软件设计师核心笔记(10)设计语言与程序基础

一、概念

低级语言:机器语言(0-1二进制)、汇编语言

高级语言:开发语言

1、编译与解释

编译型语言

解释型语言

共同点

语言

高级程序语言

过程

有词法分析,语法分析,语义分析的过程

不同点

翻译程序

编译器

解释器

是否生成目标代码

会生成

不会生成

目标程序直接运行

目标程序直接执行

边解释边执行

翻译程序参与执行

编译器不参与执行

解释器参与执行

执行效率

效率高

效率低

灵活性与可移植性

灵活性与可移植性差

灵活性与可移植性高

2、特点

1.Fortran(早期):科学计算,执行效率高

2.Pascal:为教学而开发,表达能力强

3.C:编译型,指针操作能力强,高效

4.Lisp:函数式程序语言,符号处理,人工智能

5.C++:面向对象,高效

6.Java:面向对象,中间代码,跨平台

7.C#:面向对象,中间代码,.Net

8.Prolog:逻辑推理,简洁性,表达能力,数据库和专家系统

9.Python:面向对象,解释性,胶水语言

3、基本成分

(1):常见的数据类型

1.数字数据类型

2.布尔类型

3.字符类型

4.枚举类型

5.指针类型

(2):控制结构

顺序结构、选择结构(if、else)、循环结构(for ···)

4、函数调用

传递方式

主要特点

传值调用

形参取得是实参的值,形参的改变不会导致调用点所传的实参的值发生改变

传址调用

形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时,就改变了实参的值

引用调用

在程序调用过程中,系统用 栈 实现嵌套调用(递归调用)函数的正确选择(入栈、出栈)


二、编译原理

1、编译过程

1.词法分析(检查字符)

从左到右逐个扫描源程序中的字符,识别其中如关键字、标识符、常数、运算符及分隔符

输入源程序,输出记号流

2.语法分析(检查结构)

根据语法规则,将单词符号分解成各类语法单位,并分析源程序是否有语法上的错误。包括语言结构出错,if ··· end if 不匹配,缺少分号、括号不匹配,表达式缺少操作数等,输入记号流

自顶向下(自上而下)分析法

字底向上(移进-规约)分析法

输入记号流,输出语法树(分析树)

3.语义分析(检查用途)

进行类型分析和检查,主要检查源程序是否存在静态语义错误。包括运算符合运算类型不符合(如取余时用浮点数)

动态错误

发生在程序运行时

动态语义错误

选入死循环、除0、角标越界、空指针等

静态错误

发生在编译时

分为语法错误和静态语义错误

语法错误:单词错误、符号错误、表达式缺少操作数,括号不匹配等有关语言结构上的错误

静态语义错误:运算符和运算对象类型不合法

2、文法

(1):概念

一个形式文法是一个有序四元组G = {V, T, S, P},流程为S =》P =》V(可以不经过)=》T

V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符(一般是大写字母)

T:终结符。语言组成部分,是最终结果(一般是小写字母)

S:启始符。是语言的开发符号

P:产生式。用终结符替换非终结符的规则

正则闭包:A+(A1开始)

闭包:A*(A0开始)

类型

别称

对应自动机

0型

短语文法

图灵机

1型

上下文有关文法

线性界线自动机

2型

上下文无关文法(程序设计语言大多数语法现象可用其描述)

非确定的下推自动机

3型

正规文法

有限自动机

(2):语法推导树

1.特征

>每个节点都有一个标记,此标记是V的一个符号

>根的标记是S

>若一节点n至少有一个他自己除外的子节点,并且有标记A,则A肯定在Vn中

>如果节点n的直接子节点,从左到右的次序是节点n1,n2,······,nk,其标记A1,A2,······,Ak,那么此标记一定是P中的一个产生式

设:文法G = ({a, b}, {S, A}, S, P)

其中推导式:S => aAS|a,A => SbA|SS|ba(|表示或),由此可以得出 1.S => aAS,2.S => a,3.A => SbA,4.A =>SS,5.A => ba

构造aabAa推导树:

第一步:已知S位起始符,所以从起始符开始,寻找非终结符(字母大写)的推导式开始推导(即:S => aAS)

第二步:选择A推导式(3.A => SbA,4.A =>SS,5.A => ba),已知推导式第二个字母非终结符(aabAa小写a),所以应该选择3号推导式A => SbA,再由推导式(SbA)中S推导出a

第三步:此时已推导出推导式的前四个字母(aabA),最后一个a用S推导式推导出a即可

2.例题

由上述推导式可以分解出:E => T、E => E+T、T => F、T => T*F、F => -F、F => N、N => 0~9

解:思路,其中加减等符号也算一位符号

A:两减号--在一起没有可以推导的表达式,所以排除

B:E+T => E+T*F => E+-F*F => E+-F*N,符合文法

C:未发现()符号,所以排除

D:E => T => T*F 至此无法再往下推导,所以排除

3、正规式与正规集

正规集:正规文法字符串的集合

正规式:正规文法的集合规律表达式

正规式

正规集

举例

ab

字符串ab构成集合

{ab}

a|b

字符串a、b构成集合

{a,b}

a*

由0或多个a构成的集合

{空, a, aa, aaa, ······, a(n个a)}

(a|b)*

所有字符a和b构成的集合

{空, a, b, ab, aab, baa, aba, ······}

a(a|b)*

以a为首字母的a、b字符串集合

{a, aa, aab, ab, abb, ······}

(a|b)*abb

以abb结尾的a、b字符串集合

{abb, aabb, babb, ababb, bababb, ······}

4、有限自动机

状态转换机,验证单词

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

5、后缀表达式

前缀:+ab

中缀:a+b

后缀(逆波兰式):ab+

最顶部在最上方,利用栈进行求值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值