中级职称软考设计师笔记之【程序设计语言与语言处理程序基础】

本文详细介绍了程序设计语言的基础,包括编译与解释的过程、文法的分类(0型到3型文法)、有限自动机的概念、正规式及其应用,以及表达式、传值与传址的区别。此外,还讨论了不同程序语言的特点,如Fortran、Pascal、C++和Java等。
摘要由CSDN通过智能技术生成

目录

程序设计语言与语言处理程序基础——编译与解释——编译过程

程序设计语言与语言处理程序基础——文法

程序设计语言与语言处理程序基础——文法——语法推导树

程序设计语言与语言处理程序基础——有限自动机

程序设计语言与语言处理程序基础——正规式

程序设计语言与语言处理程序基础——表达式

程序设计语言与语言处理程序基础——传值与传址

程序设计语言与语言处理程序基础——多种程序语言特点


程序设计语言与语言处理程序基础——编译与解释——编译过程

程序设计语言与语言处理程序基础——文法

一个形式文法是一个有序四元组 G = ( V,T,S,P ) ,其中:

  1. V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符。
  2. T:终结符。是语言的组成部分,是最终结果。V\cap T= \oslash 
  3. S:起始符。是语言的开始符号。
  4. P:产生式。用终结符替代非终结符的郭泽。形如 \alpha \rightarrow \beta

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

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

类型别称说明对应自动机
0型短语文法

G 的每条产生式 \alpha \rightarrow \beta 满足 \alpha 属于 V 的正则闭包,且至少含有一个非终结符,而 \beta  属于 V 的闭包。 

图灵机
1型上下文有关文法G 的任何产生式 \alpha \rightarrow \beta 满足 \mid \alpha \mid < = \mid \beta \mid ,仅仅 S\rightarrow _{\varepsilon} 例外,但 S 不得出现在任何产生式右部。线性界限自动机
2型上下文无关文法G 的任何产生式 A \rightarrow \beta ,A为非终结符, \beta 为 V 的闭包。非确定的下推自动机
3型正规文法G 的任何产生式 A \rightarrow \alpha B 或A \rightarrow\alpha ,\alpha 属于非终结符的闭包,A、B都属于非终结符有限自动机

程序设计语言与语言处理程序基础——文法——语法推导树

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

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

程序设计语言与语言处理程序基础——有限自动机

M=(S,\sum ,\delta ,S0,Z) 

  1. S 是一个有限集,每个元素为一个状态。
  2. \sum 是一个有穷字母表,每个元素为一个输入字符。
  3. \delta 是转换函数,是一个单值对照。
  4. S0,属于S,是其唯一的初态。
  5. Z是一个终态集(可空)。

有限状态自动机可以形象的用状态转换图表示,设有限状态自动机:DFA=(\left \{ S,A,B,C,f \right \},\left \{1,0 \right \},\delta ,S,\left \{ f \right \}) ,

其中:\delta (S,0)=B ,\delta (S,1)=A\delta (A,0)=f\delta (A,1)=C\delta (B,0)=C\delta (B,1)=f\delta (C,0)=f\delta (C,1)=f

答:C.0101

解释:从初态A除法,输入一个0,到达B,再输入一个1,到达C,再输入一个0,到达B,再输入一个1,到达C终态。

程序设计语言与语言处理程序基础——正规式

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

  1. \varepsilon 是一个正规式,它表示集合 L(\varepsilon )=\left \{ \varepsilon \right \} 。
  2. 若 a 是 \sum 上的字符,则 a 是一个正规式,它所表示的正规 L(a )=\left \{ a \right \} 。
  3. 若正规式 r 和 s 分别表示正规集 L(r )=\left \{ s \right \} ,则:
    1. r\mid s 是正规式,表示集合 L(r )\cup \left \{ s \right \} 。
    2. r\cdot s 是正规式,表示集合 L(r ) \left \{ s \right \} 。
    3. r* 是正规式,表示集合 (L(r))* 。
    4. (r) 是正规式,表示集合 L(r) 。

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

答:

(1):D.babba

(2):C.(ab|ba)*

解释:

(1):S解析bB,其中bB中的B可以解析成aS或a,第一步解析成ba、第二步解析成baS或a,baS可以解析成baaA或babB。

(2):因为ab或ba可以生成ab的串,也可以生成ba的串。

程序设计语言与语言处理程序基础——表达式

前缀表达式:( + a b )

中缀表达式:( a + b )

后缀表达式:( a b + )

答:D. a b - c 5 +

解释:后缀表达式先算中间结点的左结点,再右结点,再中间结点,然后再父级结点。

程序设计语言与语言处理程序基础——传值与传址

 

传递方式主要特点
传值调用形参取的是实参的值,形参的改变不会导致调用点所传的实参的值发生改变。
引用(传址)调用形参取的是实参的地址,即相当于实参存储单元的地址引用,因此其值的改变同时就改变了实参的值。
/*  传值的情况  */
void swap(int x,int y){  //形参
    int t;
    t=x;
    x=y;
    y=t;
    printf("%d %d,",x,y)
};
main(){
    int a=3,b=4;
    swap(a,b);  //实参
    printf("%d %d",a,b);
}
输出结果是:4,3,3,4
/*  传址的情况  */
void swap(int *x,int *y){  //形参
    int *t;
    *t=*x;
    *x=*y;
    *y=*t;
    printf("%d %d,",*x,*y)
};
main(){
    int a=3,b=4;
    swap(&a,&b);  //实参
    printf("%d %d",a,b);
}
输出结果是:4,3,4,3

 传值的情况:

传址的情况:

程序设计语言与语言处理程序基础——多种程序语言特点

  1. Fortran语言科学计算,执行效率高)。
  2. Pascal语言(为教学开发的,表达能力强,衍生出了Delphi语言)。
  3. C语言(指针操作能力强,高效)。
  4. Lisp语言(函数式程序语言,符号处理,人工智能)。
  5. C++语言面向对象高效)。
  6. Java语言(面向对象,中间代码,跨平台)。
  7. C#语言(面向对象,中间代码,.Net,跨平台)。
  8. Prolog语言逻辑推理,简洁性,表达能力,数据库和专家系统)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vin Cente

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值