LL(1)分析算法

news/2024/11/16 21:00:18/文章来源:https://www.cnblogs.com/cxjy0322/p/18549802

LL(1) 分析算法

  • 从左(L)向右读入程序,最左(L)推导,采用一个(1)前看符号.
    • 分析高效(线性时间)
    • 错误定位和诊断信息准确
    • 有很多开源或商业的生成工具
      • ANTLR
  • 算法基本思想
    • 表驱动的分析算法
graph LRx1["词法分析器"]--"记号\n\n"-->x2["语法分析器"]---->x3["树"]x2---->x4["分析栈"]x2---->x5["分析表"]x6["语法分析器"]---->x5

一般条件下 LL(1) 分析表构造

  • 一般情况下需要知道某个非终结符是否可以推出空串

  • NULLABLE

  • 并且一般需要知道在某个非终结符后面跟着什么符号

    • 跟随集FOLLOW

NULLABLE集合

归纳定义:

非终结符X属于集合 NULLABLE ,当且仅当:

  • 基本情况:
    • \(X \rightarrow \epsilon\)
  • 归纳情况
    • \(X\rightarrow Y_1 \cdots Y_n\)
      • \(Y_1 \cdots Y_n\) 是n个非终结符,且都属于NULLABLE 集

FIRST 集合的完整计算公式

  • 基于归纳的计算规则:

    • 基本情况:

      • \(X\rightarrow a\)

        • \(FIRST(X) \cup = \{a\}\)
      • 归纳情况:

      • \(X \rightarrow Y_1 Y_2\cdots Y_n(Y_i \sub NULLABLE)\)

        • \(FIRST(X) \cup = FIRST(Y_i) (i=1,2,3,4,5....,n)\)

不动点算法计算FOLLOW集合:

\(while(some set is changing):\)

\(foreach(production p: N->\beta_1 \cdots \beta_n )\)

\(foreach(\beta_i from \beta_1 to \beta_n)\)

\(if(\beta_i == a...)\)

\(FIRST(N) \cup = \{a\}\)

\(break\)

\(if(\beta_i == M)\)

\(FIRST(N)\ \ \cup = FIRST(M)\)

\(break\)


First集定义:

\(First\)集合是对产生式右部的字符串而言的,求取的是非终结符\(V_T\)(或终结符、空字符、文法符号串)的开始符号集合,集合中包含的是由左部非终结符\(V_T\)推导得到的终结符\(V_N\)或空字符ε。以α表示一个文法的字符串,FIRST(α) 表示由α推导出的串的首个终结符或空字符组成的集合。

​ 本质就是一条关系能够出现的能确定的前缀

Follow集定义:

​ Follow集合是对某个非终结符而言的,求取的是非终结符\(V_T\)的后继符号集合,集合中包含的是由非终结符VT后面紧跟的终结符\(V_N\)和结束符,不能出现空字符ε 。以X表示一个非终结符,FOLLOW(X) 表示当X通过规约出现时,接下来的输入可能是哪些终结符。

​ 本质就是一条关系可能产生的后随符号集

First_s集合的计算:

​ 对于每一条产生式规则的而言,即产生式能够产生的所有 First 的集合

​ 指一组关系中能够产生的所有的前缀的集合,右部,从左往右的NULLABLE产生式的First集的并集,直到遇到第一个非NULLABLE产生式或最后一个产生式,再并上该产生式的First集,就是整个关系的First_s集.

处理LL(1)文法中的冲突:
  • 消除左递归,存在左递归的文法会引起 \(LL(1)\) 冲突

LR(0)分析算法

  • 自底向上分析的基本思想:
    • \(\epsilon\)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834785.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于HDFS路径文件夹名称的问题

问题发现 ​ 最开始的需求:修改/origin_data/gmall/db目录下所有以inc结尾的文件夹里的文件夹(名称为2024-11-15)修改为2020-6-14 问gpt写了个脚本: #!/bin/bash# 遍历 /origin_data/gmall/db 下所有以 "inc" 结尾的文件夹 for dir in $(hdfs dfs -ls /origin_da…

2024数据采集与融合技术实践-作业4

作业①: 1)使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 1.核心代码描述 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDri…

第七章课后习题

习题7.1点击查看代码 import numpy as np from scipy.interpolate import interp1d from scipy.integrate import quad import matplotlib.pyplot as pltg = lambda x: (3 * x ** 2 + 4 * x + 6) * np.sin(x) / (x ** 2 + 8 * x + 6) x0 = np.linspace(0, 10, 1000) y0 = g(x0)…

第八章课后习题

习题8.4点击查看代码 from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt # 设置 Matplotlib 不使用 LaTeX plt.rc(font, size=15) plt.rc(text, usetex=False)# 定义微分方程系统 dz = lambda z, t: [-z[0]**3 - z[1], z[0] - z[1]**3]#…

Solidity学习笔记-1

01.Hello World 开发工具 Remix // SPDX-License-Identifier: MIT // 软件许可,不写编译会出现警告 // 版本,“0.8.21”-->不能小于这个版本,"^"-->不能大于0.9.0 pragma solidity ^0.8.21; // 创建合约 contract HelloWorld {string public helloworld = &quo…

gofiber: 使用模板

一,安装模板库 $ go get github.com/gofiber/template/html/v2 go: downloading github.com/gofiber/template/html/v2 v2.1.2 go: downloading github.com/gofiber/utils v1.1.0 go: added github.com/gofiber/template/html/v2 v2.1.2 go: added github.com/gofiber/utils v…

书生共学大模型实战营第4期 L1G6000 OpenCompass评测作业

基础任务:使用OpenCompass评测浦语API记录复现过程并截图 按照教程流程进行,这里我们采用的测试样本数为2,所以不同于教程,Acc可能为0,25%,50%,75%,100%,介绍两个遇到的bug:metadata模块导入错误:ModuleNotFoundError: No module named importlib.metadata解决方法:…

ShardingSphere如何轻松驾驭Seata柔性分布式事务?

0 前文 上一文解析了 ShardingSphere 强一致性事务支持 XAShardingTransactionManager ,本文继续:讲解该类 介绍支持柔性事务的 SeataATShardingTransactionManagersharding-transaction-xa-core中关于 XAShardingTransactionManager,本文研究 XATransactionManager 和 Shar…

20222303 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1 本周学习内容回顾 使用了Metasploit框架,其是一个功能强大的渗透测试框架。在使用的过程当中,Metasploit 提供了种类繁多的攻击模块,涵盖了远程代码执行、服务拒绝、提权等多种攻击方式,支持对多种操作系统和应用程序进行测试。除了漏洞利用,它还具备强大的…

20222325 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: DNS注册人及联系方式;该域名对应IP地址;IP地址注册人及联系方式;IP地址所在国家、城市和具体地理位置。 PS:使用whois、dig、nslookup、traceroute、以及各类在线和离线…

识海社区打卡-6

这场掉回灰名了,本来必然上大分,原因无他-查寝 先来查波战绩:c题没过纯属是因为被查寝查了室友也是个不知变通的让查寝记我头上了,byd害我赶回去,本来这题必出 看看我最后一发提交错哪了 void solve() {int n;cin >> n;if (n % 2){if (n < 27){cout << -1 …

第七次高级程序语言设计作业

班级:https://edu.cnblogs.com/campus/fzu/2024C 作业要求:https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400115 姓名:洪育豪 7.1问题:无7.2问题:无7.3问题:无7.4问题:无 含义说明 int a; - 定义一个普通整型变量。 int a; - 定义一个指向整型变量…