Standford Compiler Course Assignment 1

这篇具有很好参考价值的文章主要介绍了Standford Compiler Course Assignment 1。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

第一个作业是写一个词法分析的rule,词法分析对我帮助不大,主要是理解使用就可以,就大部分参照github上的实现了。
实验需要注意的内容:
1)cool/include/PA2/cool-parse.h 里面定义了需要处理的关键字

/* Tokens.  */
#define CLASS 258
#define ELSE 259
#define FI 260
#define IF 261
#define IN 262
#define INHERITS 263
....
  1. 实验的主要内容是在cool.flex中增加对关键字,注释,嵌入注释,字符串的处理。在cool.flex内部定义好规则时候,make flexer 时,会调用flex. flex 输入cool.flex, 输出cool-lex.cc,这个就是flex自动产生的处理词法的代码。

3)产生flex后,可以调用perl pa1-grading.pl,打分会报告哪些没有处理好
4)没有处理好的
Standford Compiler Course Assignment 1,斯坦福编译器作业
对于这种,可以直接grep “line number test 2”,查看时那个文件没有处理好。./grading 目录下有一堆输入文件

Standford Compiler Course Assignment 1,斯坦福编译器作业

可以直接调用 ./lexer ./gool.cool 或者出错的文件 ./lexer ./lineno2.cool
它会根据我们输入的规则,print信息。
Standford Compiler Course Assignment 1,斯坦福编译器作业

我的问题是注释里面遇到换行,没有增加lineno,在comment里面加上对了。

上面是环境的问题,下面是除了课程的资料以外需要的了解的内容,遇到的问题我就直接问chatgpt了。
1)Flex支持的函数:
yymore(): As mentioned earlier, this function is used to accumulate text from multiple rule matches before taking action. It’s particularly useful when you want to combine consecutive matches into a single token.

yytext: As discussed before, this global variable holds the current matched text or lexeme. It’s automatically populated by Flex based on the pattern that matches.

yylineno: This global variable keeps track of the current line number being processed by the lexer. You can use it to maintain accurate line number information for error reporting or other purposes.

These are some of the key functions and features that you’ll encounter while using Flex to build lexical analyzers. Remember that Flex provides a set of tools and features to make it easier to write lexical rules and integrate the lexer into your larger compiler or parsing system.

我列出了主要用的,主要用的还是yymore(),用来继续处理token的内容; 另一个就是yytext 则是表示当前匹配的内容。这里主要是讲数字,字符串以及自定义的object与符号表中的内容连接起来。
Standford Compiler Course Assignment 1,斯坦福编译器作业
2) 如何编写cool.flex
对于关键字的支持比较简单,主要还是支持字符串和注释,以及嵌套注释。
这里就是状态机,初始时和正常状态下都处于INITIAL状态,cool语言时的注释以"( *" 开头,考虑到会存在嵌套注释,因此在INITIAL,COMMENTS,INLINE_COMMENTS三种状态下,都可能会遇到 "( * " 此时我们进入COMMENTS状态,因此BEGIN COMMENTS。

<INITIAL,COMMENTS,INLINE_COMMENTS>"(*" {
    comment_layer++;
    BEGIN COMMENTS;
}

在注释中,遇到非特殊字符,不需要特殊处理,可以直接忽视,因此{}内部都为空。

<COMMENT>[^\n(*]* { }

<COMMENT>[()*] { }

在遇到换行符时,增加行数计数。


<COMMENT>\n {
    curr_lineno++;
}

这里的comment_layer–与上面的comment_layer++对应,进入comment时递增,出comment递减,主要是为了应对嵌套注释。在走到最外层时,回到INITIAL状态。


<COMMENT>"*)" {
    comment_layer--;
    if (comment_layer == 0) {
        BEGIN INITIAL;
    }
}

github路径:https://github.com/hitqshao/stanford-compilers-coursework.git
这个仓库我fork了https://github.com/gboduljak/stanford-compilers-coursework.git, 对应修改的代码在./assignments/PA/cool.flex.
​​​​​​
​​Standford Compiler Course Assignment 1,斯坦福编译器作业文章来源地址https://www.toymoban.com/news/detail-690898.html

到了这里,关于Standford Compiler Course Assignment 1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 斯坦福人生设计课——简略笔记(未完待更新)

    来源: ⽐尔 · 博内特 戴夫 · 伊万斯 著图书《人生设计课》 目录 一、认清当下的情况,从四个维度观察自己的人生 二、平衡人生,但不要走入误区 2.1 记录你的“美好时光日志”: 2.1.1 记录内容: 2.1.2 辅助反思的方法:AEIOU方法 2.1.3 一个小TIPS: 2.1.4 如果你发现自己当下

    2024年02月11日
    浏览(42)
  • 自驱力超强的羊驼?斯坦福微调LLaMa

    大型“指令调优”语言模型在新任务上展现了Zero-shot的卓越能力,但严重依赖于人类编写的指令数据,而这些数据在数量、多样性和创造性方面都是有限的。 斯坦福科研人员引入了self-instruction框架,提高指令遵循能力来自我迭代进化,与InstructGPT的性能相当,相比原始GPT3提

    2024年02月09日
    浏览(43)
  • 【LLM系列】00:斯坦福 Alpaca 模型介绍及其复现

    西风吹老洞庭波,一夜湘君白发多。醉后不知天在水,满船清梦压星河。小伙伴好,我是微信公众号《小窗幽记机器学习》的小编:卖核弹的小女孩。更多、更新文章欢迎关注微信公众号:小窗幽记机器学习。后续会持续输出模型推理加速、工程部署、LLM、AI艺术等系列,敬

    2024年02月13日
    浏览(48)
  • 斯坦福2023【FrugalGPT】减少大模型的商业化应用成本

    FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance 这篇文章主要是要解决如何降低调用大语言模型的成本(ChatGPT)。大模型API调用成本主要是三方面的:1. prompt cost(输入的prompt);2. generation cost(输出的部分);3. 每次调用的固定开销(网费等)。不用的模型之前的

    2024年02月06日
    浏览(60)
  • 斯坦福| ChatGPT用于生成式搜索引擎的可行性

    文|智商掉了一地 随着 ChatGPT 在文本生成领域迈出了重要一步,Bing 浏览器也接入了聊天机器人功能,因此如何保证 Bing Chat 等搜索引擎结果的精确率和真实性也成为了搜索领域的热门话题之一。 当我们使用搜索引擎时,往往希望搜索结果能够真实准确地反映我们的需求。然

    2024年02月06日
    浏览(41)
  • 斯坦福Dan Boneh密码学——02 计算密码与语义安全

    语义安全这块内容实在是被书绕晕了,虽然模型就那么一个,但有各种各样的数学符号交织证明,还有官方深奥的语言表述。第一次看是一知半解的,后面势必还要再返回来精读几遍完善笔记。以篇幅来看,语义安全是密码学中非常重要的一个版块。 计算密码与语义安全 我

    2024年02月08日
    浏览(67)
  • 【斯坦福】FrugalGPT: 如何使用大型语言模型,同时降低成本并提高性能

    FrugalGPT: 如何使用大型语言模型,同时降低成本并提高性能 作者:Lingjiao Chen, Matei Zaharia, James Zou 本文介绍了一种新颖的方法,旨在解决使用大型语言模型(LLM)时面临的成本和性能挑战。随着GPT-4和ChatGPT等LLM的日益流行,我们需要找到降低这些模型推理成本的策略。作者强调

    2024年02月11日
    浏览(49)
  • 斯坦福 Stats60:21 世纪的统计学:前言到第四章

    原文: statsthinking21.github.io/statsthinking21-core-site/index.html 译者:飞龙 协议:CC BY-NC-SA 4.0 这本书的目标是讲述统计学的故事,以及它如何被全球的研究人员所使用。这是一个与大多数统计学入门书籍中讲述的故事不同的故事,后者侧重于教授如何使用一套工具来实现非常具体的

    2024年01月18日
    浏览(50)
  • 大模型也内卷,Vicuna训练及推理指南,效果碾压斯坦福羊驼

    2023开年以来,大模型进入疯狂内卷状态,大模型的发布都要以“天”为单位进行迭代。 之前,尝试了 从0到1复现斯坦福羊驼(Stanford Alpaca 7B) ,下面我们来尝试从0到1复现Vicuna训练及推理。 继斯坦福羊驼(Stanford Alpaca)之后,UC伯克利、CMU、斯坦福等机构的学者,联手发布

    2024年02月08日
    浏览(50)
  • 斯坦福发布 最新 GPT 模型排行榜 AlpacaEval【AI工具免费使用】

    官网地址:https://www.tomchat.fun 🤖 支持gpt4 / gpt-3.5 / claude /code-llm 🎨 支持 AI绘画 🆓 每天十次免费使用机会 🪄 无需魔法 GPT-4 登顶商用模型 微软 WizardLM 登顶开源模型 AlpacaEva 是来自斯坦福的团队发布的一款 大语言模型 自动评测系统, 它是一种基于 LLM 的全自动评估基准,且

    2024年02月02日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包