定义
- 计算机语言是指用于人与计算机之间交流的一种语言,是人与计算机之间传递信息的媒介。
- 计算机语言主要由一套指令组成,而这种指令一般包括:表达式、流程控制和集合三大部分内容。
- 表达式包括:变量、常量、字面量和运算符
- 流程控制包括:分支、循环、函数和异常
- 集合包括:字符串、数组、散列表等数据结构
计算机语言的分类
计算机语言分为机器语言、汇编语言、高级语言、建模语言、形式化规格语言。
- 机器语言
- 机器语言是最早使用的程序设计语言,是第一代计算机语言。
- 机器语言围绕的中心是指令,每条机器指令就是一个0,1串。指令的集合称为指令系统,也就是机器语言。
- 汇编语言
- 用一些简洁的英文字母,符号串来替代一个特定指令的二进制串,这种语言称为汇编语言,即第二代计算机语言。
- 汇编语言的语句格式包括:指令语句,伪指令语句,宏指令语句。
- 高级语言:
- 高级语言是一类语言的统称,它比汇编语言更贴近于人类使用的语言,易于理解、记忆和使用。
- 建模语言
- 1997年10月17日,OMG 采纳UML1.1作为面向对象技术的标准建模语言。
- UML 是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它的作用不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程。
- 形式化规格语言
- Z语言:建立于集合论和数理逻辑的基础上。集合论包括标准的集合运算符、笛卡尔积和幂集;数理逻辑包括一阶谓词演算,二者合二为一,形成了易学易用的数学语言。
程序设计语言的分类
类型 | 示例 |
命令式和结构化程序设计语言(过程式) | Fortran,PASCAL,C语言 |
面向对象的程序设计语言 | java,C++,C# |
函数式程序设计语言 | lisp,scala |
逻辑型程序设计语言 | Prolog |
脚本语言 | PHP,js,Python |
- 程序设计语言可根据其编译方式分为解释型语言和编译型语言。
- 解释型语言:解释型语言在执行时,是逐行读取、解释并执行的。解释器读取代码的每一行,将其转换为机器代码,然后执行。这意味着解释型语言不需要预先编译即可执行。常见的解释型语言包括 Python、JavaScript 和 Ruby。
- 特点:不产生目标程序、效率低、灵活性好、可移植性高
- 编译型:编译型语言在执行前需要经过一个编译过程,将整个代码转换成机器可读的指令。这个过程通常由编译器完成。编译后的代码可以直接由计算机的处理器执行,因此通常执行速度更快。常见的编译型语言包括 C、C++ 和 Java。
- 特点:生成目标程序、效率高、灵活性差、可移植性差
- 解释型语言:解释型语言在执行时,是逐行读取、解释并执行的。解释器读取代码的每一行,将其转换为机器代码,然后执行。这意味着解释型语言不需要预先编译即可执行。常见的解释型语言包括 Python、JavaScript 和 Ruby。
编译程序的过程
编译程序的过程包括:词法分析、语法分析、语义分析、生成中间代码、中间代码优化、目标代码生成(可选)
- 词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词,删掉无用的信息,报告分析时的错误;
- 语法分析:语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位。通过语法分析确定整个输入串是否构成一个语法上正确的程序
- 语义分析:主要检查源程序是否存在语义上的错误,并收集类型信息供后面的代码生成阶段使用。语义分析分为静态分析和动态分析两个部分。静态语义分析使用语法指导翻译。
- 中间代码:不依赖计算机,有四种表现形式
- 后缀式,(逆波兰式)
- 树型表示
- 三元式(三地址码)
- 四元式 (四地址码)
- 出错处理
- 静态错误:编译时出现语法错误,静态语义错误(运算符与运算对象类型不合法)
- 动态错误:程序运行时出现 (变量取0做除数,数组下标越界等)
文法
文法 G 定义为一个四元组(VN,VT,P,S),
- VN: 非终结符集合 ;指在文法中可以代替其他符号的符号集合
- VT: 终结符集合 :指在文法中不能再分解成其他符号的符号集合
- P: 产生式集: 是指在文法中定义的语言规则集合
- S:识别符或开始符号,:在文法中作为句子开头的符号,也是一个非终结符,至少要在一条产生式的左边出现
文法类型 | 示例 |
0型文法 | 短语文法,图灵机,递归枚举 |
1型文法 | 上下文有关文法 |
2型文法 | 上下文无关文法 (语法规则) |
3型文法 | 正规式 (词法分析) |
- 0型文法:0型文法也称为无限制文法或短语结构文法,是最一般形式的文法。在这种文法中,生成规则没有限制。任何字母都可以替换为任何字符串,包括空字符串。
- 上下文有关文法:生成规则的形式是A → β,其中A是一个非终结符号,β是一个由终结符号和非终结符号组成的字符串。此外,A必须在β中出现。
- 上下文无关文法:形式语言理论中一种重要的变换文法,用来描述上下文无关语言,在乔姆斯基分层中称为2型文法。由于程序设计语言的语法基本上都是上下文无关文法,因此应用十分广泛。
- 正规式
-
正规式
正规集
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字符串的集合
-
有限自动机
- 确定的有限自动机 DFA:该状态机在任何一个状态,基于输入的字符都能做成一个确定的状态转换
- 不确定的有限自动机 NFA:该状态机在任何一个状态,基于输入的字符都不能做成一个确定的状态转换;1,对于一个输入,它有两种状态可以转换;2,存在空的情况,既没有任何字符输入的情况下,NFA可以从一个状态迁移到另一个状态;
常见高级语言简介
- Fortran(公式翻译)是最早的高级编程语言之一,于1957年由IBM开发,适用于科学计算和数值分析。
- Lisp是第二古老的编程语言,于1958年由John McCarthy设计。支持宏系统,高度可扩展。代码即数据(Code as Data)的理念。主要用于人工智能研究。
- Pascal是由Niklaus Wirth在1970年设计的,旨在提供一种用于教育目的的编程语言。强类型语言,有助于减少错误。
- Prolog是1972年开发的一种逻辑编程语言。基于事实和规则进行逻辑推演。自动内存管理。主要用于人工智能和专家系统。
- C语言于1972年由Dennis Ritchie在贝尔实验室开发,用于Unix操作系统。高效、灵活、功能强大。
- C++是由Bjarne Stroustrup在1983年开发的,是C语言的超集。支持面向对象、过程化、泛型编程。高效、功能丰富。广泛用于系统软件、游戏开发、实时系统。
- PHP是一种开源的服务器端脚本语言,由Rasmus Lerdorf于1994年创建。易于学习,广泛用于网页开发。大量的内置函数库。
- JavaScript是一种轻量级的编程语言,由Netscape于1995年开发。主要用于网页前端开发。支持事件驱动、函数式编程。
- Java由Sun Microsystems于1995年推出,是一种面向对象的编程语言。“一次编写,到处运行”,强大的标准库。广泛用于企业级应用、安卓应用开发。
- Python由Guido van Rossum于1989年圣诞节期间开始编写,第一个公开发行版发行于1991年。语法简洁、可读性强。强大的标准库和第三方库支持。广泛应用于数据分析、人工智能、网页开发等领域。
- C#是微软在2000年推出的面向对象的编程语言。集成了.NET框架。广泛用于开发Windows应用程序、Web应用程序。
- Scala于2003年推出,结合了面向对象和函数式编程的特性。运行在JVM上,与Java兼容。支持并发编程。适用于复杂的应用程序开发。