查看: 3729| 回复: 3
跳转到指定楼层
上一主题 下一主题
收起左侧

[汇编|硬件] [Coursera] Compilers Design (Unit #2)

🔗
defjex | 只看该作者 |倒序浏览
全局:
公开课
学校名称: Stanford
Unit号: 2
开课时间: 2012-10-22
课程全名: Compilers
平台: Coursera

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
previously:
PA-1    http://www.1point3acres.com/bbs/thread-40902-1-1.html

Programming Assignment 2
In this assignment you will write a parser for Cool. The assignment makes use of two tools: the parser
generator (the C++ tool is called bison; the Java tool is called CUP) and a package for manipulating
trees. The output of your parser will be an abstract syntax tree (AST). You will construct this AST
using semantic actions of the parser generator.

跟这次作业相关的有用的文档
cool语言的语法  https://spark-university.s3.amaz ... s%2Fcool_manual.pdf  重点看第17页
CUP的语法  http://www2.cs.tum.edu/projects/cup/manual.html  重点看precedences, parser rules, 以及error处理该加在哪里



评分

参与人数 1大米 +1 收起 理由
m4reiiy + 1

查看全部评分


上一篇:[Coursera] Compilers Design (Unit #1)
下一篇:算法课第二弹终于出来了-----今天开课了!!!!HW1 due 12/16
🔗
 楼主| defjex 2012-10-28 14:44:15 | 只看该作者
全局:
第二次作业

评分

参与人数 1学分 +1 收起 理由
m4reiiy + 1

查看全部评分

回复

使用道具 举报

🔗
cs900601 2013-3-4 10:31:48 | 只看该作者
全局:
本帖最后由 cs900601 于 2013-3-3 20:38 编辑

正所谓幸福的家庭都是一样的,而不幸的家庭则各有各的不幸。这个作业就很好地诠释了这一点。为什么呢?因为想parse正确的输入,总归是一样的方法,但是想要处理异常的输入时,就需要正确地使用error这个语法规则,如果不正确地处理错误,就会出现千奇百怪的结果。error用到的地方是表示“什么地方能容忍错误”。而为了正确地容忍错误,就需要恰当地将语法规则拆开一些。我猜是因为Parsing的结果是Production,error规则的意思是说,“这个Production在出error的时候不会被扔掉,而error里面的内容会被扔掉”。
但也并不是这样,我有一个输入用例是几乎用作弊的方法做的 ------ 实在猜不出来为什么reference parser会是那样parse的……,所以设计了一个陷阱让我的parser产生和reference parser一模一样的输出结果。这个用例是casenoexpr。
做的时候推倒重来了一回,因为第一次我看到了java的cup语法规则文件后觉得expression与statement应该分开。但是后来给parse喂了几个测试用例后再加重做了一回发现这个语法里面expr与stmt是不分开的。所以let、while、if、case之类的既可以在EQUAL的左边也可以在右边。

pa2.png (66.09 KB, 下载次数: 1)

pa2.png

评分

参与人数 1大米 +1 收起 理由
m4reiiy + 1

查看全部评分

回复

使用道具 举报

🔗
Shuang7 2013-4-9 12:15:42 | 只看该作者
全局:
本帖最后由 Shuang7 于 2013-4-9 13:33 编辑

一言难尽。。。
看题目就陆陆续续看n天!每次看十几分钟就放弃了,反复看视频,下一次再从头看handout。。终于在反复四五次之后明白了题意!仅仅是题意好吗= = (其实就是写语法,parsing算法什么的bison自己搞定!)
然后就是熟悉工具,bison神马的、AST pakage神马的,完全不明白,最后还是从网上找到了一些范例做参考,终于磕磕绊绊开始写。第一次看到从10/70到16/70的进步真是激动不已。。。4个小时之后终于磨到了36/70,休息去了。。第二天又开始搞,基本语法搞定后比较烦人的是error handling,不过最终通过一个小技巧搞定了(要找对位置!千万不要把expression整个搞砸),又是4个小时,最终彻底搞定70/70...
貌似后两个assignments更难,sigh... 慢慢磨吧。。
(毫无编译原理背景学起来真吃力。。)


评分

参与人数 1学分 +1 收起 理由
m4reiiy + 1

查看全部评分

回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表