编译原理(五)自底向上优先分析法、简单优先分析、算符优先分析、最左素短语、优先函数

自底向上分析方法,也称移进-归约分析法。

实现思想:

  • 对输入符号串自左向右进行扫描,并将输入符逐个移入一个栈中,边移入边分析,一旦栈顶符号串形成某个句型的句柄时,就用该产生式的左部非终结符代替相应右部的文法符号串,这称为归约
  • 重复这一过程,直到栈中只剩文法的开始符号时,则分析成功,也就确认输入串是文法的句子。
    在这里插入图片描述
    在这里插入图片描述

5.1 自底向上优先分析法概述

在这里插入图片描述

5.2 简单优先分析法

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

5.3 算符优先分析法

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

  • 15
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
已经给出了实验三算符优先分析法的Java代码和Python代码的实现,其中包括了读取文件并进行分析的部分。您可以参考上面的代码实现,在读取文件部分进行一些修改以适应您的具体需求。具体来说,您需要修改的部分包括: 1. 打开文件的方式,例如文件名、路径等。 2. 读取文件的方式,例如按行读取、一次性读取等。 3. 分割读取到的字符串,例如按空格分割、按逗号分割等。 4. 将读取到的字符串转换为数字或符号,例如将字符串"123"转换为数字123,将字符串"+"转换为符号+。 5. 将读取到的符号和数字放入符号栈和操作数栈中,进行比较和运算。 6. 对栈中剩余符号依次进行运算,并输出最终结果。 下面是一个Python的示例代码,用于读取文件中的算式并进行算符优先分析法的运算: ```python def precedence(op): if op in ['+', '-']: return 1 elif op in ['*', '/']: return 2 else: return 0 def calculate(a, b, op): if op == '+': return a + b elif op == '-': return a - b elif op == '*': return a * b elif op == '/': return a // b else: return 0 op_stack = [] num_stack = [] with open('input.txt', 'r') as f: for line in f: tokens = line.strip().split() for token in tokens: if token.isdigit(): num_stack.append(int(token)) else: while op_stack and precedence(op_stack[-1]) >= precedence(token): op = op_stack.pop() b = num_stack.pop() a = num_stack.pop() res = calculate(a, b, op) num_stack.append(res) op_stack.append(token) while op_stack: op = op_stack.pop() b = num_stack.pop() a = num_stack.pop() res = calculate(a, b, op) num_stack.append(res) print(num_stack.pop()) ``` 注意,这只是一个示例代码,您需要根据具体的需求对代码进行修改和调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值