编译原理 2.文法

2.文法

字母表

字母表 ∑ \sum 是元素的非空有穷集合

字母表中的元素(字母、数字、标点符号等)称为符号

字符串

由字母表中的符号组成的任何有穷序列称为符号串

如果某符号串中有 m m m个符号(不同于种),称为长度

∣ x ∣ = m |x|=m x=m ∣ ε ∣ = 0 |\varepsilon|=0 ε=0

字符串集合

如果集合 A A A中的一切元素都是某字母表上的符号串,称 A A A为该字母表上的符号串集合

字母表运算

乘积

∑ 1 ∑ 2 = { a b ∣ a ∈ ∑ 1 b ∈ ∑ 2 } \sum_1\sum_2=\{ab|a \in \sum_1 b \in \sum_2\} 12={aba1b2}

例如: { 0 , 1 } { a , b } = { 0 a , 0 b , 1 a , 1 b } \{0,1\}\{a,b\}=\{0a,0b,1a,1b\} {0,1}{a,b}={0a,0b,1a,1b}

∑ 0 = { ε } \sum^0 = \{\varepsilon \} 0={ε}

∑ n = ∑ n − 1 ∑        n > 1 \sum^n = \sum^{n-1}\sum \ \ \ \ \ \ n > 1 n=n1      n>1

例如: { 0 , 1 } 3 = { 0 , 1 } { 0 , 1 } { 0 , 1 } = { 000 , 001 …   } \{0,1\}^3=\{0,1\}\{0,1\}\{0,1\}=\{000,001\dots\} {0,1}3={0,1}{0,1}{0,1}={000,001}

正闭包

∑ + = ∑ ∪ ∑ 2 ∪ ∑ 3 \sum^+=\sum \cup \sum^2 \cup \sum^3 +=23

长度正数的符号串构成的集合

闭包/柯林闭包

∑ ∗ = ∑ 0 ∪ ∑ + \sum^*=\sum^0\cup\sum^+ =0+

任意字符串(长度可为0)构成的集合

字符串运算

字符串的头尾

假设 z = xy 是一个符号串,那么x是z的头/前缀,y是z的尾/后缀

字符串连接

设x和y是符号串,连接xy是把y的符号写在x的符号之后得到的符号串

字符串的方幂

设x是符号串,把x自身连接n次得到符号串z,即z=xx…xxx,称为符号串x的方幂,写作 z = x n z=x^n z=xn

x 0 = ε , x 1 = x , x 2 = x x , x 3 = x x x x^0=ε, x^1=x, x^2=xx, x^3=xxx x0=ε,x1=x,x2=xx,x3=xxx

字符串集合运算

字符串集合的乘积/连接

两个字符串集合A和B的乘积定义如下:AB={xy | x∈A 且 y∈B}

即AB是满足x属于A,y属于B的所有符号串xy所组成的集合

例:A={a,b},B={c,d},则集合AB={ac,ad,bc,bd}

文法和语言

文法:判别句子结构是否合法的依据的语言。

定义:

文法G定义为四元组(T, N, P, S)

◼ T:终结符集合(文法所定义的语言的基本符号,称为单词,token)

◼ N:非终结符集合(用来表示语法成分的符号,称为语法变量

◼ P:规则 ɑ->β (或ɑ::=β)的集合,ɑ∈(N∪T)*且至少包含一个非终结符,

β∈(N∪T)*,标识 α → β \alpha \to \beta αβ

◼ S:识别符或开始符,非终结符,至少在一条规则中作为左部出现。开始符号,文法中最大的语法成分,将文法 G G G写成 G [ S ] G[S] G[S]

满足关系:

T ∪ N : 文 法 符 号 集       T ∩ N = 空 集 T \cup N:文法符号集\ \ \ \ \ T \cap N=空集 TN:     TN=

表示

非终结符:<>,大写字母

终结符:小写字母,不用<>括起来的

对一组有相同左部的ɑ产生式: α → β 1    α → β 2 \alpha \to \beta_1 \ \ \alpha \to \beta_2 αβ1  αβ2

简记为: α → β 1 ∣ β 2 \alpha \to \beta_1|\beta_2 αβ1β2

终结符:

  • 小写字母
  • 运算符
  • 标点符号
  • 数字
  • 粗体字符串:id,if

非终结符

  • 大写字母
  • S
  • 小写斜体:expr,stmt
推导

γαδ => γβδ : γαδ 直接产生/推导γβδ ,或者γβδ直接归约γαδ

例子:假设有规则P={S->0S1, S->01}

1、0S1 => 0011,使用的规则:S->01,γ=0,δ=1

2、S => 0S1,使用的规则: S->0S1,γ=ε,δ=ε

a 0 → a 1   a 1 → a 2 … a n − 1 → a n a_0 \to a_1\ a_1\to a_2 \dots a_{n-1} \to a_n a0a1 a1a2an1an

称符号串 a 0 a_0 a0经过 n n n步推导出 a n a_n an,简记为 a 0 → n a n a_0 \to^n a_n a0nan

a → 0 a a \to^0 a a0a

句型和句子

如果 S → ∗ a , a ∈ ( T ∪ N ) ∗ S \to^* a,a\in(T \cup N)^* Saa(TN),则称 a a a G G G的一个句型

句子是不包含非终结符的句型

例子:S、0S1、000111是句型,000111是句子

语言:由S推导出的所有句子构成的集合称为文法G生成的语言,记为 L ( G ) L(G) L(G)

文法的类型

给出了从0到3一共四类的文法,内层是外层的子集

• 0型文法:任意文法

• 1型文法:上下文有关文法

• 2型文法:上下文无关文法,描述语法结构

• 3型文法:正则/正规文法,与正则表达式等价,描述词法结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IBiBrBGd-1641903164044)(…/picture/68.png)]

1型

每个产生式ɑ->β均满足 |β| ≥ |ɑ|,仅S->ε除外

有些定义中将产生式描述为:ɑ1Aɑ2->ɑ1βɑ2,β≠ε,表示只有A出现在上下文中,才允许取代A,体现上下文有关

2型

对于产生式A->β,A是一个非终结符

A->β,用β取代非终结符A时,与A所在的上下文无关

3型

每个产生式形式都是

▪ 右线性文法:A->aB 或 A->a

03164044)]

1型

每个产生式ɑ->β均满足 |β| ≥ |ɑ|,仅S->ε除外

有些定义中将产生式描述为:ɑ1Aɑ2->ɑ1βɑ2,β≠ε,表示只有A出现在上下文中,才允许取代A,体现上下文有关

2型

对于产生式A->β,A是一个非终结符

A->β,用β取代非终结符A时,与A所在的上下文无关

3型

每个产生式形式都是

▪ 右线性文法:A->aB 或 A->a

▪ 左线性文法:A->Ba 或 A->a

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一 上机实习目的:理解编译程序的构造原理,掌握编译程序的构造方法与技术。通过实习,使学生既加深对编译原理基础理论的理解,又提高动手能力,特别是提高软件设计能力。 二、上机实习要求: 在理解编译原理基本思想的基础上,选择一个自己熟悉的程序设计语言,完成编译程序的设计和实现过程。本实习要求学生采用递归下降分析技术,这是一种自顶向下的的编译方法,其基本思想是对语言的每个(或若干个)语法成分编制一个处理子程序,从处理这个语法成分的子程序开始,在分析过程中调用一系列过程或函数,对源程序进行语法和语义分析,直到整个源程序处理完毕为止 本上机实习是为C语言(子集)设计一个编译程序,完成词法分析、语法分析、语义分析等功能,并生成某种机器上的目标代码(汇编语言)或中间代码(元式)。 三、上机实习步骤 1.阅读《上机实习指导书》。 2.根据设计要求写算法,画程序框图 3.根据框图编写编译程序 4.输入编译程序并上机调试 5.撰写上机实习报告 、上机实习内容 1、题目:C语言小子集编译程序的实现 2、C语言小子集的文法规则: ::=main(){} ::=; ::= ::=int::=, ::= ::= ::= ::= ::=;| ::=||| ::== ::= ::=| ::=| ::=||() ::= ::= ::= ::= ::=+|- ::=*|/ ::=|!=|>=|<=|== ::={} ::=| ::=if()else ::=while()do ::=a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z ::=0|1|2|3|4|5|6|7|8|9

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值