编译原理(四) 语言及其文法的基本概念

1.字母表

字母表是一个有穷符号集合,符号可以是: 字母 数字 标点符号等
常见的字母表有
二进制字母表 {0 ,1}
ASCII字符集
Unicode 字符集

2.字母表的运算

1. 字母表∑1和∑2的乘积
12 = {ab | a ∈ ∑1, b ∈ ∑2 }
{0 ,1} {a, b} = {0a, 0b, 1a, 1b}
2.字母表∑的n次幂
^0 = { ε }     表示空串
∑^n = {^n-1}

{0 ,1}^3 = {0, 1} {0, 1} {0, 1} 
={000, 001, 010, 011, 100, 101, 110, 111}
3.字母表∑的正闭包
+ = ∑ ∪ ∑^2 ∪ ∑^3........
{a, b, c, d}+ 
= {a, b , c, d, aa, 
ab, ac, ad,.....
aaa, aab, aac, aad, .....}

正闭包就是长度为正数的字符串的集合

4.字母表∑的克林闭包
* =^0 ∪ ∑+ =^0 +^1 ∪  ∑^2 ∪  ∑^3.......

克林闭包是任意符号串(长度可以为零)构成的集合

3.串

设∑是一个字母表, 任意x∈ ∑*, 那么x称作∑上的一个串
串是字母表中符号的一个有穷序列
串s的长度,通常记作|s| 就是指s中符号的个数
空串就是长度为零的串

4.串上的运算

1.串的基本运算

如果x 和y是串,那么x 和 y的链接,就是把y追加到x的后边,记作xy

x = hello
y = world
xy = helloworld

任何串链接空串,结果都不变

设x,y,z是三个字符串,如果x = yz, 那么y是x的前缀,z是x的后缀

2.串s的幂运算
s^0 = ε
s^n = s^n-1 s
s^1 = s^0  s  
s = ε s
s ^ 2 = s s
s ^ 3 = s s s

例如:s = hello
则: s1 = hello

s ^ 2 = hellohello
s ^ 3 = hellohellohello

5.文法定义–句子的构成规则

G = (Vt, Vn, P, S)

1.Vt表示 终结符集合 是文法定义语言的基本符号,也称作 token

例:

Vt = {apple, boy, eat, little}
2.Vn表示 非终结符集合 用来表示语法成分的符号, 也称作 语法变量
Vn = {<句子>, <名词短语>, <动词短语>...}

Vt ∩ Vn = ∅
Vt ∪ Vn:  表示 文法符号集
3.p表示产生式集合

产生式描述了将终结符和非终结符组合成串的方法
一般形式 a -> b
读作 a 定义为b
a ∈ (Vt ∪ Vn)+ 且 a中至少包含一个非终结符 a也称为产生式的头或者左部
b ∈ (Vt ∪ Vn)* 称作产生式的体或者右部

4.s表示开始符号

开始符号表示的是该文法中最大的语法成分
例 : s = <句子>

5. 文法举例
G = ( Vt, Vn, P, E )
Vt = {id, +, *, (, ) }
Vn = {E}
P = {
    E -> E + E,
    E -> E * E,
    E -> (E),
    E -> id
}

我们约定在不引起歧义的情况下,可以只写产生式:

G:  E -> E + E,
    E -> E * E,
    E -> (E),
    E -> id
6.产生式简写

对于一组有相同左部的a产生式

a -> b1, a->b2 a->b3 a->b4

可以简写为

a -> b1 | b2 | b3 | b4

读作a定义为b1 或者b2 或者b3 或者b4
b1 b2 b3 b4为候选式

7.符号约定

下述符号是终结符
字母表中的排在前边的小写字母比如 a, b, c
运算符 ,比如 + - *
标点符号 逗号,括号
数字 0, 1, 2, … 9
粗体字符串 id if

下述符号为非终结符
字母表中排在前面的大写字符 A, B, C
字母S 通常表示开始符号
小写斜体的名字 比如 expr stmt
代表程序够早的大写字母 E(表达式) T(项) F(因子)

下述是文法符号
字母表中排在后边的大写字母 (X, Y, Z)
即可以表示终结符,又可以表示非终结符

下述是终结符号串
字母表中排在后边的小写字母(u, v, …z)表示终结符号串(包括空串)

下述是文法符号串
小写希腊字母 α β 等 表示 文法符号串 也包括空串

若无特殊说明,第一个产生式的左部就是开始符号

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值