u1s1,这一章真没啥东西,但为了内容完整性,还是发了
2.1 程序语言的定义
2.1.1 语法
- 字母表
- 合式
依照词法规则和语法规则构建的字符串 - 词法规则
- 语法规则/产生规则
- 单词符号
- 语法范畴/语法单位
2.1.2 语义
- 语义
- 语义规则
一组规则,用于定义一个程序的意义 - 数据
- 运算
- 程序
- 逻辑
- 实现
词法规则:有限自动机
语法规则:上下文无关文法
⋆
\star
⋆ 名字是语法概念,标识符是语义概念
标识符
→
B
i
n
d
i
n
g
(
绑定
)
名字
标识符\xrightarrow{Binding(绑定)}名字
标识符Binding(绑定)名字
根据编译器的不同,绑定有时发生在编译阶段,有时发生在运行阶段
程序语言的基本功能
描述数据和对数据的运算
2.2 高级语言的一般特性
2.2.1 高级语言的分类
- 强制式语言
FORTRAN、C - 应用式语言
LISP - 基于规则的语言
Prolog - 面向对象的语言
Python、C++- 封装性
- 继承性
- 多态性
2.2.2 程序结构
略
2.2.3 数据类型与操作
- 数值数据
- 逻辑数据
- 字符数据
- 指针类型
- 标识符
- 值
- 属性
- 类型和作用域
- 数组
- 下标
- 下标变量
- 确定数组
- 可变数组
- 栏
语句与控制结构
- 单元
- 值
- 左值
- 右值
2.3 程序语言的语法描述
- 字母表
Σ \Sigma Σ
有穷- 符号
- 符号串
Σ \Sigma Σ上的符号串:由 Σ \Sigma Σ上符号构成的有穷序列 - 空字
ε \varepsilon ε
注意,空字是字符串
-
Σ
∗
\Sigma^*
Σ∗
Σ \Sigma Σ上所有字符串的全体
ε ∈ Σ ∗ \varepsilon\in\Sigma^* ε∈Σ∗- 空集
ϕ = { } \phi=\{\} ϕ={}
⋆ \star ⋆ 注意区分 ε \varepsilon ε、 { } \{\} {}和 { ε } \{\varepsilon\} {ε}的区别
- 空集
- 连接
U V = { α β ∣ α ∈ U & β ∈ V } UV=\{\alpha\beta|\alpha\in U\&\beta\in V\} UV={αβ∣α∈U&β∈V} - 积
V n = V V V ⋯ V V^n=VVV\cdots V Vn=VVV⋯V - 闭包
V ∗ = V 0 ∪ V 1 ∪ V 2 ∪ V 3 ∪ ⋯ V^*=V^0\cup V^1\cup V^2\cup V^3\cup\cdots V∗=V0∪V1∪V2∪V3∪⋯ - 正则闭包
V + = V V ∗ V^+=VV^* V+=VV∗
如果 ε ∈ V \varepsilon\in V ε∈V,则 V + = V ∗ V^+=V^* V+=V∗
2.3.1 上下文无关文法
- 文法
- 形式规则
- 上下文无关文法
G = ( V T , V N , S , P ) G=(V_T,V_N,S,P) G=(VT,VN,S,P)- 终结符号
V T V_T VT,非空,终结符集合 - 非终结符号
V N V_N VN,非空,非终结符集合
⋆ \star ⋆ V T ∩ V N = ϕ V_T \cap V_N=\phi VT∩VN=ϕ - 开始符号
S S S,文法开始符号 - 产生式
P P P,产生式
形式: P → α P\rightarrow\alpha P→α,其中, P ∈ V N P\in V_N P∈VN, V N ∈ ( V T ∪ V N ) ∗ V_N\in (V_T\cup V_N)^* VN∈(VT∪VN)∗
缩写: P → α 1 ∣ α 2 ∣ α 3 ⋯ P\rightarrow \alpha_1|\alpha_2|\alpha_3\cdots P→α1∣α2∣α3⋯ - 左部符号
P P P - 右部
α \alpha α - 候选式
α \alpha α是 P P P的候选式 - 元语言符号
→ \rightarrow →:定义为
∣ | ∣:或
- 终结符号
- 直接推出
α A β ⇒ α γ β \alpha A\beta\Rightarrow \alpha\gamma\beta αAβ⇒αγβ
A → γ A\rightarrow \gamma A→γ是产生式, α 、 β ∈ ( V T ∪ V N ) ∗ \alpha、\beta\in (V_T\cup V_N)^* α、β∈(VT∪VN)∗- 推导
-
α
1
⇒
∗
α
n
\alpha_1\xRightarrow{*}\alpha_n
α1∗αn
从 α 1 \alpha_1 α1出发,经0步或若干步可以推导处 α n \alpha_n αn -
α
1
⇒
+
α
n
\alpha_1\xRightarrow{+}\alpha_n
α1+αn
从 α 1 \alpha_1 α1出发,经1步或若干步可以推导处 α n \alpha_n αn
-
α
1
⇒
∗
α
n
\alpha_1\xRightarrow{*}\alpha_n
α1∗αn
- 推导
- 句型
S ⇒ ∗ α S\xRightarrow{*}\alpha S∗α,则称 α \alpha α是 S S S的句型- 句子
如果 α \alpha α仅含终结符,则 α \alpha α为句子- 语言
L ( G ) L(G) L(G)
文法G产生的句子的全体
- 语言
- 句子
- 最左推导
每一步均对最左非终结符进行替换 - 最右推导
每一步均对最右非终结符进行替换
2.3.2 语法分析树与二义性
- 语法分析树/语法树
语言二义性:所有文法都是二义的,自然语言是二义的
语法二义性:一个文法存在某个句子对应两棵不同的语法树
2.3.3 形式语言鸟瞰
- 短语文法
- 上下文有关文法
- 上下文无关文法
- 右线性文法
- 左线性文法
- 正规文法