自定向下预测分析法(LL(1)非递归)

本文介绍了自定向下预测分析法(LL(1)非递归)的概念,强调在推导过程中无需回溯且每步仅有一种选择。通过预测分析表来决定选用的产生式,并给出了具体的伪代码示例,详细阐述了如何根据当前栈顶非终结符和输入符号进行分析,逐步构造语法树直至验证输入串是否符合文法。
摘要由CSDN通过智能技术生成

自定向下预测分析法(LL(1)非递归)

通过之前得学习,可以知道,使用自顶向下得预测分析法,选择产生式时没必要进行回溯,每一步推导仅有一个产生式符合要求,否则就出错。

怎么知道选哪个产生式呢?在进行推导之前,要有一个预测分析表,根据当前扫描到得终结符号和当前正在推导的非终结符,得到选用哪一条产生式。(是一个二维的表格)关于怎么生成预测分析表,前面的博客有提到过。

使用非递归的方法: - 当前正在推导的非终结符号在栈顶 - 通过查表,选择产生式 - 因为找到了产生式,所以需要用产生式的右部替换非终结符号,所以要将栈顶出栈 - 将产生式右部反着入栈(因为下一次还会从栈顶取出符号进行推导,首先推导的是产生式左端的符号,所以最左端的符号应该在栈顶,所以要反着入栈)

伪代码

版本一:

//将结束符入栈
push('#');
//将开始符号入栈
push('E');

i = 0;//指向输入缓冲区的指针,初始情况下,指向第一个字符
//获取栈顶的元素
top = getTop();
while(top != '#'){
	得到产生式M[top,s[i]]//M表示预测分析表
	if(top是非终结符){
		if(找到产生式){
			pop();//将当前分析的非终结符出栈、
			push(将产生式反着入栈);
			top = getTop();
		}
		else{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值