码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 编译原理——自上而下分析与递归下降分析构造(笔记)


    目录

    • 目的
    • 主要思路
      • 过程与变量
    • 实例
      • 模板
      • 1
      • 2
    • 巴科斯范式文法
    • 参考文献

    目的

    构造不带回溯的自上而下分析程序

    • 要消除文法的左递归性
    • 克服回溯

    主要思路

    • 分析程序由一组递归过程组成, 对每一语法变量 ( 非终结符 ) 构造一个相应的子程序,识别对应的语法单位
    • 通过子程序间的相互调用实现对输入串的识别
    • 这样的分析程序称为递归下降分析器 ( 因为文法的定义
      通常是递归的 )

    过程与变量

    • ADVANCE:把输入串指示器 IP 指向下一个输入符号,即读入一个单字符号(调用词法分析器,取下一个符号)

    • SYM:IP 当前所指的输入符号(取得的符号)

    • ERROR :出错处理子程序

    实例

    实例
    每个非终结符有对应的子程序的定义,首先在分析过程中,当需要从某个非终结符出发进行展开 ( 推导 ) 时,就调用这个非终结符对应的子程序。

    也即是,每个子程序对应一个非终结符(语法单位),遇到这个语法单位时,就掉用对应的子程序。

    如,E就有一个子程序,负责E的识别、推导。该则程序负责调用T和E’。T等同理。
    注意,文法必须是LL(1)文法才可以(动作唯一)。

    模板

    在这里插入图片描述

    1

    在这里插入图片描述

    在这里插入图片描述

    2

    在这里插入图片描述
    第一种写法,
    在这里插入图片描述
    ELSE IF检查的是,是否为终结符,是就结束,不是就是报错。
    另外一种
    在这里插入图片描述
    两种都没有问题。

    第二种,虽然没有检查follow集合,但下一个字符的会检查first集合。换言之,即是让后面的程序去检查当前的结果是否正确。
    这样导致的是,程序报错位置的区别。

    主程序就是开始符,是就开始。
    在这里插入图片描述

    巴科斯范式文法

    在元符号“→”和“ |” 的基础上,扩充几个元语言符号

    如
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    成图

    在这里插入图片描述

    参考文献

    [1] 《程序设计语言编译原理》第三版 陈火旺
    [2] 编译原理教程以及课件

  • 相关阅读:
    Mainflux IoT:Go语言轻量级开源物联网平台,支持HTTP、MQTT、WebSocket、CoAP协议
    Ai时代降临,我们的未来又在哪里?
    2022年CCNA面试题库和答案
    Java编程练习题:面向对象练习
    【算法】TOP101-二叉树篇(持续更新ing)
    小程序数字输入框 正则验证,充值金额小数点后不能大于两位数字
    SpringBoot系列之动态定时程序改进版
    优化爬虫效率:利用HTTP代理进行并发请求
    某网站小说CSS反爬实战分析
    Codeforces Round 901 (Div. 2) - C. Jellyfish and Green Apple - 思维+位运算
  • 原文地址:https://blog.csdn.net/weixin_46949627/article/details/125546245
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号