VS 代码编译优先

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算符优先分析文法是一种工具,在编译的过程中,隶属于语法分析环节,却又与中间代码的生成息息相关,编译可以分为五个阶段:词法分析、语法分析、语义分析(中间代码的生成)、代码优化、目标代码生成。语法分析是指:在词法分析基础上,将单词符号串转化为语法单位(语法范畴)(短语、子句、句子、程序段、程序),并确定整个输入串是否构成语法上正确的程序。也就是说语法分析是检验输入串的语法是否正确,注意这里的语法正确,只是简单地符合自己定义的规范,而不能检测出运行时错误,比如"X/0",空指针错误,对象未初始化等错误。在这一个实验中,我将通过算符优先分析文法这一个工具,在语法分析的时候,顺便进行语义分析,也就是识别出语法单位,同时简要的将识别出的中间代码进行计算(目标代码的生成+运行),得到相应的结果,来检验自己设计的正确性。可以说题目虽然叫做算符优先分析文法,其实却是一个贯穿了“词法分析+语法分析+语义分析+中间代码优化+目标代码生成+运行”全过程的一个极具概括性的程序。如果能将这个程序得心应手的完成出来,我相信诸位对编译原理的掌握也算是炉火纯青了。时隔将近两年再来整理自己以前写过的实验报告,还是挺有感慨的,对一件东西感兴趣,原来影响还会如此深远,还记得自己当时连续六个小时全神贯注写出的实验报告,现在看看竟然写了五六十页,核心内容也有三四十页,不觉的感慨当年充满热情的时代慢慢的竟走出许久
已经给出了实验三算符优先分析法的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()) ``` 注意,这只是一个示例代码,您需要根据具体的需求对代码进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值