程序设计语言

一、程序语言基础
1.基本概念
- 低级语言:机器语言、汇编语言
 - 高级语言: 
  
- Fortran 科学计算,执行效率高
 - Pascal 为教学开发,表达能力强
 - Prolog 逻辑性程序设计语言
 - C语言 指针操作能力强,可以开发系统级软件,高效
 - C++ 面向对象,高效
 - Java 面向对象,中间代码,跨平台
 - C# 面向对象,中间代码,.net架构
 - Python 面向对象解释型语言
 
 
2.分类
- 命令式和结构化:Fortran、Pascal、C
 - 面向对象:C++、Java、C#、Python、Smarttalk
 - 函数式:Scala、LISP、APL、Haskell、Scheme
 - 逻辑性:Prolog
 
3.成分
- (1)数据成分:数据类型、变量、常量、全局/局部变量
 - (2)运算成分:运算符
 - (3)控制成分:顺序结构、选择结构、循环结构
 - (4)传输成分:允许数据传输的方式,如赋值处理、输入输出等
 - (5)函数:函数首部、函数体 
  
- 值调用:传递值
 - 引用调用:传递引用
 
 
二、语言处理程序
1.编译程序原理
- 词法分析:读取源程序的字符流
 - 语法分析:输入的是记号流
 - 语义分析
 - 中间代码生成 
  
- 前缀表达式+ab、中缀表达式a+b、后缀表达式ab+
 
 - 代码优化
 - 目标代码生成
 
2.文法
字母表、字符、字符串集合及运算
-  
字母表∑ = {a,b} a和b是字符
 -  
字符串的长度 |abc| = 3
 -  
空串ε
 -  
连接 字符串S和T的连接表示为S·T,连接号可省略
 -  
∑是指包括ε在内的所有字符串任意组合 ∑={a,b} , ∑={aa,bb,ab,ba,aaa...}
 -  
字符串的方幂,把字符串a自身连接n次得到的串,成为a的n次方幂
 -  
字符串集合运算
- 或(合并):A∪B = {α|α∈A或α∈B}
 - 积(连接):AB={αβ|α∈A且β∈B}
 - 幂:A的n次幂=A*A^(n-1) n>0 并规定A^0 = {ε}
 - 正则闭包+:A+ = A^1∪A^2∪A^3∪A^n∪.... 不包含空串ε
 - 闭包*:A* = A^0∪A+
 
 -  
文法G是一个四元组,G=(V,T,P,S)
- V 非终结符 不是语言的组成部分,不是最终结果,可以推导其他元素
 - T 终结符 是语言的组成部分,是最终结果,不能再推导其他元素
 - S 起始符 是语言的开始符号
 - P 产生式 用终结符代替非终结符的规则,a->b
 
 -  
乔姆斯基文法分类
- 0型文法:短语文法
 - 1型文法:上下文有关文法
 - 2型文法:上下文无关文法
 - 3型文法:等价于正规式
 
 
3.正规式
| 正规式 | 正规集 | 
|---|---|
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字符串的集合 | 
4.有限自动机
- 是一个识别装置的抽象概念,能准确识别正规集
 - 分为确定有限自动机DFA和不确定有限自动机NFA
 - 输入一个字符能得出唯一后继就是DFA,得出多个后继则是NFA
 
5.语法分析方法
- 自上而下的语法分析:从左到右,递归下降的思想 
给定文法G和源程序串r,从G的开始符号出发, 反复使用产生式对句型中的非终结符进行替换(推导), 逐步推导除r
 - 自下而上的语法分析:从右往左,移进-规约的思想 
从给定的输入串r开始, 不断寻找字串与文法G中某个产生式的候选式进行匹配, 并用产生式的左部代替(规约)之,逐步规约到开始符号
 



















