编译原理——构造预测分析表(判断某字符串是否是文法G(E)的句子)

简介: 编译原理——构造预测分析表(判断某字符串是否是文法G(E)的句子)

进入今天的学习前,若不理解LL(1)文法中的首符号集,后跟符号集和选择符号集,可看:

http://t.csdnimg.cn/BjSHv

构造预测分析表的步骤:

步骤1:对文法的每个规则U->u,执行步骤2与3


步骤2:对于每个终结符aFirst(u),让A[U,a]='U->u';


步骤3:如果(空串)First(u),则对Follow(U)中的每个终结符号b或#,让A[U,b]='U->u'或


A[U,#]='U->u';


步骤4:把A的每个未定义元素置为ERROR(用空白表示)


设有以下文法:

构造预测分析表之前需要列首符号集:

注:当首符号集中出现 (空串),那么就需要将“->”左边的Follow集计算出来

第一步:输入的一行表示文法中的终结符号,

第二步:

对于First(TE')={ ( , i }

以此类推可得,剩余空格都为ERROR

示例:输入字符串:i+i*i,该字符串是否为文法G[E]产生的句子

步骤一:

对于第一个要处理的字符” i “,弹出E,放入TE'

注:左边是栈底,右边是栈顶

输入 输出
#E i+i*i# 第一步,没有输出
#E'T i+i*i# E->TE'(第一步输入的输出)

从第二步开始就一定要从上一步输入的输出来写栈,例如:

上一步输入的输出为:E->TE',E'先入栈,T再入栈,反序入栈

步骤二:

接下来还是输入”i“,遇到的是栈顶T,结合分析表得到T->FT',再加上先弹出的”E“,得到栈#E'T'F,

接下来将”F“弹出来,对上输入的”i“,得到"F->i"

输入 输出
#E'T'F “i+i*i#” T->FT'
#E'Ti “i+i*i#” F->i

此时看到指针指向的输入“i”与栈顶”i“相同,就可以将两者弹出,得到

输入 输出
#E'T “+i*i#”

以此类推

输入 输出
#E "+i*i#" T'->ε
#E'T+ "+i*i#" E'->+TE'
#E'T "i*i#"
#E'T'F "i*i#" T->FT'
#E'T'i i*i#” F->i
#E'T'i *i#”
#E'T'F* "*i#" T'->*FT'
#E'T'F "i#"
#E'T'i "i#" F->i
#E'T' "#"
#E' "#" T'->ε
# "#" E'->ε

至此,可以判断此字符串是文法G(E)的句子

目录
相关文章
|
Linux Windows
Linux tar/rpm/yum命令软件安装
Linux tar/rpm/yum命令软件安装
1199 2
|
算法 Java 调度
操作系统之进程调度——优先权法和轮转法(附上样例讲解)
多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。
1167 0
操作系统之进程调度——优先权法和轮转法(附上样例讲解)
|
8月前
|
监控 Linux iOS开发
PyCharm启动项目和调试项目
本文介绍了在 PyCharm 中启动和调试 Python 项目的详细步骤,涵盖单文件运行、配置管理、命令行工具使用、断点调试、变量监控、远程调试及常见问题解决方案,帮助开发者高效利用 PyCharm 的调试功能提升开发效率。
1791 4
|
算法 安全 量子技术
【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | 马特赛特旋转算法 | LCG 线性同余算法 | Python Random 模块
【Python】蒙特卡洛模拟 | PRNG 伪随机数发生器 | 马特赛特旋转算法 | LCG 线性同余算法 | Python Random 模块
1144 0
|
9月前
|
JSON 中间件 Go
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
470 63
|
8月前
|
存储 Ubuntu Linux
使用VM虚拟机安装最新版Ubuntu系统
重启后开机进入登录界面 输入前面设置的密码进入系统 成功启动Ubuntu系统
|
网络安全 数据安全/隐私保护 网络架构
ABCDE类网络的划分及保留网段
ABCDE类网络的划分及保留网段
6151 7
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
编译原理(1)----LL(1)文法(首符号集,后跟符号集,选择符号集)
485 5
|
人工智能 自然语言处理 Serverless
方案测评 | AI大模型助力客户音频对话分析
该方案利用阿里云的函数计算、对象存储及智能对话分析技术,实现客户对话的自动化分析,精准识别客户意图,评估服务互动质量,提供数据驱动的决策支持。其特点包括智能化分析、数据驱动决策、低成本、自动化处理、精准识别、实时反馈及成本效益。方案适用于提升企业服务质量与客户体验,尤其在处理海量客户对话数据时表现突出。
|
缓存 安全 Shell
Git - 新建分支及提交代码到分支到远程仓库
Git - 新建分支及提交代码到分支到远程仓库
1755 0

热门文章

最新文章