软考知识点---13语言处理程序基础

💡大纲

  • 多种程序语言的特点
  • 编译程序与解释程序
  • 文法
  • 正规式
  • 有限自动机

一、程序设计语言概述

(一)基本概念

💡从低级语言(偏向于机器)到高级语言(偏向于人类)

1、机器语言:0、1字符

2、汇编语言:操作码、操作数

3、高级语言:需要编译解释为低级语言供计算机识别

(二)编译程序与解释程序

💡语言处理程序:汇编程序,解释程序、编译程序

1、源程序

👉某种高级语言或汇编语言编写的程序

👉汇编程序用于解释汇编语言

👉解释程序编译程序用于解释高级语言

2、编译程序

👉编译程序将高级语言转换为机器指令供计算机执行

3、解释程序

👉直接解释执行源程序

(三)程序设计语言的定义

💡程序设计语言都涉及语法语义语用三个方面

二、程序设计语言的分类和特点

(一)命令式和结构化程序设计语言(如C、FORTRAN、Pascal等)

1、说明

👉以C为例,面向过程的语言

2、特点

  • 用从上往下逐步精化的方法编程
  • 按模块组装的方法编程

  • 程序只包含顺序、选择分支和循环结构,而且每种构造只允许单入口和单出口

(二)面向对象的程序设计语言(如C++、Java等)

1、说明

👉提出了类和对象的概念,是基于对象的语言

2、特点

  • 封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信写的类或者对象操作,对不可信的进行信息隐藏
  • 继承

  • 多态

(三)函数式程序设计语言(如LISP等)

👉函数是一种对应规则,它使定义域中每个元素和值域中唯一的元素相对应

(四)逻辑型程序设计语言(如PROLOG等)

👉以形式逻辑为基础的语言,语句分为事实、规则和问题这三类 

(五)各种程序语言的特点总结

  • Fortran语言:科学计算,执行效率高

  • Pascal语言:为教学而开发的,表达能力强,Delphi

  • C语言:指针操作能力强,高效

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

  • C++语言:面向对象,高效

  • Java语言:面向对象,中间代码(解释语言),跨平台

  • C#语言:面向对象,中间代码,.Net

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

  • Python语言:跨平台,结合解释、编译、互动性和面向对象,脚本语言 

三、 语言处理程序基础

(一)汇编程序基本原理

💡汇编语言源程序一个程序中可以有三类语句:指令语句、伪指令语句和宏指令语句

👉指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型,产生机器代码

👉伪指令语句经过汇编后不产生机器代码

👉宏指令语句就是宏的引用

(二)编译程序基本原理

1、编译过程

2、各部分说明 

  • 词法分析:单词的规则
  • 语法分析:语法规则
  • 语义分析:主要是进行类型分析和检查
  • 中间代码生成:常见的中间代码表达式有后缀式(逆波兰式)、树型表示、三元式和四元式
  • 代码优化
  • 目标代码生成
  • 符号表管理
  • 出错管理

3、关于中间代码

👉后缀表达式(逆波兰式)

  • 就是把操作数写在前面,把运算符写在后面(还原是就近原则)

  • 如:a+b(中缀表达式)写成逆波兰式为:(ab+);a+b*c写成逆波兰式为:a+(bc*)-->(abc*+)

  • 如:(a+b)*c-->(ab+)*c-->(ab+)c*-->ab+c*

  • 除后缀式外还有:前缀表达式,中缀表达式

👉树形表示(考)

  • 运算量和运算符写成树型表示

  • 如:a*b+c*d写成树型表示如右图所示(采用树的中序遍历)

  • 如:a+b*c+d

 

👉三元式

  • 由三部分组成:(运算符,操作数1,操作数2)

  • 如:x=(a+b)*(c+d);

  • A(+,a,b)  B(+,c,d) C(*,A,B) D(=,C,x),其中ABCD为间接码,三元式之间的联系是通过指示器实现的

👉四元式

  • 由四部分组成:(运算符,操作数1,操作数2,运算结果)

  • 如:x=(a+b)*(c+d);

  • (+,a,b,A)  (+,c,d,B)  (*,A,B,C)  (=,C,x,D),其中ABCD为编译程序引进的或者是用户自己定义的临时变量,四元式的联系是通过临时变量实现的

📑 试题:下图为一个表达式的语法树,此表达式的后缀形式为( A )。

x*(5+y)/a-b = x*(5y+)/a-b = x5y+*/a-b = x5y+*a/-b = x5y+*a/b-

A、x5y+*a/b-  Bx5yab*+/-  C、-/*x+5yab  Dx5*y+a/b-

(三)解释程序基本原理

  • 解释程序在词法、语法和语义分析方面与编译程序的工作原理基本相同
  • 它和编译程序的主要区别是运行用户程序时,它直接执行源程序或源程序的内部形式,不产生源程序的目标程序,也就是解释程序写完一句代码就会马上处理完成
  • 如A所示

(四)编译和解释翻译方式可以从以下几个方面进行比较

  • 效率。编译方式比解释翻译方式可能取得更高的效率。解释方式运行程序时,可能需要反复扫描源程序。每一次进行类型检查,可能需要重新进行存储分配,从而降低了程序的运行速度,并且运行时需要更多内存

  • 灵活性。由于解释程序需要反复检查源程序,这也使得解释程序比编译方式更灵活。当解释器直接运行源程序时,在运行中修改程序中的语句或修改程序中的错误就成为可能,解释程序会根据你的修改而改变运行后的结果,并且它可以对错误进行更精确的定位

  • 可移植性。源程序是由解释器控制来运行的,可以提前将解释器安装在不同的机器上,从而使得在新环境下无须修改源程序就可以使之运行。而编译方式下则需要针对新机器重新生成源程序的目标代码才能运行。

四、 文法与正规式

(一)文法

1、定义

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

  • V:非终结符。不是语言组成部分,不是最终结果,可理解为占位符
  • T:终结符。是语言的组成部分,是最终结果。(V∩T=Ø
  • S:起始符。是语言的开始符号
  • P产生式。用终结符替代非终结符的规则。(如α→β

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

2、语法推导树

📑有一文法G=({a,b},{S,A},S,P),其中:S→aAS|a;  A→SbA|SS|ba。请构造句型aabAa的推导树。

🗣️语法树如右图所示:依文法G得:S→aAS;S→a;A→SS;A→ba;A→SbA

3、文法的类型

 (二)正则式

1、词法分析器

💡正规表达式描述词法规则,它产生的集合是语言基本字符集Σ(字母表)上的字符串的一个子集,称为正规集

 2、Σ={a,b},在下表中列出了Σ上的一些正规式和相应的正规集

👉运算符“|”“·”“*”分别称为连接和闭包。在正规式的书写中,连接运算符“·”可省略

👉运算符的优先级从高到低顺序排列为“*”“·”“|”

👉如果两个正规式表示的正规集相同,则认为二者等价。记作A=B

 📑例题1下面文法G[S]它无法识别(1),此文法对应正规式为(2)

  G[S]:

          S→aA|bB

          A→bS|b

          B→aS|a

(1)A. ababab  B. bababa  C. abbaab  D. babba

(2)A. (a|b)*  B. (ab)C. (ab|ba)*    D. (ab)*b*

 📑例题2对于以下编号为①,②,③的正规式,正确的说法是(  )。

(aa*|ab)*b 

(a|b)*b 

((a|b)*|aa)*b

  A. 正则式①,②等价          B. 正则式①,③等价         C. 正则式②,③等价          D.正则式①,②,③互不等价

🗣️

①(aa*|ab)*b  表示以a开头,以b结尾的正规集,或者只有一个b

(a|b)*b表示以ab开头,以b结尾的正规集,或者只有一个b

③((a|b)*|aa)*b 由于(a|b)*中已经包含了aa,所以合并同类项为(a|b)*b 表示以ab开头,以b结尾的正规集

 五、有限自动机

⚠️有限自动机是一种识别装置的抽象概念,它能准确地识别正规集

👉有限自动机分为两类:确定有限自动机和不确定有限自动机

  • 确定有限自动机(DFA):自动机的每个状态都有对字母表中所有符号的转移

  • 非确定有限自动机(NFA):自动机的状态对字母中的每个符号可以有也可以没有转移,对一个符号甚至可以有多个转移

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

📑设有限状态自动机:DFA=({S0,S1,S2,S3},(a,b),δ,S0,{S3})其中:δ(S0,a)=S1δ(S0,b)=S2δ(S1,a)=S3δ(S1,b)=S2δ(S2,a)=S1δ(S2,b)=S3δ(S3,a)=S3

📑例题1:某确定的有限自动机(DFA)的状态转换图如下图所示(A是初态,C是终态),则该DFA能识别1

A.aabb          B.abab         C.baba        D.abba(好像是可以,但是结尾要是终态)

📑例题2:某个非确定的有限自动机(NFA)的状态转换图如下图所示(q0既是初态也是终态)。以下关于该NFA的叙述中,正确的是(  ) 。

A.其可识别的0、1序列的长度为偶数 10011

B.其可识别的0、1序列中0与1的个数相同 1101

C.其可识别的非空0、1序列中开头和结尾字符都是0 0不是终态

D.其可识别的非空0、1序列中结尾字符是1

 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

盾山狂热粉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值