首页 > 编程语言 >DCS292 编译器构造实验,手工编写递归下降预测分析程序(2.3)

DCS292 编译器构造实验,手工编写递归下降预测分析程序(2.3)

时间:2024-07-05 13:31:30浏览次数:10  
标签:翻译 语法分析 递归 分析程序 编译器 实验 DCS292 Oberon

help-assignment

2.4 实验四、手工编写递归下降预测分析程序

实验四要求你利用 Java 语言手工编写一个 Oberon-0 语言的语法分析程序,该语 法分析程序执行与实验三自动生成的语法分析程序类似的功能,但实验三要求逆 向工程工具生成的是调用图,而实验四要求生成的是流程图(Flowchart)。
该语法分析程序采用递归下降预测分析技术,要求你遵循语法制导翻译思想,先 设计 Oberon-0 语言的翻译模式,再据此编写语法分析程序。
2.4.1 实验步骤 4.1、设计 Oberon-0 语言的翻译模式
根据 Oberon-0 语言 BNF 定义中的语法规则,以及你完成 Oberon-0 源程序处理的 应用需求,为 Oberon-0 语言设计一个合适的翻译模式。
注意,由于实验四规定使用递归下降的预测分析技术,你需要改造文法以适用于 这种自顶向下的分析方法。例如,上下文无关文法中的左递归必须消除,以避免 递归下降的预测分析程序进入死循环。
2.4.2 实验步骤 4.2、编写递归下降预测分析程序
根据上一步骤获得的翻译模式,利用 Java 语言设计并实现一个 Oberon-0 语言的递归下降预测分析程序。
结合编译原理理论课所学知识,从一个翻译模式设计一个递归下降预测分析程序 已有比较成熟的启发式规则,你应遵循这些规则设计你的语法分析程序。
例如:文法的每一非终结符号应对应着一个递归子程序,开始符号则对应着其中 的主程序;由向前看符号(Lookahead)决定分支动作;每一个继承属性对应一 个形式参数,所有综合属性对应返回值,子结点的每一属性对应一个局部变量; 翻译模式中产生式右部的结终符号、非终结符号与语义动作分别执行匹配、递归 调用和嵌入代码等动作。
2.4.3 实验步骤 4.3、语法分析讨论:自顶向下 vs. 自底向上
通过你自己在实验三和实验四的实际体会,对递归下降预测分析技术和自底向上 的 LR 分析技术这两种不同的分析策略进行比较。
建议你在比较两种技术的各自优点和不足时,考虑(但不必局限于)以下方面:
 分析技术的简单性,包括分析程序是否易于调试。
 分析技术的通用性,即能处理的语言范围。
 是否便于表达语义动作以完成语法制导翻译。
 是否易于实现出错恢复。
 若以表格驱动方式取代递归程序实现,则分析表大小的优劣如何?
 分析速度

contact me on V help-assignment

标签:翻译,语法分析,递归,分析程序,编译器,实验,DCS292,Oberon
From: https://blog.csdn.net/telnet3000/article/details/140082120

相关文章

  • DCS292 编译器构造实验,实验三
    help-assignmentDCS292编译器构造实验,实验三3Oberon-0语言本实验的处理对象是Oberon-0语言,该语言中包含了高级程序设计语言的表达式,以及结构化程序设计中的结构化控制结构、子程序、参数传递等机制的抽象。3.1简介用于编译原理实验的计算机语言应足够简单,但又不......
  • 2.2 实验三、自动生成语法分析程序(JavaCUP)
    help-assignment2.3实验三、自动生成语法分析程序(JavaCUP)实验三要求你下载一个语法分析程序自动生成工具JavaCUP,利用该工具自动产生一个Oberon-0语言的语法分析和语法制导翻译程序;生成的程序源代码是以Java语言编写的。2.3.1实验步骤3.1、下载自动生成工具Java......
  • 探索Mojo语言的编译器优化:提升性能的秘诀
    ......
  • python编译器
        Python解释器安装配置下载    第一,搜索python官网WelcometoPython.orgTheofficialhomeofthePythonProgrammingLanguagehttps://www.python.org/   第二,进入此页面PythonReleasesforWindows|Python.orgTheofficialhomeofthePyth......
  • 如何在Windows11下部署Linux子系统中安装GCC编译器
    GCC编译器安装:1:gcc出现命令找不到2.直接按照提示来安装。会发现链接找不到服务器原因是因为默认的服务器在国外,无法直接进行访问,需要切换成国内的服务器3.切换软件源——换成国内的服务器注意:软件源要与版本号一致!演示所用均为22.04版本号,可根据版本号找对应的软件......
  • 一个非侵入式跟踪分析程序
          otel-profiling-agent为elastic开源项目,用于对生产环境中的应用程序进行性能分析,帮助开发者理解程序的运行情况,识别瓶颈,优化性能。用于包括CPU和内存使用情况的分析、调用跟踪、性能指标收集等功能。它是一个用于Linux的全系统、跨语言的性能分析器,通过eBPF(ExtendedB......
  • 【全拓展】编译器设置
    在DEV-C++中可以进行一些编译器设置,是很必要的本篇文本是全拓展文本一、语言DEV-C++一开始是英文版的,我们要将他改为中文版,怎么办?点击按钮"Tools",打开菜单点击下面的第二个按钮选择“Language”往上看选择以下选项最后点击OK按钮(可能会弹出提示,直接选择确定)二、缺......
  • vue模板编译器
    vue模板编译器import{ASTElement,compile}from'vue-template-compiler';import{TableColumnDesc}from"@/components/table/base-table/type.ts";exportconstcodeAdapter=function(code:string):{tableCode:string;columns:TableC......
  • <编译器> 7. 中间代码 | 4. 主要语句的IR树
    1.调用output:=concat(output,s)2.数组,赋值a[i+1]:=0数组变量a[i]为a(基地址)+i*w(偏移量)3.while循环伪代码:whilecnddobodystart:ifnotcndgotodonebodygotostartdone两种实现:4.for循环:变量声明+while循......
  • 一篇文章教你如何解决vs编译器中,库函数scanf的正常使用!!!
    前言:这将是我写的第二篇博文了,以后我将会坚持每天花固定时间来写博客,希望我当我写了一定数量的文章之后,我自己简单的就能够写出质量优秀文章来,加油!!!一、scanf函数无法正常使用的原因1.错误实例在vs中如果想直接实现并使用scanf函数,很抱歉直接使用,用不了,因为编译器压根就......