第二章--词法分析

目录

  • 词法分析的基本概念

      字母表∑ 是一个有穷符号的集合(符号包括字母、数字、标点符号等等)
      
      字母表的运算
      
      串就是字母表的真子集构成的有序的符号
    
      串的运算
    


词法分析的基本概念
  • 字母表

    • 概念
      字母表是一个有穷符号集合。用 ∑ 表示
      字母,数字,标点符号… 都属于符号
      在这里插入图片描述
    • 字母表的运算
    1. 字母表∑的乘积
      在这里插入图片描述

    1. 字母表的n次幂
      在这里插入图片描述
      那么这里的字母表的 0 次幂就是长度为 0 的字符串构成的集合叫空串。

    1. 字母表的正闭包
      在这里插入图片描述

    1. 字母表的克林闭包
      在这里插入图片描述
      可以看到字母表的克林闭包字母表的正闭包 只是多了一个0 次幂。

    • 概念
      在这里插入图片描述
      就是说串是由字母表的子集构成的。

    • 串的长度

      串的长度就是串中含有的字符的个数
      在这里插入图片描述


    • 串上的运算–连接
      在这里插入图片描述

    • 串上的运算–幂运算
      在这里插入图片描述
      串的 N 次幂就是将 N 个 S连接起来

返回目录


文法定义
  • 自然语言的例子:
    在这里插入图片描述
    我们来分析一般的句子的构成规则。一般的句子由名词短语和动词短语构成。然后再细分下去。

    我们可以看到的是用 尖括号括起来的 叫做 语法成分。就是我们说的名词动词等等。没有用尖括号括起来的 是语言的基本符号。就是语言的基本组成


  • 文法的形式化定义

      G=(Vt,Vn,P,S)
    

    这里面的各个符号的意思

    1. Vt : 终结符集合 (相当于前面没有用括号括起来的句子的组成的部分 )

      终结符是文法所定义语言的基本符号,有时也称为了token.

      例如:Vt = {apple,boy,eat,little}

    2. Vn:非终结符集合 (相当于前面用括号括起来的句子的语法成分)

      非终结符是用来表示语法成分的符号。有时也称作语法变量。

      例如:Vn = {<句子>,<名词短语>,<动词短语>,<谓语动词>…}

      值得注意的是:
      在这里插入图片描述

    3. P产生式的集合

      产生式 描述了将终结符和非终结符组合成为串的方式。

      产生式的一般形式:

      α→β 读作: α定义为β
      在这里插入图片描述
      例子:
      在这里插入图片描述

    4. S开始符号

      开始符号 表示的是该文法中 最大的语法成分

      例子: 上面的开始符号就是句子。因为句子就是该文法中最大的语法符号

    实例分析:
    在这里插入图片描述
    约定:
    我们约定再不产生歧义的情况下,可以不用这么麻烦,直接写文法的产生式就行。不用全部都写。


  • 产生式的简写
    在这里插入图片描述

  • 符号的约定

    为了避免总是进行表达式的简写。我们对符号进行约定,就可以直接使用符号进行表达就行了。

    1. 终结符的约定
      在这里插入图片描述

    2. 非终结符的约定
      在这里插入图片描述

    3. 文法符号的约定

         我们通常用  字母表中排在后面的 大写字母(如,X,Y,Z)。  
      
         表示文法符号(既可以表示终结符也可以表示非终结符)
      
         排在字母表中 后面的小写字母表示 终结符串 (包括空串)
      
         小写的希腊字母(如α,β,γ,等)表示文法字符串(包括空串)
      
    4. 开始符号的约定

         如果没有特别说明一般都认为  第一个产生式的左部就是开始符号
      

    总结一下就是:

      字母表前面的 **小写字母** 表示终结符
      字母表前面的 **大写字母** 表示非终结符
    
      字母表后面的  大写字母  表示文法字符串(既可以表示终结符也可以表示非终结符)
      字母表后面的  小写字母  表示终结字符串 (包含空串)
    
      字母表后面的  希腊字母  表示文法字符串 (包含空串)
    

返回目录


语言的定义
  • 自然语言的例子
    在这里插入图片描述
    在上面一节我们学习了文法(语言规则),那么如何判定一个词串是否是满足文法的句子呢
    下面我们就来回答这个问题

  • 推导
    在这里插入图片描述

      这是推导的定义。
    
      说白了就是如果 α→β,就可以讲符号串中的 γαc 替换为γβc 有点等效替换的意思
    

    在这里插入图片描述

      经过几步的推导能够写出这样式子就记为几
      
      如经过3步推导出的就可记为 a>> 3a
    

    了解了这些以后我们就可以来看看 litter boy eats apple是不是句子?
    重点是看这些能不能够推导出。
    在这里插入图片描述

      通过这种自顶向下的方式我们看到,我们是可以根据文法规则来推导出 litter boy eat apple 是一个句子。句子→ little boy eat apple.
    

    那么什么是归约呢?

  • 归约
    在这里插入图片描述

      我们可以看到自顶向下我们可以叫做为推导
    
      那么自下向顶我们可以叫做为归约。 也就是推导的逆过程我们叫做归约
    
      通过一步一步的归约,替换,将一个字符串变为我们所熟知的文法
    

    在这里插入图片描述


  • 句子和句型
    在这里插入图片描述

      这里我们可以看到句型和句子的定义
    
      句型中既可以包含 终结符 也可以包含 非终结符 也可能是 空串
    
      而句子只是句型中的一种。 句子是不包含 非终结符的 句型
    

    我们下面来看上面的例子
    在这里插入图片描述

      之前的分析中 只有最后一个是句子,其余的都是句型。以为只有最后一个不包含非终结符。其余的都是包含终结符的。
    

  • 语言的形式化定义
    在这里插入图片描述

    简单的说就是 由文法G的开始符号S推导出的所有的句子构成的集合成为文法G的生成的语言。记为L(G)

    上面提出的问题,语言中可以包含的句子有无限个。

  • 例子
    在这里插入图片描述

    这个题我们可以看到,T经过最后的迭代,不停的变换,最后是由L 和 D 组成的。而在放到开始字符串S中去,就也是D和L组成的,而D和L一个是数字,一个是字母,两个在一起组成的是标识符。

    所以文法G表示的是标识符就是这样进行推导来的

  • 语言上的运算
    在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值