编译原理复习——文法和语言

什么是文法?   若干规则的组合就是文法
语言 —— 形式化的内容提取
自然语言语言 (Language)   满足 一定条件 句子 集合
句子 (Sentence)    满足 一定规则 单词 序列
单词 (Token)     满足 一定规则 字符 (Character) (String)
程序设计语言 —— 形式化的内容提取
程序设计语言 (Programming Language) :组成程序的 所有语句的集合
程序 (Program) :满足语法规则的 语句 序列
语句 (Sentence) :满足语法规则的 单词 序列
单词 (Token) :满足词法规则的 字符串
程序设计语言的描述形式 —— 文法
语法 —— 语句   语句的组成规则
描述方法: BNF 范式 、语法 ( 描述 )
词法 —— 单词   单词的组成规则
描述方法: BNF 范式 、正规式 ( 正则表达式 )
文法的作用   严格 定义句子的结构   适当条数的规则 把句子描述出来,有穷刻画无穷
BNF 范式 描述文法的方法
< > 用尖括号括起来的内容表示语言构造成分,称为 语法单元,在文法中为非终结符
:= 表示左部的语法单元由右部来定义,读定义为→
|  ,多选
{ } 可重复 0 戒者多次
[ ] 可选,出现或者不出现
字母表( Alphabet
字母表 是元素的 非空 有穷集合 ,字母表中 元素 称为该字母表的 符号 ,也叫符号集
符号串( String
字母表 中的 符号 所组成的任何 有穷序列 称之为该字母表上的符号串
(1) ε 上的一个符号串,也叫 符号串  ɸ 表示不含任何元素的空集
      区别 ε , ɸ {ε}
(2) x 上的符号串,而 a 的元素 , xa 上的符号串
(3) y 上的符号串 , 当且仅当它由 (1) (2) 导出
注意: 符号串是有序的, ab ba不 一样
s=abc 是符号串,则 s
前缀 / :移 s 的尾部的零个或多于零个符号 ε a, ab , abc
后缀 / :删去 s 头部的零个或多于零个符号 ε,c,bc ,abc
子串 : s 中删去一个前缀和一个后缀
逆转 :将 S 中的符号按相反次序写出而得到 的符号串 ( 如何实现符号串的逆转? )
长度 :是该符号串中的符号的数目 例如  |abc|=3,|ε|=0
符号串的连接和方幂
连接 : x y 是符号串,它们的连接 xy 是把 y 的符号写在 x 的符号之后得到的符号串。
例如, x=ba,y=nana,xy=banana
方幂 x 0= ε ; x 1 =x; x 2 =xx; … x n =x n-1 x
例如 , x=ba, x 1 = ba, x 2 =baba, x 3 =bababa
文法 G 为一个四元组 : = ( N, T ,P,S ), 其中
N :非终结符 (NonTerminal) 集,非空有穷    语法成分 —— 代表某个语言的各种子结构
T :终结符 (Terminal) 集,非空有穷    T N
:规则的集合
       α→ β ,被称为规则(产生式),读作: α 定义为 β 。其中
       α ( T N ) + ,且 α 中至少有V N 中元素的一个出现。
       β ( T N ) * α 称为产生式 α→ β 左部 β 为产生式 α→ β 右部
:开始符号 (Start Symbol) S N 代表文法所定义的语言,至少在 规则 左侧出现一次
符号串的 推导与归约 :已给文法 G=(V N ,V T , P, S )令 α, β (V N V T )* ,且 A→ γ P ,此时,由符号串 v=αAβ 能够直接推出符 号串 w=αγβ ,我们称
符号串 αγβ 是符号串 αAβ 直接推导
符号串 αAβ 是符号串 αγβ 直接归约
记作 : αAβ  αγβ
一个文法是可以用有限的规则推导出无限的句子的
文法 G = ( V T , V N , S , P )
乔姆斯基把文法分为四类:
0 型文法: α→β ,α   , β  ∈ ( V N V T ) * , α  至少有一个 非终结符  也称短语文法
1 型文法: | α   | ≤ | β | ,但S→ ε 可以例外  也称上下文有关文法
αAβ  αγβ 1 型文法的一个产生式
2 型文法: A →β A∈ V N , β∈   (V N V T )*   也称上下文无关文法
3 型文法: A →α B或 A →α   A, B∈ V N , α∈ V T *  也称正规文法
四种文法之间是逐级包含关系
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用编程写诗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值