软考软件设计师学习之第二章 程序设计语言基础

第二章 程序设计语言基础

概述

程序设计语言的分类

1.命令式和结构化程序设计语言:Fortran(公式翻译,用代码表示数学公式)、PASCAL、C语言等
面向对象的程序设计语言:Java、C++、C#等
函数式程序设计语言:lisp、scala等
逻辑型程序设计语言:Prolog
脚本语言:PHP、js、Python等

2.低级语言:面向机器的语言
高级语言:面向应用程序的语言

3.解释型语言:不产生目标程序、效率低、灵活性好、可移植性好
编译型语言:生成目标程序、效率高、可移植性差

语法分析阶段

源程序
词法分析
语法分析
语义分析
中间代码生成
代码优化
目标代码生成
目标代码

编译程序

1.词法分析阶段:输入源程序,对构成源程序的字符串进行扫描和分解, 识别出一个个的单词,删掉无用的信息,报告分析时的错误。
2.语法分析阶段:语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。通过 语法分析确定整个输入串是否构成一个 语法上正确的程序分析句子结构
主谓宾是否错误
注意:词法分析和语法分析本质上都是对源程序的结构进行分析
3.语义分析阶段:来检查源程序是否存在语义错误,并收集类型信息供后面的代码生成阶段使用。 分析句子含义
羊吃草 不能说成 草吃羊
语义分析分为静态分析和动态分析两个部分。
静态语义分析使用语法制导翻译
4.生成中间代码阶段:不依赖具体计算机,表现形式如下:
(1)后缀式(逆波兰式)
(2)树型表示
(3)三元式:X = (a+b)* (c+d)
(4)四元式

出错处理:

(1)静态错误
a.语法错误 单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误
b.静态语义错误:运算符与运算对象类型不符
(2)动态错误
程序运行时出现:变量取0做除数;引用数组下标越界

文法:?

文法G定义为一个四元组(VN,VT,P,S),其中,VN为非中介符集合,VT终结符集合;P是产生式结合;S成为识别符或开始符号,也是一个非终结符,至少要在一个产生式的左边出现。
G[S]:
S -> aA|bB
A -> bS|b
B -> aS|a

0型文法:短语文法、图灵机、递归枚举
1型文法:上下文有关文法
2型文法:上下文无关文法(广泛使用于语法规则)
3型文法:正规式(词法分析)

有限自动机

确定的有限自动机DFA 该状态机在任何一个状态,基于输入的字符都能做成一个确定的状态转换。
不确定的有限自动机NFA 该状态机在任何一个状态,基于输入字符不能做成一个确定的状态转换。这里分为两种状态1.对于一个输入,他有两个状态可以转换。2.存在空的情况,即不输入任何字符,NFA可以从一个状态转换到另一个状态。

正规式

Ab:字符串ab构成的集合
a|b:字符串a、b构成的集合
a*:由0个或多个a构成的字符串集合
(a|b):所有字符a和b构成的字符串集合
a(a|b)
: 以a为首字母的a、b字符串的集合
(a|b)*abb: 以abb结尾的a、b字符串的集合

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值