色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Stanford編譯的原理是什么?

處理器與AI芯片 ? 來(lái)源:處理器與AI芯片 ? 2023-09-02 09:55 ? 次閱讀

第一個(gè)作業(yè)是根據(jù)這門(mén)課定義的cool語(yǔ)言,寫(xiě)一個(gè)詞法分析的rule,詞法分析對(duì)我?guī)椭淮螅饕抢斫馐褂镁涂梢裕痛蟛糠謪⒄誫ithub上的實(shí)現(xiàn)了。

Workflow

1)cool/include/PA2/cool-parse.h 里面定義了需要處理的關(guān)鍵字

/* Tokens.  */
#define CLASS 258
#define ELSE 259
#define FI 260
#define IF 261
#define IN 262
#define INHERITS 263
....

2) 實(shí)驗(yàn)的主要內(nèi)容是在cool.flex中增加對(duì)關(guān)鍵字,注釋,嵌入注釋,字符串的處理。在cool.flex內(nèi)部定義好規(guī)則時(shí)候,make flexer 時(shí),會(huì)調(diào)用flex. flex 輸入cool.flex, 輸出cool-lex.cc,這個(gè)就是flex自動(dòng)產(chǎn)生的處理詞法的代碼。

3)產(chǎn)生flex后,可以調(diào)用perl pa1-grading.pl,打分會(huì)報(bào)告哪些沒(méi)有處理好

4)沒(méi)有處理好的

c53e8d20-48b6-11ee-97a6-92fbcf53809c.png

對(duì)于這種,可以直接grep “l(fā)ine number test 2”,查看時(shí)那個(gè)文件沒(méi)有處理好。./grading 目錄下有一堆輸入文件

c558845a-48b6-11ee-97a6-92fbcf53809c.png

可以直接調(diào)用 ./lexer ./gool.cool 或者出錯(cuò)的文件 ./lexer ./lineno2.cool

它會(huì)根據(jù)我們輸入的規(guī)則,print信息

c57296f6-48b6-11ee-97a6-92fbcf53809c.png

我的問(wèn)題是注釋里面遇到換行,沒(méi)有增加linenumber,在comment里面加上遇到換行符時(shí),遞增linenumber就對(duì)了。

上面是環(huán)境的問(wèn)題,下面是除了課程的資料以外需要了解的內(nèi)容。

背景知識(shí)

遇到的問(wèn)題我就直接問(wèn)chatgpt了。

1)Flex支持的函數(shù):

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.

我列出了主要用的,主要用的還是yymore(),用來(lái)繼續(xù)處理token的內(nèi)容;另一個(gè)就是yytext 則是表示當(dāng)前匹配的內(nèi)容。這里主要是講數(shù)字,字符串以及自定義的object與符號(hào)表中的內(nèi)容連接起來(lái)。


c5ac864a-48b6-11ee-97a6-92fbcf53809c.png

2) 如何編寫(xiě)cool.flex

對(duì)于關(guān)鍵字的支持比較簡(jiǎn)單,主要還是支持字符串和注釋,以及嵌套注釋。

這里就是狀態(tài)機(jī),初始時(shí)和正常狀態(tài)下都處于INITIAL狀態(tài),cool語(yǔ)言時(shí)的注釋以(*開(kāi)頭,考慮到會(huì)存在嵌套注釋,因此在INITIAL,COMMENTS,INLINE_COMMENTS三種狀態(tài)下,都可能會(huì)遇到(*此時(shí)我們進(jìn)入COMMENTS狀態(tài),因此BEGIN COMMENTS。

"(*" {
    comment_layer++;
    BEGIN COMMENTS;
}

在注釋中,遇到非特殊字符,不需要特殊處理,可以直接忽視,因此{(lán)}內(nèi)部都為空。

[^n(*]* { }

[()*] { }

在遇到換行符時(shí),增加行數(shù)計(jì)數(shù)。


 {
    curr_lineno++;
}

這里的comment_layer–與上面的comment_layer++對(duì)應(yīng),進(jìn)入comment時(shí)遞增,出comment遞減,主要是為了應(yīng)對(duì)嵌套注釋。在走到最外層時(shí),回到INITIAL狀態(tài)。

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

總結(jié)來(lái)說(shuō), 就是下面的這個(gè)規(guī)則

DEFINED STATE {
Action
}





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19317

    瀏覽量

    230097
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    579

    瀏覽量

    20546
  • 狀態(tài)機(jī)
    +關(guān)注

    關(guān)注

    2

    文章

    492

    瀏覽量

    27557

原文標(biāo)題:Stanford 編譯原理 編程作業(yè)1

文章出處:【微信號(hào):處理器與AI芯片,微信公眾號(hào):處理器與AI芯片】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    淺析可提升Vivado編譯效率的增量編譯方法

    增量編譯:使用增量編譯滿足最后時(shí)刻 HDL 變動(dòng)需求,僅針對(duì)已變動(dòng)邏輯進(jìn)行布局布線,從而可節(jié)省時(shí)間。
    的頭像 發(fā)表于 12-13 10:14 ?5499次閱讀

    如何讓OpenHarmony編譯速度“狂飆”

    OpenHarmony 有兩種編譯方式,一種是通過(guò) hb 工具編譯,一種是通過(guò) build.sh 腳本編譯。本文筆者將提升 build.sh 方式編譯速度的方法整理分享給大家。
    的頭像 發(fā)表于 02-14 09:31 ?2013次閱讀

    Stanford編譯原理詳解

    第二部分的作業(yè)是語(yǔ)法分析,通過(guò)編寫(xiě)cool.y(這個(gè)assignment的任務(wù)),利用bison將其自動(dòng)生成語(yǔ)法分析LALR(1)的代碼。
    的頭像 發(fā)表于 10-25 10:47 ?680次閱讀
    <b class='flag-5'>Stanford</b><b class='flag-5'>編譯</b>原理詳解

    [1.1.1]--什么是編譯原理

    編譯原理
    jf_60701476
    發(fā)布于 :2022年12月27日 10:57:13

    GAL編譯工具

    GAL編譯工具 Atmel提供的GAL編譯工具 4.8a版本
    發(fā)表于 04-14 15:42 ?83次下載

    PCM編譯碼實(shí)驗(yàn)

    PCM編譯碼實(shí)驗(yàn) 一、實(shí)驗(yàn)?zāi)康?. 掌握PCM編譯
    發(fā)表于 10-21 13:35 ?9151次閱讀
    PCM<b class='flag-5'>編譯</b>碼實(shí)驗(yàn)

    QT/E和Qtopia的編譯詳解

    首先說(shuō)說(shuō)編譯PC上的QT/E,我起初的時(shí)候不知道編譯PC上的QT/E編譯qpe和交叉編譯后的qpe有什么不同,
    發(fā)表于 05-10 10:53 ?2846次閱讀

    誰(shuí)能縮短大容量FPGA的編譯時(shí)間?增量式編譯QIC!

    增量式編譯(Incremental Compilation)是ALTERA為解決大容量FPGA設(shè)計(jì)編譯時(shí)間太長(zhǎng)的問(wèn)題給出的一個(gè)新式工具!在本文中我們將闡述QIC在縮短編譯時(shí)間方面的作用。
    發(fā)表于 12-25 11:26 ?5021次閱讀

    Keil編譯常見(jiàn)問(wèn)題

    吳鑒鷹總結(jié)的Keil 編譯常見(jiàn)問(wèn)題,吳鑒鷹總結(jié)的Keil 編譯常見(jiàn)問(wèn)題。
    發(fā)表于 07-22 15:31 ?10次下載

    講述增量編譯方法,提高Vivado編譯效率

    當(dāng)RTL代碼修改較少時(shí),使用增量編譯功能可以提高工程的編譯速度,Incremental Compile增量編譯是Vivado提供的一項(xiàng)高階功能。目的旨在當(dāng)設(shè)計(jì)微小的改變時(shí),重用綜合和布局布線的結(jié)果,縮短
    的頭像 發(fā)表于 01-22 17:27 ?1w次閱讀
    講述增量<b class='flag-5'>編譯</b>方法,提高Vivado<b class='flag-5'>編譯</b>效率

    什么是預(yù)編譯

    預(yù)編譯就是處理以#開(kāi)頭的指令,比如賦值#include包含的文件、#define宏定義的替換、條件編譯等。預(yù)編譯就是為編譯前做準(zhǔn)備工作的階段,主要處理以#開(kāi)頭的預(yù)
    發(fā)表于 01-13 13:52 ?0次下載
    什么是預(yù)<b class='flag-5'>編譯</b>

    交叉編譯器安裝教程

    交叉編譯器中“交叉”的意思就是在一個(gè)架構(gòu)上編譯另外一個(gè)架構(gòu)的代碼,相當(dāng)于兩種架構(gòu)“交叉”起來(lái)了。Ubuntu 自帶的 gcc 編譯器是針對(duì) X86 架構(gòu)的,而我們現(xiàn)在要編譯的是 ARM
    的頭像 發(fā)表于 09-29 09:12 ?3530次閱讀

    Linux內(nèi)核編譯腳本

    獲得編譯命令及選項(xiàng) 編譯linux時(shí),默認(rèn)不會(huì)顯示編譯的命令,如果你要獲得編譯命令及其選項(xiàng),可以在make命令后面加上宏定義: make V= 1 如果希望
    的頭像 發(fā)表于 09-27 11:52 ?657次閱讀

    3568編譯環(huán)境搭建

    主要介紹如何在本地搭建編譯環(huán)境來(lái)編譯rockchipBBuildrootllinuxSDK的源代碼。d當(dāng)前sdk只支持在linux環(huán)境下編譯,并提供linux的交叉編譯工具。
    發(fā)表于 12-13 11:23 ?18次下載

    Triton編譯器與其他編譯器的比較

    Triton編譯器與其他編譯器的比較主要體現(xiàn)在以下幾個(gè)方面: 一、定位與目標(biāo) Triton編譯器 : 定位:專注于深度學(xué)習(xí)中最核心、最耗時(shí)的張量運(yùn)算的優(yōu)化。 目標(biāo):提供一個(gè)高度抽象、靈活、高效
    的頭像 發(fā)表于 12-24 17:25 ?378次閱讀
    主站蜘蛛池模板: 国产麻豆剧果冻传媒免费网站 | 久久久无码精品一区二区三区 | china18一19 第一次| 99精品久久精品一区二区| 99久久久国产精品免费调教| 爱很烂qvod| 东日韩二三区| 国产啪视频在线播放观看| 精品国产国偷自产在线观看| 伦理片 qvod| 人人爽久久久噜噜噜丁香AV| 忘忧草下载| 亚洲影院在线播放| 69ZXX少妇内射无码| 办公室激情在线观看| 国产成人综合95精品视频免费| 国产又爽又黄又不遮挡视频 | 99婷婷久久精品国产一区二区| YELLOW免费观看完整视频| 古代荡乳尤物H妓女调教| 国产亚洲精品AV麻豆狂野| 久久婷婷色一区二区三区| 欧美中文字幕一区二区三区| 无码欧美毛片一区二区三在线视频| 亚洲色欲国产免费视频| 99精品中文字幕在线观看| 国产成人在线小视频| 久久久久国产精品嫩草影院 | 好男人午夜www视频在线观看| 老色69久久九九精品高潮| 热久久2018亚洲欧美| 亚洲精品蜜桃AV久久久| 97午夜伦伦电影理论片| 国产精品久久久久无码AV色戒| 久久性综合亚洲精品电影网| 日本色呦呦| 一个人的HD高清在线观看 | 同居了嫂子在线观看| 在线观看免费国产成人软件| 成年人视频在线免费看| 久久99国产精品无码AV|