编译原理(二) 文法和语言

字母表和符号串

  1. 字母表Σ:符号(元素)的非空有穷集合
    字符(符号):可以相互区别的记号

  2. 符号串:由字母表Σ中的符号组成的任何有穷序列称为该字母表上的符号串

(1) 空符号串ε:没有符号的符号串

Σ={a,b}
ε,a,b,ab,aa,aabba…都是Σ上的符号串

(2)符号串S的头(前缀):移走符号串S尾部的0个或多于0个符号得到的符号串。

如:b是符号串banana的一个前缀

符号串S的尾(后缀):删去符号串S头部的0个或多于0个符号得到的符号串。

如:nana是符号串banana的一个后缀

(3)符号串S的字串:从s中删去一个前缀和一个后缀得到的符号串

如:nan是符号串banana的一个子串

对于每个字符串S,S和ε都是符号串S的前缀、后缀、字串。

  1. 符号串的运算
    (1)符号串的长度:符号串中符号的个数,符号串的长度记为|S|,
    ε的长度为0
    (2) 连接:符号串x,y的连接是把y符号写在x的符号之后得到的符号串xy,
    (3)方幂:符号串自身连接N次得到的符号串
    (4)符号串的集合

两个符号串集合A和B的乘积定义为:

若集合A中所有元素都是某字母表E上的符号串, 则称A为字母表E 上的符号串集合。

AB ={xy |x∈A且y∈B}

若集合A={ab,cde} B = {0,1}, 则
AB={ ab1 , ab0, cde0 , cde1}

  1. 闭包:使用Σ^表示Σ上的一切符号串(包括 ε)组成的集合。Σ*称为Σ的闭包。
    Σ上的除ε外的所有符号串组成的集合记为Σ^。Σ称为Z的正闭包。

文法和语言的形式定义

1.终结符:语言中不可再分的基本符号,通常是一个语言的字母表。如程序设计语言中的基本字、常数、运算符、分界符等。

2.非终结符: 它不像终结符代表了语法的最小元素,是一种个体记号,它是一个类、一个集合。一个非终结符代表了一定的语法概念。程序设计语言中常见的语法单位有“过程”、“赋值语句” 、“表达式”等。

3.开始符号:是一个特殊的非终结符。

4.产生式:构造某个语法时应满足的规则

编译原理(二) 文法和语言

编译原理(二) 文法和语言

编译原理(二) 文法和语言

编译原理(二) 文法和语言

编译原理(二) 文法和语言

编译原理(二) 文法和语言

语言是由句子组成的集合。是由一组符号所构成的集合。

语法数和文法的二义性

编译原理(二) 文法和语言

语法树的构造过程:

以文法开始符号 S为根结点随着推导的逐步展开,对句型中某个非终结符A用相应产生式A- a的右部替换时,为A的结点生成其子结点依次为a的子树,直至推导结束。

编译原理(二) 文法和语言

编译原理(二) 文法和语言

文法的二义性:

若一个文法存在某个句子对应两棵不同的语法树,则称这个文法是二义的。
或者, 若一个文法存在某个句子有两个不同的最左(右)推导,则称这个文法是二义的。

文法的类型

编译原理(二) 文法和语言