赞
踩
计算机硬件只能识别由
0
、
1
0、1
0、1组成的机器指令序列,即机器指令程序,因此机器指令是最基本的计算机语言。缺点:用机器语言进行程序设计时效率很低,程序的可读性很差,也难以修改和维护。
低级语言:机器语言和汇编语言【汇编指令【用符号表示的指令】的集合】。
高级语言:功能更强、抽象级别更高的语言以支持程序设计,面向各类应用的程序设计语言,与人类使用的自然语言比较接近。常见的有:Java、C、C++、PHP、Python、Delphi、PASCAL等,提高了程序设计的效率。
语言之间的翻译形式有多种,基本方式为汇编、解释和编译。用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。
解释程序(解释器):将高级语言翻译成计算机硬件认可的机器语言加以执行,它或者直接解释执行源程序,或者将源程序翻译成某种中间代码后再加以执行,翻译源程序时不生成独立的目标程序,可以逐条解释执行,用于调试模式,可以控制源程序,因为还需要控制程序,因此执行速度慢,效率低
。
编译程序(编译器):将高级语言翻译成计算机硬件认可的机器语言加以执行,翻译成目标语言程序,生成独立的可执行文件,直接运行,运行时无法控制源程序,效率高
。
语法:程序设计语言的语法可用形式语言进行描述。
语义:程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语
义。
语用:表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。
语言的实现则有语境【理解和实现程序设计语言的环境,包括编译环境和运行环境】问题。
若一种程序设计语言不依赖于机器硬件,则称为高级语言;若程序设计语言能够应用于范围广泛的问题求解过程中,则称为通用的程序设计语言。
科学计算
,执行效率高
。为教学而开发的
,表达能力强
。指针操作能力强
,高效
。面向对象
的程序设计语言,高效
。面向对象
的、运行于.NET Framework的高级程序设计语言,相对于C++,这个语言在许多方面进行了限制和增强,高效
。人工智能
而设计的语言,是第一个声明式系内函数式程序设计语言
,采用抽象数据列表与递归作符号演算
来衍生人工智能。面向对象
,中间代码
,跨平台
。逻辑型程序设计语言
,语法结构简单
,但描述能力很强
。指一种程序设计语言的数据类型。
指明语言允许的数据传输方式,如赋值处理、数据的输入和输出等。
函数是程序模块的主要成分,它是一段具有独立功能的程序。
一类系统软件的总称,主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。
为特定的计算机设计的面向机器的符号化的程序设计语言。用汇编语言编写的程序称为汇编语言源程序。
功能是将用汇编语言编写的源程序翻译成机器指令程序。汇编程序的基本工作包括将每一条可执行汇编语句转换成对应的机器指令,处理源程序中出现的伪指令。由于汇编指令中形成操作数地址的部分可能出现后面才会定义的符号,所以汇编程序一般需要两次扫描源程序才能完成翻译过程。
编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言或机
器语言)。编译程序的工作过程可以分为6 源程序 个阶段,在实际的编译器词法分析中可能会将其中的某些阶段结合在一起进行处理。
语言中具有独立含义的最小语法单位是符号(单词)词法分析的任务是把构成源程序的字符串转换成单词符号序列。词法规则可用 3 3 3 型文法(正规文法)或正规表达式描述,它产生的集合是语言基本字符集 ∑ ∑ ∑ (字母表)上的字符串的一个子集,称为正规集。
下图所示为一个有限自动机(A是初态、C是终态),该自动机所识别的字符串的特点是:C
A. 必须以 11 结尾的 0、1 串 B. 必须以 00 结尾的 0、1 串
C. 必须以 01 结尾的 0、1 串 D. 必须以 10 结尾的 0、1 串
有限自动机识别的是从初态到终态的字符串,也即从 A 到 C 的字符串,题目中考察以什么字符串结尾,因此只需要查看终态的输入即可,C 只能输入 1,因此最后一个字符必然是 1,在此基础上,反推到 B,只能输入 0,因此倒数第二个必然为 0,可知以 01 结尾的 0、1 串。
词法分析器的一般步骤:
任务是根据语言的语法规则分析单词串是否构成短语和句子,同时检查和处理程序中的语法错误。
优化:对程序进行等价变换,使得从变换后的程序能生成更有效的目标代码。
等价:指不改变程序的运行结果;
有效:指目标代码的运行时间较短,占用的存储空间较少。
优化可在编译的各个阶段进行。最主要的优化是在目标代码生成以前对中间代码进行的,这类优化不依赖于具体的计算机。目标代码的生成由代码生成器实现。代码生成器以经过语义分析或优化后的中间代码为输入,以特定的机器语言或汇编代码为输出。
是另一种语言处理程序,在词法、语法和语义分析方面与编译程序的工作原理基本相同,但是在运行用户程序时,它直接执行源程序或源程序的中间表示形式。因此,解释程序不产生源程序的目标程序,这是它和编译程序的主要区别。
解释程序也可以先将源程序翻译成某种中间代码形式,然后对中间代码进行解释来实现用户程序的运行。通常,在中间代码和高级语言的语句间存在一一对应的关系。
前缀表达式 | 中缀表达式 | 后缀表达式 |
---|---|---|
+ 2 4 | 2 + 4 | 2 4 + |
+ 2 * 4 6 | 2 + 4 * 6 | 2 4 6 * + |
+ 2 * - 6 4 8 | 2 + (6 - 4)* 8 | 2 6 4 - 8 * + |
是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在前面,操作数写在后面。
中缀表达式: a + b ∗ c − ( d + e ) a + b * c - ( d + e ) a+b∗c−(d+e),转化为前缀表达式
① 按照运算符的优先级对所有的运算单位加括号, 式子变成: ( ( a + ( b ∗ c ) ) − ( d + e ) ) ) ( ( a + ( b * c ) ) - ( d + e ) )) ((a+(b∗c))−(d+e)))
② 把运算符号移动到对应的括号前面,式子变成: − ( + ( a ∗ ( b c ) ) + ( d e ) ) - ( + ( a * ( b c ) ) + ( d e ) ) −(+(a∗(bc))+(de))
③ 把括号去掉,得到前缀表达式: − - − + + + a a a ∗ * ∗ b b b c c c + + + d d d e e e
首先将中缀表达式转换为表达式树,然后先序遍历(根左右)表达式树,所得结果就是前缀表达式。
将中缀表达式 1 + ( 2 + 3 ) ∗ 4 – 5 1 + ( 2 + 3)* 4 – 5 1+(2+3)∗4–5 转化为表达式树的方法:表达式树的树叶是操作数,而其他节点为操作符,根结点为优先级最低且靠右的操作符,圆括号不包括:
所以前缀表达式为: − - − + + + 1 1 1 ∗ * ∗ + + + 2 2 2 3 3 3 4 4 4 5 5 5
是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间,是人们常用的算术表示方法。
将前缀表达式: − - − + + + a a a ∗ * ∗ b b b c c c + + + d d d e e e,转化为中缀表达式
从后往前遇到运算符,将其与后面两个运算数结合,加上括号,当成新的运算数,变成: ( − ( + a ( ∗ b c ) ) ( + d e ) ) ( - ( + a ( * b c ) ) ( + d e ) ) (−(+a(∗bc))(+de))
将运算符加在括号内运算数中间,变成: ( ( a + ( b ∗ c ) ) − ( d + e ) ) ( ( a + ( b * c ) ) - ( d + e ) ) ((a+(b∗c))−(d+e))
去掉部分括号(最后去掉的是不影响运算式含义的多余括号): a + b ∗ c − ( d + e ) a + b * c - ( d + e ) a+b∗c−(d+e)
将后缀表达式: a a a b b b c c c ∗ * ∗ + + + d d d e e e + + + − - −,转化为中缀表达式
从前往后遇到运算符,将其与前面两个运算数结合,加上括号,当成新的运算数变成: ( ( a ( b c ∗ ) + ) ( d e + ) − ) ( ( a ( b c * ) + ) ( d e + ) - ) ((a(bc∗)+)(de+)−)
将运算符加在括号内运算数中间,变成: ( ( a ( b c ∗ ) + ) ( d e + ) − ) ( ( a ( b c * ) + ) ( d e + ) - ) ((a(bc∗)+)(de+)−)
去掉部分括号(最后去掉的是不影响运算式含义的多余括号): a + b ∗ c − ( d + e ) a + b * c - ( d + e ) a+b∗c−(d+e)
是一种没有括号的算术表达式,与中缀表达式不同的是,其将运算符写在运算对象的后面。
中缀表达式: a + b ∗ c − ( d + e ) a + b * c - ( d + e ) a+b∗c−(d+e),转化为后缀表达式
① 按照运算符的优先级对所有的运算单位加括号, 式子变成: ( ( a + ( b ∗ c ) ) − ( d + e ) ) ) ( ( a + ( b * c ) ) - ( d + e ) )) ((a+(b∗c))−(d+e)))
② 把运算符号移动到对应的括号后面,式子变成: ( ( a ( b c ) ∗ ) + ( d e ) + ) − ( ( a ( b c ) * ) + ( d e ) + ) - ((a(bc)∗)+(de)+)−
③ 把括号去掉,得到后缀表达式: a a a b b b c c c ∗ * ∗ + + + d d d e e e + + + − - −
首先将中缀表达式转换为表达式树,然后后序遍历(左右根)表达式树,所得结果就是后缀表达式。
将中缀表达式 1 + ( 2 + 3 ) ∗ 4 – 5 1 + ( 2 + 3)* 4 – 5 1+(2+3)∗4–5 转化为表达式树的方法:表达式树的树叶是操作数,而其他节点为操作符,根结点为优先级最低且靠右的操作符,圆括号不包括:
所以后缀表达式为: 1 1 1 2 2 2 3 3 3 + + + 4 4 4 ∗ * ∗ + + + 5 5 5 – – –
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。