日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【编译原理】入门总结

發布時間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【编译原理】入门总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

教程資源

入門教程在:手把手教你做一個 C 語言編譯器


學習過程

19年嘗試學了一下,中途看不懂放棄了。20年底從頭再看一遍,經過一年的知識積累,在仔細研讀之下,終于算是學懂了。此文中記錄了我在最初學習時遇到的問題,和最終的解決方法記錄下來,希望對讀者有所幫助。


虛擬機

虛擬機涉及的知識是比較綜合性的,是一個難點。虛擬機的原理是,模擬實現CPU的指令集。CPU的指令功能無非就是操作存儲和調用運算資源,我們完全可以自己模擬實現。這樣我們就可以不生成直接運行在電腦上的機器碼,不用關心exe文件格式,而是實現一個簡單的虛擬機來把源碼當做腳本來執行。如此,機器碼生成的任務可以大大減少,降低入門難度。


BNF

剛開始學的時候遇到的問題是,弄不懂BNF。BNF只有弄懂了,才會自己寫,才會用代碼實現。個人對BNF的理解見我的另一篇博客:編譯原理—理解BNF。


邏輯流程圖

在腦海中要有一張如下圖的邏輯流程圖:

其中,符號表特別重要,源碼中的重要信息都是保存在符號表中的。

要特別說一下,比較容易糾結的問題是,為什么按照上面的流程先解析Token,再語法分析,就可以解析代碼了?知其然還要知其所以然。我的理解是,編程語言在設計的時候,就考慮到,一要能準確無誤的表達出一個操作,沒有歧義;二是為了能使編譯器更易于實現。編程語言并不是一下子就設計好的,很可能是在設計編譯器的過程中不斷豐富完善的。舉一個例子:為什么標識符不能以數字開頭?因為,如果標識符以數字開頭,編譯過程中就需要更多的判斷來分辨到底是一個標識符還是一個數字或者表達式,直接規定不允許以數字開頭,保證了不同類型的Token起始符號不同,就可以很容易判斷Token的類型了。


動手實踐

在原教程的基礎上,可以自己嘗試實現具有更強功能的C語言腳本,如支持結構體解析,如在解析代碼的基礎上,實現編輯器上下文提示等等。

同時,在對編譯原理上下文無關文法的理解的基礎上,學習其他語言,應該更加容易。

同時,可以自己開發一些小工具用來對代碼進行自定義處理。


更加深入

后續可以學習已有腳本語言的實現原理,甚至可以嘗試自己開發一款腳本語言,學無止境,再接再厲!

總結

以上是生活随笔為你收集整理的【编译原理】入门总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。