程序语言概述
1,低级语言:机器语言与汇编语言
2,高级语言:贴近人的自然语言,抽象程度大大提高,需要编译成特定机器上的目标代码
3,编译程序和解释程序:用高级语言或汇编语言编写的代码称为源程序,源程序不能直接在计算机上执行。汇编语言需要汇编语言的翻译程序,高级语言需要相应的编译程序或者解释程序进行翻译。
4,程序设计语言的定义:
·语法:由程序设计语言的基本符号组成程序中的各个语法成分(包括程序)的一组规则,其中由基本字符构成的词法书写规则称为词法规则,由符号(单词)构成语法成分的规则称为语法规则。
·语义:程序语言中按语法规则构成的各个语法成分的含义,可分为静态语义和动态语义
·语用:表示构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。
·语境:理解和实现程序设计语言的环境,包括编译环境和运行环境。
5,程序设计语言的分类:
·命令式程序设计语言:基于动作的语言,计算被看作时动作的序列,有Fortran,Pascal,C语言。
·面向对象的程序设计语言:Simula提出了对象和类的概念,其他的代表有C++,Java,Smalltalk。
·函数式程序设计语言:是一类以λ-演算为基础的语言,该语言的代表是LISP,其中大量使用了递归。
·逻辑型程序设计语言:是一类以形式逻辑为基础的语言。该语言的代表是建立在关系理论和一阶谓词理论基础上的Prolog。
6,程序设计语言的基本成分
a 数据成分
·常量和变量
·全局量和局部量
·数据类型
b 运算成分
·顺序结构
·选择结构
·循环结构
c 函数
·函数定义:函数首部和函数体
·函数声明:先声明后引用
·函数调用:传值调用和引用调用
语言处理程序基础
1,汇编语言基本原理
一个程序可以有三类语句:
· 指令语句:又称为机器指令语句,汇编后能产生相应的机器码,有传送指令,算数运算指令,逻辑运算指令等。
· 伪指令语句:指示汇编程序对源程序进行汇编时完成某些工作,经汇编后不会产生机器代码,伪指令的很多操作是在源程序被汇编时完成的,指令语句必须在程序运行时。
· 宏指令语句:将多次重复使用的程序段定义为宏。每个宏都有对应的宏名。
2,汇编程序
汇编程序的功能是将汇编语言编写的源程序翻译成机器指令程序(类似于编译)。它一般至少需要两次扫描。
第一次扫描会生成一个符号表(ST)用来存放存储源程序中符号的值,其中有一个单元地址计数器(LC)用来计算表示标号的值,同样存储到ST中。另外有一个固定的机器指令表MOT1,其中记录了每条指令的记忆码和长度。
第二次扫描的任务是产生目标程序,除了使用前一次扫描产生的ST,还要使用机器指令表MOT2,这一次,可执行汇编语句被翻译成对应的二进制代码机器指令,有两个方面的工作:一是把机器指令助记符转换成二进制机器指令操作码,这可以通过查找MOT2来实现;二是求出操作数区个操作的值(用二进制表示)。
3,编译程序基本原理
功能是把用高级语言书写的源程序翻译成与之等价的目标程序。
编译过程划分成词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成六个阶段。实际编译器可能会将其中某些阶段结合在一起进行处理。
· 词法分析阶段:对源程序从前到后(从左到右)逐个字符进行扫描,从中识别出一个个“单词符号”。输出的“单词”通常采用二元组的方式:单词类别和单词自身的值。
· 语法分析阶段:在词法分析的基础上,根据语法规则将单词符号序列分解成各类语法单位
· 语义分析阶段:审查程序是否存在语义错误,并收集类型信息共后面的代码生成阶段使用。语义分析的一个主要工作是进心类型分析和检查。
· 中间代码生成:中间代码是一种结构简单且含义明确的记号系统,这个阶段的工作就是根据语义分析阶段的输出生成中间代码(类似于Java的.class文件)
· 代码优化阶段:对前一段产生的中间代码进行变换或进行改造,目的是使目标代码更为高效,更加节省空间。可以在中间代码生成阶段或者目标代码生成阶段执行。
· 目标代码生成阶段:把中间代码变换成特定机器上的绝对指令代码。是编译的最后阶段。
· 符号表管理:在符号表记录各个符号的动态错误
· 出错处理:错误大致可分为动态错误和静态错误。静态错误是指编译阶段发现的程序错误,可分为语法错误和静态语义错误。动态错误,指程序中的逻辑错误。
4,解释程序的基本原理
解释程序是一种语言处理程序,它直接执行源程序或者中间代码而不产生目标程序,这是它和编译程序的主要区别。
文法和有限自动机
书上看的一头雾水,这里参考别人的总结https://blog.csdn.net/hongtao_6/article/details/81951166