码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 编译原理—词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式


    系列文章戳这里👇

    1. 什么是上下文无关文法、最左推导和最右推导
    2. 如何判断二义文法及消除文法二义性
    3. 何时需要消除左递归
    4. 什么是句柄、什么是自上而下、自下而上分析
    5. 什么是LL(1)、LR(0)、LR(1)文法、LR分析表
    6. LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
    7. 编译原理第三章习题
    8. 词法分析、构建DFA、上下文无关文法、LL(1)分析、提取正规式

      编译原理—构建DFA/上下文无关文法/提取正规式

      • 系列文章戳这里👇
      • 构建DFA
      • 上下文无关文法
      • 词法分析
      • L L ( 1 ) LL(1) LL(1)分析
      • 提取正规式

    构建DFA

    表示被 5 5 5整除的二进制串的 D F A DFA DFA
    一个数 m o d   5 mod\ 5 mod 5 结果为 0 , 1 , 2 , 3 , 4 0,1,2,3,4 0,1,2,3,4以此为 5 5 5 种状态。由于要求是能被 5 5 5 整除的数, 0 m o d 5 = 0 0 mod 5 = 0 0mod5=0满足,故状态 0 0 0 为初始 & \& &最终状态,状态表如下:
    在这里插入图片描述

    注意这里 + 0 、 + 1 +0、+1 +0、+1是对二进制串末尾而言,分别代表二进制串对应的十进制数乘 2 2 2以及乘 2 2 2再 + 1 +1 +1,例如 1000 = 8 D + 0 = 10000 = 1 6 D 1000=8_{D}+0=10000=16_{D} 1000=8D​+0=10000=16D​,原本 m o d   5 mod\ 5 mod 5余 3 3 3,变成了余 1 1 1。

    根据状态表构建 D F A   M DFA\ M DFA M
    在这里插入图片描述

    上下文无关文法

    给出对应的上下文无关文法
    令
    0 : S 、 1 : A 、 2 : B 、 3 : C 、 4 : D 0:S、1:A、2:B、3:C、4:D 0:S、1:A、2:B、3:C、4:D
    则根据 D F A DFA DFA给出上下文无关文法:
    S → 1 A ∣ 0 S ∣ ϵ A → 0 B ∣ 1 C B → 0 D ∣ 1 S C → 0 A ∣ 1 B D → 0 C ∣ 1 D S→1A|0S|\epsilon\\ A→0B|1C\\ B→0D|1S\\ C→0A|1B\\ D→0C|1D S→1A∣0S∣ϵA→0B∣1CB→0D∣1SC→0A∣1BD→0C∣1D

    因为S是终态也是初态,所以有S→ε

    词法分析

    给出 F i r s t First First集与 F o l l o w Follow Follow集
    F i r s t ( S ) = { 0 , 1 , ϵ } F i r s t ( A ) = F i r s t ( B ) = F i r s t ( C ) = F i r s t ( D ) = { 0 , 1 } F o l l o w ( S ) = F o l l o w ( A 、 B 、 C 、 D ) = { $ } First(S)=\{0,1,\epsilon\}\\ First(A)=First(B)=First(C)=First(D)=\{0,1\}\\ Follow(S)=Follow(A、B、C、D)=\{$\} First(S)={0,1,ϵ}First(A)=First(B)=First(C)=First(D)={0,1}Follow(S)=Follow(A、B、C、D)={$}

    L L ( 1 ) LL(1) LL(1)分析

    给出 L L ( 1 ) LL(1) LL(1)分析表

    01$
    S S S S → 0 S S→0S S→0S S → 1 A S→1A S→1A S → ϵ S→\epsilon S→ϵ
    A A A A → 0 B A→0B A→0B A → 1 C A→1C A→1C
    B B B B → 0 D B→0D B→0D B → 1 S B→1S B→1S
    C C C C → 0 A C→0A C→0A C → 1 B C→1B C→1B
    D D D D → 0 C D→0C D→0C D → 1 D D→1D D→1D

    提取正规式

    给出正规式 R R R,使得 L ( R ) = L ( M ) L(R) = L(M) L(R)=L(M)
    由于状态转换图中到达终态 S 0 S0 S0的状态转换为 S 0 → S 0 , S 2 → S 0 S0→S0, S2→S0 S0→S0,S2→S0
    因此依次消去 S 4 、 S 3 、 S 1 、 S 2 S4、S3、S1、S2 S4、S3、S1、S2
    在这里插入图片描述

    S0和S2是新的初态和终态,S1是原来的S0

    最终得到正规式
    在这里插入图片描述
    ( 0 ∣ 1 ( 10 ) ∗ ( 0 ∣ 11 ) ( 0 1 ∗ 01 ∣ 0 1 ∗ 00 ( 10 ) ∗ ( 0 ∣ 11 ) ) ∗ 1 ) ∗ (0|1(10)^*(0|11)(01^*01|01^*00(10)^*(0|11))^*1)^* (0∣1(10)∗(0∣11)(01∗01∣01∗00(10)∗(0∣11))∗1)∗

  • 相关阅读:
    Go语言聊天室demo
    MySQL8.0与MySQL5.7区别
    C++中的this指针
    PMSM FOC位置环S曲线控制算法(恒定急动度)
    0815(031天 线程/进程02)
    springcloud-config git配置源加载(部署公钥问题)
    21.Spring Cloud Gateway 简介
    TCP/IP 网络编程笔记 第一章 理解网络编程和套接字
    蠕虫病毒问题
    【JUC并发编程】Synchronized深度分析
  • 原文地址:https://blog.csdn.net/weixin_56462041/article/details/127414289
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号