软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础

目录

七、程序设计语言与语言处理程序基础

7.1编译过程

7.2文法的定义以及语法推导树

7.2.1文法

7.2.2语法推导树

7.3有限自动机与正规式

7.3.1有限自动机

7.3.2正规式 

7.4表达式

7.5函数调用(传值与传址)

7.6各种程序语言特点


七、程序设计语言与语言处理程序基础

7.1编译过程

解释型:在敲代码过程中及时提醒错误。

编译型:整段程序完成,编译运行后,才生成目标程序执行。

软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础_第1张图片

7.2文法的定义以及语法推导树

7.2.1文法

①文法定义

一个形式文法是一个有序四元组G=(V,T,S,P),其中:
1) V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。[该符号可以推出其他符号]

2)T:终结符。是语言的组成部分,是最终结果。V∩T=Φ
3)S:起始符。是语言的开始符号。
4)P:产生式。用终结符替代非终结符的规则。形如α→β

正则闭包∶A^{+}=A^{1}\cup A^{2}\cup A^{3}\cup ...\cup A^{n}\cup ...(也就是所有幂的组合)。

闭包:A^{*}=A^{0}\cup A^{+}(在正则闭包的基础上,加上A^{0}={ε})。

②文法类型

软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础_第2张图片

 

7.2.2语法推导树

一棵语法树应具有以下特征:

  1. 每个结点都有一个标记,此标记是V的一个符号;
  2. 根的标记是S;
  3. 若一结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在V_{N}中;
  4. 如果结点n的直接子孙,从左到右的次序是结点n1,n2,..nk,其标记分别是:A1,A2,…AK,那么A->A1,A2…AK,一定是P中的一个产生式。

软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础_第3张图片

{a,b}终结符,一般由小写字母表示

{S,A}非终结符,可推出其他符号

S起始符

P产生式

7.3有限自动机与正规式

7.3.1有限自动机

M=(S,Σ,δ,S0,Z)

1)S是一个有限集,每个元素为一个状态

2)Σ是一个有穷字母表,每个元素为一个输入字符

3)δ是转换函数:是一个单值对照

4)S0,属于S,是其唯一的初态

5)Z是一个终态集(可空)

有限状态自动机可以形象地用状态转换图表示,设有限状态自动机:

DFA= ({S,A,B,C,f},{1,0},δ,S,{f}),

其中:

6(S,0)=B,δ(S,1)=A,δ(A,0)=f,δ(A,1)=C,δ(B,0)=C,δ(B,1)= f,δ(C,0)=f,δ(C,1)=f

软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础_第4张图片

7.3.2正规式 

正规式是描述程序语言单词的表达式,对于字母在在Σ,其上的正规式及其表示的正规集可以递归定义如下。

  • ε是一个正规式,它表示集合L(ε)={ε}。
  • 若a是Σ上的字符,则a是一个正则式,它所表示的正规L(a)={a}。
  • 若正规式r和s分别表示正规集L(r)=L(s),则

(a)r|s是正规式,表示集合L(r)∪L(s);

(b) r·S是正规式,表示集合L(r)L(s);

(c)r*是正规式,表示集合(L(r))*;

(d) (r)是正规式,表示集合L(r)。

仅由有限次地使用上述三个步骤定义的表达式才是Σ上的正规式。由此可见,正规式要么为空,要么由字母、或、连接、闭包运算符组成。其中闭包运算符“*”且有最高的优先级,连接运算具有次高优先级,或运算符“|"具有最低优先级。

7.4表达式

前缀表达式(+ab)

中缀表达式(a+b)

后缀表达式(ab+)【左右根】

构造数时注意标点符号,括号决定了计算的先后顺序

例:表达式(a-b)*(c+5)的后缀式是ab-c5+*

软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础_第5张图片

 

7.5函数调用(传值与传址)

软考:软件设计师(中级)--学习笔记07程序设计语言与语言处理程序基础_第6张图片

传递方式

主要特点

传值调用

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

引用(传址)调用

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

7.6各种程序语言特点

1. Fortran语言(科学计算,执行效率高)

2. Pascal语言(为教学而开发的,表达能力强,Delphi )

3. C语言(指针操作能力强,高效)

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

5. C++语言(面向对象,高效)

6. Java语言(面向对象,中间代码,跨平台)

7. C#语言(面向对象,中间代码,.Net )

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

你可能感兴趣的:(算法)