在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Stanford編譯的原理是什么?

處理器與AI芯片 ? 來源:處理器與AI芯片 ? 2023-09-02 09:55 ? 次閱讀

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

Workflow

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
....

2) 實驗的主要內容是在cool.flex中增加對關鍵字,注釋,嵌入注釋,字符串的處理。在cool.flex內部定義好規(guī)則時候,make flexer 時,會調用flex. flex 輸入cool.flex, 輸出cool-lex.cc,這個就是flex自動產生的處理詞法的代碼。

3)產生flex后,可以調用perl pa1-grading.pl,打分會報告哪些沒有處理好

4)沒有處理好的

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

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

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

可以直接調用 ./lexer ./gool.cool 或者出錯的文件 ./lexer ./lineno2.cool

它會根據我們輸入的規(guī)則,print信息。

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

我的問題是注釋里面遇到換行,沒有增加linenumber,在comment里面加上遇到換行符時,遞增linenumber就對了。

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

背景知識

遇到的問題我就直接問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.

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


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

2) 如何編寫cool.flex

對于關鍵字的支持比較簡單,主要還是支持字符串和注釋,以及嵌套注釋。

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

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

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

[^n(*]* { }

[()*] { }

在遇到換行符時,增加行數計數。


 {
    curr_lineno++;
}

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

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

總結來說, 就是下面的這個規(guī)則

DEFINED STATE {
Action
}





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19829

    瀏覽量

    233866
  • 字符串
    +關注

    關注

    1

    文章

    589

    瀏覽量

    21166
  • 狀態(tài)機
    +關注

    關注

    2

    文章

    493

    瀏覽量

    28109

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

文章出處:【微信號:處理器與AI芯片,微信公眾號:處理器與AI芯片】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

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

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

    Stanford編譯原理詳解

    第二部分的作業(yè)是語法分析,通過編寫cool.y(這個assignment的任務),利用bison將其自動生成語法分析LALR(1)的代碼。
    的頭像 發(fā)表于 10-25 10:47 ?861次閱讀
    <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編譯碼實驗

    PCM編譯碼實驗 一、實驗目的1. 掌握PCM編譯
    發(fā)表于 10-21 13:35 ?9372次閱讀
    PCM<b class='flag-5'>編譯</b>碼實驗

    QT/E和Qtopia的編譯詳解

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

    誰能縮短大容量FPGA的編譯時間?增量式編譯QIC!

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

    Keil編譯常見問題

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

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

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

    什么是預編譯

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

    交叉編譯器安裝教程

    交叉編譯器中“交叉”的意思就是在一個架構上編譯另外一個架構的代碼,相當于兩種架構“交叉”起來了。Ubuntu 自帶的 gcc 編譯器是針對 X86 架構的,而我們現在要編譯的是 ARM
    的頭像 發(fā)表于 09-29 09:12 ?3942次閱讀

    Linux內核編譯腳本

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

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

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

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

    Triton編譯器與其他編譯器的比較主要體現在以下幾個方面: 一、定位與目標 Triton編譯器 : 定位:專注于深度學習中最核心、最耗時的張量運算的優(yōu)化。 目標:提供一個高度抽象、靈活、高效
    的頭像 發(fā)表于 12-24 17:25 ?919次閱讀

    Stanford DG645開機無反應維修:安泰維修過程分享

    近期北京某院校送修一臺Stanford斯坦福DG645數字延時脈沖發(fā)生器,報修故障為不能正常開機。對儀器進行初步檢測,儀器外觀正常,開機無反應,確定故障與客戶報修一致。
    的頭像 發(fā)表于 05-08 17:54 ?201次閱讀
    <b class='flag-5'>Stanford</b> DG645開機無反應維修:安泰維修過程分享
    主站蜘蛛池模板: 伊人电影综合网 | 色多视频| 忘忧草爱网 | 国产yin乱大巴视频 国产爱v | 中文天堂资源在线www | 美女隐私黄www视频 美女用手扒开尿口给男生桶爽 | 黄 色 免费网 站 成 人 | 91福利免费视频 | 久久夜夜视频 | 狠狠色噜噜狠狠狠狠97老肥女 | 天天做天天添婷婷我也去 | 欧美三级网 | 亚洲免费一级视频 | 欧美性xxxx极品高清 | 又粗又硬又猛又黄的免费视频黑人 | 欧美xxxxxxxxx| 色老头在线官方网站 | 玖玖在线免费视频 | 偷拍福利视频 | 特级毛片女人18毛片 | 四虎永久影院永久影库 | 午夜毛片在线观看 | 视频在线免费观看网址 | 四虎免费永久观看 | 一级特黄色片 | 饥渴少妇videos | 亚洲视频一二三 | 亚洲一区精品中文字幕 | 狠狠躁夜夜躁人人爽天天天天 | 69精品在线 | 午夜福利123| 激情综合网色播五月 | 色婷婷综合久久久久中文一区二区 | 日本免费一区二区三区视频 | 亚洲看黄 | 一二三区乱码一区二区三区码 | 国产成人精品男人的天堂538 | 天天干天天曰天天操 | 午夜影院普通用户体验区 | 久草tv| 日韩亚射吧 |