国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

Stanford編譯原理詳解

處理器與AI芯片 ? 來源:處理器與AI芯片 ? 2023-10-25 10:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第二部分的作業是語法分析,通過編寫cool.y(這個assignment的任務),利用bison將其自動生成語法分析LALR(1)的代碼。

語法分析,就是將詞法分析階段已經識別好的token,按照語法的規則,構建抽象語法樹的過程。

比如以下的代碼:

x=(a+b)*(c-d);

可以構成下圖的抽象語法樹:

        =
       / 
      x   *
         / 
        +   -
       /  / 
abcd

具體在cool.y 中,

b1d10848-72dd-11ee-939d-92fbcf53809c.png

這部分定義了非終結符non-terminal對應的semanticvalue. Union中的每一個field都可以是parsing動作的結果。

在stanfordcompiler的教學語言cool中,這就對應了AST的一個node。每一個non-terminal,都有其對應的semanticvalue。

左側的各種類型在cool-tree.aps中都有對應定義,比如Features:

b1f78f4a-72dd-11ee-939d-92fbcf53809c.png

Feature即為class中的成員函數或者成員變量。因為可以有多個Feature,所以存在Features,即LIST[Feature].

下面則具體定義了所有的非終結符對應的AST節點類型。<>內部的,比如classes是在union中定義的value,而右側的,比如class_list,我們需要定義規約該非終結符時,需要進行的操作。

b219db4a-72dd-11ee-939d-92fbcf53809c.png

上圖中$$即為action的返回值,對應該抽象語法樹AST對應的node。

下面介紹如何聲明非終結符對應的規約操作。

b243dc06-72dd-11ee-939d-92fbcf53809c.png

具體如何對類的聲明構建抽象語法樹節點,即class的規則:

1)

CLASS TYPEID '{' feature_list '}' ';'
{
/*對應動作 action*/
  $$=class_($2,
  idtable.add_string("Object"),
  $4,
  stringtable.add_string(curr_filename));
}

其動作對應cool-tree.aps中生命的constructor,

b25be4e0-72dd-11ee-939d-92fbcf53809c.png

傳給class_的參數即為

1)類名稱 2)父類名稱 3)成員變量/成員函數

4)文件名

對應的位置如類名稱即為TYPEID,對應$2, feature_list對應$4,因此其動作action寫成了如上圖所示的樣子。

cool語法中,如果class類沒有繼承自其他類,那么默認繼承自Object類型,因此parent設置為Object。

2)

CLASS TYPEID INHERITS TYPEID '{' feature_list '}' ';'
{$$=class_($2,$4,$6,
stringtable.add_string(curr_filename));}

這里唯一不同的即為該類繼承自父類,因此其第2個參數,父類名稱傳入了$4。具體的序號可以參考第205行的注釋。

審核編輯:湯梓紅

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

    關注

    3

    文章

    4417

    瀏覽量

    67501
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73960
  • 編譯
    +關注

    關注

    0

    文章

    694

    瀏覽量

    35158

原文標題:Stanford 編譯原理 編程作業2

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    一文詳解SystemC仿真庫的編譯

    AMD Vivado 設計套件以文件和庫的形式提供仿真模型。仿真庫包含器件和 IP 的行為和時序模型。編譯后的庫可供多個設計項目使用。用戶必須在設計仿真之前通過名為 compile_simlib 的實用程序編譯這些文件,以便為目標仿真器
    的頭像 發表于 12-12 15:08 ?4820次閱讀
    一文<b class='flag-5'>詳解</b>SystemC仿真庫的<b class='flag-5'>編譯</b>

    一文詳解編譯系統

    什么是編譯器?為什么要有編譯器?編譯器的作用是什么?編譯系統的組成部分有哪些,它們之間的關系是什么?有一句名言說的非常好:了解一件事情最好從它的歷史開始。要想對整個
    發表于 09-20 09:09 ?2117次閱讀

    WinCE系統的編譯過程詳解

    在WinCE系統中,當我們完成了相關的開發和系統定制工作以后,會編譯WinCE系統,最后生成NK.bin和NK.nb0。我現在用WinCE6.0在自己的PC上面編譯一次用時19分16秒(有一天無聊,就測了一下)
    發表于 07-20 11:52 ?2597次閱讀
    WinCE系統的<b class='flag-5'>編譯</b>過程<b class='flag-5'>詳解</b>

    QT/E和Qtopia的編譯詳解

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

    PICC編譯器的庫函數詳解

    本章將詳細列出PICC編譯器的庫函數。每個函數均從函數名開始,然后按照以下幾個標題給出詳細解釋。
    發表于 10-14 14:17 ?0次下載

    Vivado中的Incremental Compile增量編譯技術詳解

    Incremental Compile增量編譯是Vivado提供的一項高階功能。目的旨在當設計微小的改變時,重用綜合和布局布線的結果,縮短編譯時間。
    的頭像 發表于 07-05 06:06 ?1.2w次閱讀

    Linux內核編譯過程詳解

    Linux內核編譯過程詳解(kernel2.6.7) 花了幾天才編譯成功kernel2.6.7,其過程真可謂艱辛。古語有云:苦盡甘來!現在終于可以樂上一陣了。由于許多朋友對操作的順序及某些重要的配置
    發表于 11-07 11:16 ?4次下載

    編譯器是如何工作的_編譯器的工作過程詳解

    隨著計算機的發展,編譯器已經發揮著十分重要的作用。本文主要介紹了編譯器的種類、編譯器的工作原理以及編譯器工作的具體操作過程及步驟詳解
    發表于 12-19 12:54 ?1.8w次閱讀

    Prelink的交叉編譯和使用詳解

    Prelink的交叉編譯和使用詳解
    的頭像 發表于 06-20 12:03 ?4579次閱讀
    Prelink的交叉<b class='flag-5'>編譯</b>和使用<b class='flag-5'>詳解</b>

    Php+mysql+apache編譯安裝詳述

    Php+mysql+apache編譯安裝詳述(深圳市核達中遠通電源技術股份有限公司大嗎)-文檔為Php+mysql+apache編譯安裝詳述詳解文檔,是一份不錯的參考資料,感興趣的可以下載看看,,,,,,,,,,,,,,,
    發表于 09-18 14:42 ?2次下載
    Php+mysql+apache<b class='flag-5'>編譯</b>安裝詳述

    詳解OpenHarmony的編譯和燒錄

    在上一篇【博流 BL-HWC-G1 開發板試用】開箱及編譯燒錄官方程序(BL602 IoT SDK)中,我們講了這塊開發板使用官方SDK進行編譯燒錄,這一篇,我們來講OpenHarmony的編譯
    的頭像 發表于 11-08 09:58 ?6874次閱讀
    <b class='flag-5'>詳解</b>OpenHarmony的<b class='flag-5'>編譯</b>和燒錄

    C語言中條件編譯詳解

    —般情況下,C語言源程序中的每一行代碼.都要參加編譯。但有時候出于對程序代碼優化的考慮,希望只對其中一部分內容進行編譯。此時就需要在程序中加上條件,讓編譯器只對滿足條件的代碼進行編譯
    的頭像 發表于 04-14 13:12 ?3892次閱讀

    Stanford編譯的原理是什么?

    第一個作業是根據這門課定義的cool語言,寫一個詞法分析的rule,詞法分析對我幫助不大,主要是理解使用就可以,就大部分參照github上的實現了。
    的頭像 發表于 09-02 09:55 ?1042次閱讀
    <b class='flag-5'>Stanford</b><b class='flag-5'>編譯</b>的原理是什么?

    斯坦福(Stanford)鎖相放大器故障修復

    斯坦福鎖相放大器是由斯坦福研究系統公司(Stanford Research Systems, SRS)研發的一款測量工具,主要用于微弱信號的測量和提取。它結合了高靈敏度、高精度、高穩定性和多功能性于一體,是科研和工業領域的重要設備。
    的頭像 發表于 07-30 10:58 ?889次閱讀
    斯坦福(<b class='flag-5'>Stanford</b>)鎖相放大器故障修復

    高精度信號源維修專家:Stanford DS360全流程修復

    高精度信號源維修專家:Stanford DS360全流程修復
    的頭像 發表于 12-19 15:49 ?421次閱讀
    高精度信號源維修專家:<b class='flag-5'>Stanford</b> DS360全流程修復