構建自己的編譯器(八)彙編器之二

2021-10-03 13:23:12 字數 640 閱讀 8555

現在大致明白了是怎麼工作的了,它根據前向算的,獲取出乙個token之後就能判斷它到底屬於哪乙個句型,對於c語言的確是如此,但是對於我這個語言來說,emmm,貌似也差不多,它維護著乙個變數表,我完全可以用map實現,然後對於變數定義,真的不難。那麼彙編器實際上也不用做,其也是解析成組合語言然後放入虛擬機器的,我可以更簡單。

例如變數定義,用map做,而它說的函式呼叫,現在還沒有看,但是它也是要編譯成一段彙編然後存入**段的吧,如果是這樣的話,你怎麼著也必須存著乙個資料結構,樹結構是非常好的選擇,有沒錯,樹結構就是用來解決賦值語句的。

我們知道,乙個函式,它是在結束符之後的**段,有乙個ip指標,從頭到尾的指,函式定義與變數定義一樣,都需要乙個表,編寫彙編**的,就是將變數壓入堆疊,然後跳轉就行,因此函式必須定義在前面,看看語句,對於語句來說,他區分if,while之類的,就是將其用goto語句轉化,這個就是彙編碼+ip的好處,你沒辦法用語法樹表示出來,實際上,語法樹是用來解析表示式的,那麼你怎麼做呢?能否用c++特殊的方式來簡化呢?

所謂語句,實際上就是表示式+;也就是對於乙個語句,都把它當成乙個表示式來解析,有的時候它沒有運算子,有的時候它有乙個等於運算子,有的時候運算子很多,我們還是要給它斷句,表示式的關鍵就是逆波蘭表示式的使用。

。。。說實話,看不懂,現在就先用yacc+lex實現吧。。。

預處理器,編譯器,彙編器,聯結器

1.2程式被其它程式翻譯成不同的格式 hello程式的生命週期是從乙個源程式 hello.c 稱為高階c語言 開始,被其它程式轉化為一系列的低階機器語言指令,這些指令按照一種稱為可執行目標程式的格式打包好,以二進位制磁碟檔案的形式儲存。例 unix gcc o hello hello.c可以實現原始...

構建自己的編譯器(二)語法分析器

用來描述計算機語言語法的符號集。現在,幾乎每一位新程式語言書籍的作者都使用巴科斯正規化來定義程式語言的語法規則。擴充套件巴科斯 瑙爾正規化 ebnf 是表達作為描述計算機程式語言和形式語言的正規方式的上下文無關文法的元語法符號表示法。它是基本巴科斯正規化 bnf 元語法符號表示法的一種擴充套件。如由...

關於編輯器,編譯器,彙編器,以及跨平台的思考

編輯器用來接收鍵盤輸入的字元,比如記事本等,但是這類編輯器沒有語法高亮,補全等功能,對使用者不夠友好,因此書寫 使用功能更加強大的編輯器會提公升效率。機器識別的是0101011之類的二進位制語言 機器語言 但是一般人們用c語言,或更高階語言都是以英文輸入,因此輸入的 需要經過一定轉換,變成機器可以識...