scheme是這個暑假弄的,實現了一下它的基本框架
我的實現比較學術,畢竟是看了編譯原理的前5章,之後弄的,所以思路簡潔清晰!
q:scheme是什麼?
a:scheme是mit人工智慧實驗室開發的一種lisp方言,一種用括號包圍的語言
q:為什麼是scheme?
q:我的直譯器用的是怎樣的分段開發?
a:lexer(詞法分析) -> parser(語法分析,建樹) -> interpret(解釋部分)
q: lexer和parser是用工具還是手工?
a:手工,還是覺得要手寫**,才好掌握些,當然有手寫**滿足的意圖
q:期間有什麼困難?
a:困難還是在如何建樹!!
0.正常情況=> (+ 1 2)
/ \
1 2
1."非正常"情況 => (define (funcchooser n)
(if (= n 0) +
-))這裡定義了乙個funcchooser定義到底選擇哪種方法,是的,方法可以被當做資料傳遞,那麼我們使用選擇器來使用運算方法時,即
( (funcchooser 0) 1 2)
這時候建樹該如何建?一般建樹方法是不能滿足!
特別鳴謝我的好**marine,他拯救了我,給了我乙個好的建樹方法!
新增兄弟節點的辦法!!!(下樹中 "o"代表空節點)o l
o --> 1 --> 2
| funcchooser --> n
這樣既優美,又能遞迴地求值! 先求出操作符,再應用於運算元,返回上節點!
q:如何儲存資料?
a:環境!每個運算都基於環境,環境中擁有操作符的資訊,擁有值等等,但是它們的本質都是名字-資料,所以用符號表實現環境!
q:那麼初始的環境中有什麼資訊?
a:初始環境中存在基礎資料運算子,和邏輯符號
q:scheme的資料名字有什麼限制?
a:恩....它的名字的限制很小,不過不能是全數字,還有一些你都看不過去的方式。我的實現裡初始環境中的+,-等符號,其實也和使用者自己定義的級別一樣,即你可以通過
(define + -) 將+重定義到-,因為運算的本質就是環境!+,-,*只是名字,你可以(define + 加) 只要你覺得爽!
q:運算的本質是環境是什麼意思?
我的實現裡並不因為現在的操作影響到以前的意圖,不過這畢竟是仁者見仁,智者見智的,不能說優劣
>> (define (add) (+ 1 2))
>> (add)
3 (當add是使用正常的+時)
>> (define + -)
>> (add)
3 (因為add繫結著+符號最初的意義,所以即使現在我修改+,當年的add依然不會受到影響)
********************===2012.11.11(亞馬遜滿300減150,我擦!!)******************************===
我的第乙個程式
我的第乙個vc程式終於寫完了,花了2周,之前從沒有用vc寫過程式,也沒讀過什麼程式,只是在看書,看了幾百頁 mfc windows程式設計 正好有個機會,老師讓寫個vc程式,就試著寫了。程式的功能是不同地方的access的更新的記錄整合到一台機子上的access中,支援斷網自動連線,用的是socke...
我的第乙個部落格
我是乙個有點脫離時代的年輕人,沒有iphone,不玩微博,沒有崇拜的明星,不是任何人的粉絲。前幾天我的乙個領導告訴我,應該多總結,可以開個微博,把記錄的東西時不時拿出來複習一下,慢慢就會積累出很多財富。所以我開了第乙個部落格,當然遠不如微博那麼新潮。我想感謝我的這位領導,在我的職業生涯中,他是我的領...
我的第乙個c
上機內容 c 程式的編寫和執行 上機目的 掌握簡單c 程式的編輯 編譯 連線和執行的一般過程 我的程式 cpp view plain copy print?程式的版權和版本宣告部分 檔名稱 test.cpp 作 者 徐威楊 完成日期 2014 年 10 月 28 日 版 本 號 v1.0 對任務及求...