当前位置: 首页 > news >正文

Standford Compiler Course Assignment 2

第二部分的作业是语法分析,通过编写cool.y(这个assignment的任务),利用bison将其自动生成语法分析LALR(1)的代码。

语法分析,就是将词法分析阶段已经识别好的token,按照语法的规则,构建抽象语法树的过程。

比如以下的代码:

x = (a + b) * (c - d);

可以构成下图的抽象语法树:

    =/ \x   */ \+   -/ \ / \a  b c  d

具体在cool.y 中,

在这里插入图片描述
这部分定义了非终结符non-terminal对应的semantic value. Union中的每一个field都可以是parsing动作的结果。

在stanford compiler的教学语言cool中,这就对应了AST的一个node。每一个non-terminal,都有其对应的semantic value。

左侧的各种类型在cool-tree.aps中都有对应定义,比如Features:

在这里插入图片描述

Feature即为class中的成员函数或者成员变量。因为可以有多个Feature,所以存在Features,即LIST[Feature].

下面则具体定义了所有的非终结符对应的AST节点类型。<>内部的,比如classes是在union中定义的value,而右侧的,比如class_list,我们需要定义规约该非终结符时,需要进行的操作。

在这里插入图片描述

在这里插入图片描述
上图中$$即为action的返回值,对应该抽象语法树AST对应的node。

具体看识别类的声明,class的规则:

1) CLASS TYPEID ‘{’ feature_list ‘}’ ‘;’
其动作:$$ = class_($2, idtable.add_string(“Object”), $4, stringtable.add_string(curr_filename))
对应cool-tree.aps中的:

在这里插入图片描述

传给class_的参数即为1)类名称,2)父类名称 3)成员变量/成员函数 4)文件名
起对应的位置如类名称即为 TYPEID,对应$2, feature_list对应$4,因此其动作action写成了如上图所示的样子。
2) CLASS TYPEID INHERITS TYPEID ‘{’ feature_list ‘}’ ‘;’
这里唯一不同的即为该类继承自父类,因此其第2个参数,父类名称传入了$4。具体的序号可以参考第205行的注释。

在这里插入图片描述

http://www.lryc.cn/news/204692.html

相关文章:

  • 基于Java的校园论坛管理系统设计与实现(源码+lw+部署文档+讲解等)
  • 谈谈你对Spring的理解
  • 系统架构师考试易混淆知识点总结
  • 反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )
  • 前端开发实践:vue中用qrcode库将超链接生成二维码图片
  • 数据库连接池有什么用?它有哪些关键参数?
  • Android Settings解析
  • Spring+spring mvc+mybatis整合的框架
  • 02-2、PyCharm中文乱码的三处解决方法
  • Axi接口的DDR3:参数,时序,握手机制
  • 浏览器标签上添加icon图标;html引用ico文件
  • 深入解析i++和++i的区别及性能影响
  • 2023年中国酒类新零售行业发展概况分析:线上线下渠道趋向深度融合[图]
  • 交通 | 实现可泛化性:机器学习求解VRP
  • php使用sqlServer
  • H3C SecParh堡垒机 get_detail_view.php 任意用户登录漏洞
  • python爬虫涨姿势板块
  • 软件设计原则-里氏替换原则讲解以及代码示例
  • Sui提供dApp Kit 助力快速构建React Apps和dApps
  • 2023年系统设计面试如何破解?进入 FAANG 面试的实战指南
  • (react+ts)vite项目中的路径别名的配置
  • 【MATLAB源码-第51期】基于matlab的粒子群算法(PSO)的栅格地图路径规划。
  • React之render
  • 基于springboot实现财务管理系统项目【项目源码+论文说明】计算机毕业设计
  • 设计模式:组合模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
  • 超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)
  • 【蓝桥每日一题]-动态规划 (保姆级教程 篇12)#照相排列
  • 纺织工厂数字孪生3D可视化管理平台,推动纺织产业数字化转型
  • 【七】SpringBoot为什么可以打成 jar包启动
  • 031-第三代软件开发-屏幕保护