编译原理学习笔记:程序设计语言及其文法

这篇博客详细介绍了编译原理中的基本概念,包括字母表、符号串及其运算,以及文法的定义,如文法的形式化定义、文法的分类。重点讲述了上下文无关文法(CFG)的分析树,并探讨了文法的二义性问题。
摘要由CSDN通过智能技术生成

一、基本概念:
①字母表:
  • 又称之为符号表,字母表∑是一个有穷符号集合
    • 符号:字母、数字、标点符号、……
  • 实际举例:
    • 二进制字母表:{ 0,1 }、ASCII字符集、Unicode字符集……
②字母表上的运算:
  • 乘积:
    • 字母表∑1和∑2的乘积:
      • 12 ={ab|a ∈ ∑1, b ∈ ∑2}。
    • 实际举例:
      • {0, 1} {a, b} ={0a, 0b, 1a, 1b}
  • n次幂:
    • 字母表∑的n次幂:
      • image-20210519164214700
    • 实际举例:
      • {0, 1}3 ={0, 1} {0, 1} {0, 1}={000, 001, 010, 011, 100, 101, 110, 111}。

字母表的n次幂长度为n的符号串构成的集合。

  • 正闭包:
    • 字母表∑的正闭包:
      • + = ∑ ∪ ∑2 ∪ ∑3∪ ……
    • 实际举例:
      • {a, b, c, d }+ = {a, b, c, d,aa, ab, ac, ad, ba, bb, bc, bd, …,aaa, aab, aac, aad, aba, abb, abc, …}

字母表的正闭包:长度正数的符号串构成的集合.

  • 克林闭包:
    • 字母表∑的克林闭包:
      • * = ∑0 ∪∑+ =∑0 ∪ ∑ ∪ ∑2 ∪ ∑3∪ ……
    • 实际举例:
      • {a, b, c, d }* = {ε, a, b, c, d,aa, ab, ac, ad, ba, bb, bc, bd, …,aaa, aab, aac, aad, aba, abb, abc, …}

字母表的克林闭包:任意符号串(长度可以为零)构成的集合.

③符号串:
  • 定义:

    • 设∑是一个字母表,∀x∈∑*,x称为是∑上的一个串。
      • 串是字母表中符号的一个有穷序列
  • 其他关键定义:

    • 串s的长度,通常记作|s|,是指s中符号的个数
      • 实际举例:|abc|=3.
    • 空串长度为0的串,用 ε表示。
      • |ε|= 0.
④符号串上的运算:
  • 连接运算:
    • 如果 x和y是串,那么x和y的连接是把y附加到x后面而形成的串,记作xy
      • 实际举例:如果 x=hello且 y=world,那么xy=helloworld.
    • 空串是连接运算的单位元( identity);即,对于任何串s都有,εs = sε = s

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

  • 幂运算:
    • 串s的幂运算:
      • image-20210519170513034
      • s1 = s0s = εs = s,s2 = ss,s3 = sss,……
    • 实际举例:如果 s =bili,那么s1= bili,s2=bilibili,s3=bilibilibili,……

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


二、文法的定义:
①文法的形式化定义:

G = ( V T , V N , P , S ) G=(V_T,V_N,P,S) G=(VT,VN,P,S)

  • VT终结符集合:
    • 终结符是文法所定义的语言的基本符号,有时也称为token
  • VN非终结符集合:
    • 非终结符是用来表示语法成分的符号,有时也称为“ 语法变量”。
    • 实际举例:VN = { <句子>,<名词短语>, <动词短语>, <名词>,…… }

VT ∩ VN=空集、VT ∪ VN = 文法符号集。

  • P产生式集合:

    • 产生式描述了将终结符和非终结符组合成串的方法。
    • 产生式的一般模式: α → β \alpha\rarr\beta αβ
      • 读作:α定义为β。
        • α∈(VT∪VN)+,且α中至少包含VN中的一个元素,则α称为产生式的左部
        • β∈(VT∪VN)* :称为产生式的右部
  • S开始符号:

    • S∈VN,开始符号表示的是该文法中最大的语法成分
      • 举例:S = <句子>.

S当然要属于VN(非终结符)了,要是属于终极符的话,那不开始即结束了吗!

image-20210519173734790

②产生式的简写:
  • 对于一组有相同左部的产生式:

α → β 1 , α → β 2 , … , α → β n \alpha\rarr\beta_1,\alpha\rarr\beta_2,…,\alpha\rarr\beta_n αβ1,αβ2,,αβn

  • 可以简记为:

α → β 1 ∣ β 2 ∣ … ∣ β n \alpha\rarr\beta_1\vert\beta_2\vert…\vert\beta_n αβ1β2βn

  • 读作:α定义为β1,或者β2,…,或者βn ;β1,β2,…,βn称为α的候选式

image-20210519174558115

③符号约定:
  • 终结符约定:

    • 字母表中排在前面的小写字母,如 a、b、c……
    • 运算符,如 +、*……
    • 标点符号,如括号、逗号……
    • 数字,0、1、. . . 、9……
    • 粗体字符串,如id、if……
  • 非终结符约定:

    • 字母表中排在前面的大写字母,如A、B、 C
    • 字母S。通常表示开始符号
    • 小写、斜体的名字,如 expr、stmt等
    • 代表程序构造的大写字母。如E(表达式)、T(项)和F(因子)
  • 其他约定:

    • 字母表中排在后面的大写字母(如X、Y、Z)表示文法符号(即终结符或非终结符)。
    • 字母表中排在后面的小写字母(主要是u、v、. . . 、z)表示终结符号串(包括空串)。
    • 小写希腊字母,如α、β、γ,表示文法符号串(包括空串)。
    • 除非特别说明,第一个产生式的左部就是开始符号

三、语言的定义:
①推导与归纳:
  • 给定文法 G = ( V T , V N , P , S ) G=(V_T,V_N,P,S) G=(VT,VN,P,S),如果 α → β ∈   P \alpha\rarr\beta\in\space P αβ P,那么可以将符号串那么可以将符号串 γ α δ γαδ γαδ中的 α α α替换 β β β,也就是说,将 γ α δ γαδ γαδ重写 γ β δ γβδ γβδ,记作 γ α δ    ⟹    γ β δ γαδ\impliesγβδ γαδγβδ。此时就称文法中的符号串 γ α δ γαδ γαδ 直接推导
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值