编译原理基本概念和术语

本文介绍了编译原理的基本概念,包括字母表(有穷符号集合)、符号串(及其运算)、闭包以及文法的定义、类型和推导。文法分为0型到3型,分别对应无限制、上下文有关、上下文无关和正则文法。通过例子阐述了文法符号、产生式、推导和文法的二义性,为理解编译原理打下基础。
摘要由CSDN通过智能技术生成
一、字母表(有穷符号集合)
1.1 字母表定义

字母表也即符号集,用表示,它是一个包含各种符号有穷非空集合

以汉语为例,汉语字母表就是各种汉字、数字、标点符号的集合;以英语为例,英语字母表就是各种字母、数字、标点符号的集合…那么到了编程,字母表就可能是字母、数字、各种专用符号和保留字了。

1.2 字母表上的运算:
  1. 乘积
  2. n次幂
  3. 正闭包
  4. 克林闭包
    在这里插入图片描述

二、符号串/串
2.1 符号串相关定义:

符号串是对于字母表来说的一个概念,字母表的符号串指的就是由字母表中各个字符组成的一个有穷序列。

注意这里的“有穷”,指的是符号串本身是由有穷个符号组成但是符号串的个数是无穷多的(组合方式不同)

以字母表 ∑={0,1} 为例,它的符号串就有:0,1,00,01,10,11,000 等等。

符号串的长度指的是符号串符号的个数,以 m = 000 为例,|m|= 3。

空符号串 ε 长度为 0,表示不包含任何符号,类似于编程中的空字符串 “”。所以有 εm = mε= m。

以 m = abc 为例,它的头是 ε,a,ab,abc;它的尾是 ε,c,bc,abc。而它的固有头不考虑末尾符号 c,固有尾不考虑首部符号 a。

2.2 符号串的运算:连接、方幂
  1. 符号串的连接:连接就是两个字符串顺序拼接,比如 x = abc,y = def,那么 xy = abcdef。
  2. 符号串的方幂:如果一个符号串由多个重复符号构成,如何方便地表示它呢?

比如 y = xxxx…xxxx(n 个 x),那么就可以写成 y = x^n,此时 y 就是 x 的方幂。这点和数学是一样的。不过要注意,x^0 ≠ 1 = ε

串s的n次幂:将n个s连接起来


三、闭包

以字母表 ∑ = {a,b} 为例,任何由它的符号串作为构成元素的集合,都可以称作字母表的符号串集合。比如说 {ab},{abab,ababab} 等。

两个符号串集合的乘积定义为 AB = {xy| x∈A且y∈b},其实就是笛卡尔积

一般的字符串集合可能并不能囊括一个字母表的所有符号串,但是有一种集合却能包含所有的符号串,这种特殊的集合称为闭包,记作 ∑*。

*其实就是全选的意思(联想 CSS 中的通配选择符就好理解了)。

∑* = {ε,a,b,ab,ab,ba,aba,aab......} = ∑^0 ∪ ∑^1 ∪ ∑^2 ∪......∪ ∑^n

要注意的是,闭包也包含了空符号串

将闭包中的空符号串去掉,就成为了正闭包,也即 ∑+
显然:∑*= ∑^0 ∪ ∑+,∑+ = ∑∑* = ∑*∑。


四、文法
4.1 文法在语言体系中的位置

语言包括语法和语义两个方面,但是语法和语义都是比较抽象的东西,所以我们需要借助一些工具来阐述它们。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值