青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

馬虎瀏覽完一遍 SICP ,設計一個玩具Lisp方言,用C++實現一個玩具解釋器,勿笑


看歸看了,但習題沒做,學習效果打了折扣。


基于根搜索的垃圾收集:
        內存申請還是用的 C++ new,垃圾收集只負責在適當的時候 delete 。


變量為動態作用域。


語法也受到 Common Lisp 的影響。


目前支持:

        ""      字符串            ""     "ab"
        #       字符              #c     #?
        '       QUOTE(將其后符號視為符號,而非變量或其它。僅僅是其后的一個(暫時如此))
        ;       單行注釋          ; 這是注釋
        13      整數              12  +12  -3  0  +0  -0
        if      if 語句           (if c x)    (if c x y)
        var     變量定義          (var x)     (var x 100)
        begin   執行語句序列
        func    函數定義          (func f(參數) (語句)(語句)(語句) )
                函數可嵌套定義
        lambda                    ((lambda (x) (* x x)) 7)  ==> 49  (var fa (lambda () ()))
        (set! x y)                x = y
        (pair x y)
        (first x)
        (rest x)
        (set-first! x z)
        (set-rest!  x z)
        (list a b c d)
        (+ ... )                   (+ 100 x y)  ==> 100 + x + y
        (- ... )                   (- x) ==> -x           (- x y)  ==> x - y
        (* ... )                   (* x y z)
        (/ ... )                   (/ x y z)
        (get-char)
        (put-char)
        (get-string)
        (put-string)
        (get-line)
        (put-line)
        (string->integer)
        (integer->string)
        (< ...)
        (> ...)
        (= ...)
        (<= ...)
        (>= ...)
        (!= ...)
        nil?
        pair?
        integer?
        bool?
        char?
        lambda?
        func?

 



  1; TestZ.txt
  2;
  3; Copyright (C) 2012, coreBugZJ, all rights reserved.
  4;
  5; 測試用文件 A
  6; ANSI GB2312 編碼
  7
  8; 測試基本功能
  9
 10
 11
 12
 13(begin
 14        ; test output -----------------------------------------
 15        (var test-output "test output")
 16        (put-line test-output)
 17        (put-string test-output)
 18        (put-line test-output)
 19        (put-string "  ")
 20        (put-char #c)
 21        (put-line "")
 22        (var ch #c)
 23        (put-char ch)
 24        (var sp " ")
 25        (put-line sp)
 26
 27        ; test string -----------------------------------------
 28        (var test-string "test string")
 29        (put-line test-string)
 30
 31        (var sp "    ")
 32        (var sa "abc")
 33        (var sb)
 34        (put-string sa)
 35        (put-string sp)
 36        (put-line sa)
 37
 38        (set! sb sa)
 39        (put-string sb)
 40        (put-string sp)
 41        (put-line sb)
 42
 43        (set! sb "def")
 44        (put-string sb)
 45        (put-string sp)
 46        (put-line sb)
 47
 48                ; test empty string ---------------------------
 49        (var test-empty-string "test empty string")
 50        (var es "")
 51        (put-string test-empty-string)
 52        (put-string es)
 53        (put-line test-empty-string)
 54
 55        ; test integer ----------------------------------------
 56        (var test-integer "test integer")
 57        (put-line test-integer)
 58
 59        (var ia)
 60        (var ib 100)
 61        (var ic -13)
 62        (var id +23)
 63        (var ie +0)
 64        (var if -0)
 65        (var ig (- (+ id ib ic) (+ ib ic)))
 66        (var str (integer->string ig))
 67        (put-line str)
 68        (var ih (- id))
 69        (set! str (integer->string ih))
 70        (put-line str)
 71        (set! ig (* id ib (/ ib id)))
 72        (set! str (integer->string ig))
 73        (put-line str)
 74
 75        ; test integer <-> string -----------------------------
 76        (var test-integer<->string "test-integer<->string")
 77        (put-line test-integer<->string)
 78
 79        (var i 1234)
 80        (var s "4321")
 81        (put-line (integer->string i))
 82        (put-line (integer->string (string->integer s)))
 83
 84        ; test char -------------------------------------------
 85        (var test-char "test char")
 86        (put-line test-char)
 87
 88        (var ca #a)
 89        (var cb)
 90        (put-char ca)
 91        (set! cb ca)
 92        (put-char cb)
 93        (var eline " ")
 94        (put-line eline)
 95
 96        ; test input ------------------------------------------
 97        (var test-input "test input")
 98        (put-line test-input)
 99
100        (var input-prompt "input a char")
101        (put-line input-prompt)
102        (var ch (get-char)) ; 重復定義,不判重
103        (put-char ch)
104        (var sp "  ")
105        (put-line sp)
106
107        (set! input-prompt "input a string")
108        (put-line input-prompt)
109        (var str (get-string))
110        (put-line str)
111
112        ; test func -------------------------------------------
113        (var test-func "test func")
114        (put-line test-func)
115
116        (func square(x) (* x x))
117        (var y 11)
118        (var z (square y))
119        (put-line (integer->string z))
120
121        (func square-sum(x y)
122                (+ (square x) (square y)))
123        (put-line (integer->string (square-sum 3 7)))
124
125        (func fu(x y)
126                (func half(x) (/ x 2))
127                (func double(x) (+ x x))
128                (+ (half x) (double y))
129        )
130        (var x 26)
131        (put-line (integer->string (fu x 11)))
132
133        (var y ((lambda (x) (* x x x)) 3))
134        (func put-integer(i) (put-string (integer->string i)))
135        (func new-line() (var sp "") (put-line sp))
136
137        (put-integer y) ; 27
138        (new-line)
139
140        (put-line "abc")
141        (put-line "")
142        (put-line "def")
143        (put-string "  ")
144        (put-char #c)
145        (new-line)
146        (put-integer -13)
147        (new-line)
148        (put-integer (+ 12 7))
149        (put-line "")
150        (func new-line() (put-line ""))
151        (new-line)
152        (put-char #$)
153
154) ; end
155



 1; TestCompareZ.txt
 2;
 3; Copyright (C) 2012, coreBugZJ, all rights reserved.
 4;
 5; 測試用文件 B
 6; ANSI GB2312 編碼
 7
 8; 測試 基本比較函數
 9
10(begin
11        ; char --------------------------------------
12        (var c1 #a)
13        (var c2 #z)
14        (var c3 #u)
15
16        (var c-min (if (< c1 c2) c1 c2))
17        (set! c-min (if (< c3 c-min) c3 c-min))
18        (put-char c-min) ; a
19        (put-line)
20
21        (var c-max (if (> c1 c2) c1 c2))
22        (set! c-max (if (> c3 c-max) c3 c-max))
23        (put-char c-max) ; z
24        (put-line)
25
26        ; integer -----------------------------------
27        (func put-integer(i)
28                (put-string (integer->string i))
29        )
30
31        (var i1 1)
32        (var i2 3)
33        (var i3 7)
34
35        (var i-min (if (< i1 i2) i1 i2))
36        (set! i-min (if (< i3 i-min) i3 i-min))
37        (put-integer i-min) ; 1
38        (put-line)
39
40        (var i-max (if (> i1 i2) i1 i2))
41        (set! i-max (if (> i3 i-max) i3 i-max))
42        (put-integer i-max) ; 7
43        (put-line)
44
45        (var i (if (= i1 i-min) i1 i2))
46        (put-integer i) ; 1
47        (put-line)
48
49)
50



 1; TestScopeZ.txt
 2;
 3; Copyright (C) 2012, coreBugZJ, all rights reserved.
 4;
 5; 測試用文件 C
 6; ANSI GB2312 編碼
 7
 8; 綜合測試 作用域,lambda,函數,環境模型
 9
10
11
12case 3
13(begin
14        (func fs(fs_x)
15                (lambda (lam_y)
16                        (set! fs_x (- fs_x lam_y))
17                        (put-line (integer->string fs_x))
18                )
19        )
20        (var fa (fs 71))
21        (fa 3) ; 68
22        (fa 7) ; 61
23
24        (var fb (fs 100))
25        (fb 10) ; 90
26        (fa 3)  ; 58
27        (fb 19) ; 71
28
29
30
31)
32
33
34
35
36
37case 2 ok
38(begin
39        (var fs (lambda (x) (+ x x)))
40        (put-line (integer->string (fs 3)))
41)
42
43
44
45case 1 ok
46(begin
47        (func put-integer(i)
48                (put-line (integer->string i))
49        )
50
51        (func fa(x) (+ x x))
52        (put-integer (fa 7))
53
54        (lambda (y) (- y y))
55        (put-integer ((lambda (z) (* z z)) 10))
56
57) ; end
58



 1; TestPairZ.txt
 2;
 3; Copyright (C) 2012, coreBugZJ, all rights reserved.
 4;
 5; 測試用文件 D
 6; ANSI GB2312 編碼
 7
 8; 測試 pair 系列基本函數
 9
10
11(begin
12        (put-string (list #x #a #b #c #d))
13        (put-line (list)) ; xabcd
14        (put-string (pair #x (pair #y nil)))
15        (put-line) ; xy
16
17        (var pa (pair 100 200))
18        (put-line (integer->string (first pa))) ; 100
19        (put-line (integer->string (rest  pa))) ; 200
20
21
22        (func length(lis)
23                (if (nil? lis)
24                        0
25                        (+ 1 (length (rest lis)))
26                )
27        )
28
29        (func put-integer(i)
30                (put-line (integer->string i))
31        )
32
33        (var la (pair 1 (pair 2 nil)))
34        (put-line (integer->string (length la))) ; 2
35
36        (var lb (list 1 2 3 4 5))
37        (put-line (integer->string (length lb))) ; 5
38
39
40        (put-integer (first la)) ; 1
41        (set! la (rest la))
42        (put-integer (first la)) ; 2
43        (set-first! la 6)
44        (put-integer (first la)) ; 6
45        (set-rest! la 7)
46        (set! la (rest la))
47        (put-integer la) ; 7
48
49        (var vn)
50        (put-integer (if (= nil vn) 1000 2000))
51
52)
53



 1; TestGcZ.txt
 2;
 3; Copyright (C) 2012, coreBugZJ, all rights reserved.
 4;
 5; 測試用文件 E
 6; ANSI GB2312 編碼
 7
 8; 測試垃圾收集
 9
10
11
12(begin
13        (func  new(n)
14                (if (= 0 n)
15                        nil
16                        (pair n (new (- n 1)))
17                )
18        )
19
20        (var ref)
21
22        (func test-gc(n)
23                (if (= 0 n)
24                        nil
25                        (begin
26                                (set! ref (new 2))
27                                (test-gc (- n 1))
28                        )
29                )
30        )
31
32        (test-gc 2)
33
34)
35



 1; TestErrorZ.txt
 2;
 3; Copyright (C) 2012, coreBugZJ, all rights reserved.
 4;
 5; 測試用文件 F
 6; ANSI GB2312 編碼
 7
 8; 測試錯誤定位
 9
10
11(begin
12        (var a "a")
13        (var b 3)
14        (var c $)          ; error lin=14 col=16
15        (if (= a b) a b)   ; error lin=15 col=13
16)
17

posted on 2012-04-20 16:19 coreBugZJ 閱讀(2046) 評論(2)  編輯 收藏 引用 所屬分類: ProgrammingLanguageLisp

Feedback

# re: 馬虎瀏覽完一遍 SICP ,設計一個玩具Lisp方言,用C++實現一個玩具解釋器,勿笑 2012-04-21 14:48 bennycen

Orz!!!仰慕啊  回復  更多評論   

# re: 馬虎瀏覽完一遍 SICP ,設計一個玩具Lisp方言,用C++實現一個玩具解釋器,勿笑 2012-04-21 16:35 coreBugZJ

@bennycen
仰慕你的 AnyC 呀,強太多了!!!我們這學期才開編譯原理的課,還不會,所以用了 類Lisp 的語法(當然我也挺喜歡這種語法的),仰慕你的 類C 語法呀!和虛擬機!  回復  更多評論   


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美成人精品高清在线播放| 亚洲日本成人女熟在线观看| 狠狠狠色丁香婷婷综合激情| 欧美小视频在线| 欧美视频日韩视频在线观看| 欧美日韩国产精品专区| 国产精品人人做人人爽| 国内激情久久| 亚洲精品中文字幕有码专区| 亚洲一区二区影院| 巨乳诱惑日韩免费av| 亚洲韩国青草视频| 亚洲欧美韩国| 欧美成人精品一区二区三区| 欧美日韩国产色综合一二三四 | 欧美日韩亚洲一区三区| 欧美日韩国产a| 国产伦精品一区二区三区高清版| 一区二区亚洲精品国产| 夜夜嗨av色一区二区不卡| 西瓜成人精品人成网站| 欧美高清视频一二三区| 亚洲特黄一级片| 久久久久久久久久久成人| 欧美另类一区| 国产揄拍国内精品对白| 一区二区三区四区五区视频| 久久精品五月| 一区二区三区免费看| 久久一区二区三区四区五区| 欧美午夜精品理论片a级按摩| 国内视频一区| 香蕉免费一区二区三区在线观看 | 亚洲国产高清视频| 亚洲欧美日韩在线| 久久久999成人| 亚洲毛片在线看| 午夜宅男久久久| 欧美日韩国产黄| 黄色成人在线免费| 欧美在线免费观看视频| 99视频超级精品| 免费av成人在线| 狠久久av成人天堂| 欧美在线欧美在线| 999亚洲国产精| 欧美v国产在线一区二区三区| 国产一区91精品张津瑜| 欧美一区二区三区日韩| 亚洲午夜羞羞片| 国产午夜久久久久| 日韩午夜在线观看视频| 欧美福利视频网站| 久久视频在线视频| 狠狠噜噜久久| 久久国产精品一区二区三区四区| 日韩午夜在线电影| 欧美日韩一区二区在线视频| av成人激情| 亚洲三级影院| 欧美激情第一页xxx| 亚洲精品欧美一区二区三区| 亚洲高清123| 欧美日韩成人综合| 亚洲精一区二区三区| 欧美激情aⅴ一区二区三区| 欧美综合77777色婷婷| 国产一区日韩欧美| 蜜桃久久精品乱码一区二区| 久久久久久尹人网香蕉| 亚洲电影免费观看高清| 欧美大片在线看免费观看| 你懂的国产精品| 宅男精品视频| 亚洲亚洲精品三区日韩精品在线视频 | 今天的高清视频免费播放成人| 亚洲欧美日韩久久精品| 亚洲字幕一区二区| 国内精品伊人久久久久av影院 | 亚洲你懂的在线视频| 国产欧美 在线欧美| 久久亚洲一区| 欧美国产视频在线观看| 亚洲综合大片69999| 午夜一区二区三视频在线观看 | 国产精品区一区二区三区| 久久精品首页| 欧美精品电影在线| 欧美在线视频a| 能在线观看的日韩av| 亚洲影音一区| 久久久久久亚洲精品杨幂换脸| 99伊人成综合| 欧美在线视频观看免费网站| 亚洲激情欧美激情| 亚洲欧美日韩另类精品一区二区三区| 在线欧美视频| 亚洲综合欧美日韩| 亚洲精品综合在线| 性色一区二区三区| 一本色道久久88亚洲综合88| 久久国产精品一区二区三区| 亚洲视频一区在线观看| 久久视频一区二区| 欧美一区二区在线免费观看| 欧美精品高清视频| 欧美二区在线| 狠狠爱成人网| 亚洲欧美春色| 亚洲色图制服丝袜| 欧美大尺度在线观看| 裸体女人亚洲精品一区| 国产精品一区二区久久久| 亚洲精品极品| 91久久亚洲| 久久久久久亚洲精品中文字幕| 亚洲女人av| 欧美私人啪啪vps| 亚洲精品免费观看| 亚洲激情网站免费观看| 久久精品五月| 亚洲欧洲av一区二区| 黄色亚洲免费| 亚洲欧美精品伊人久久| 亚洲线精品一区二区三区八戒| 蜜臀久久99精品久久久久久9| 久久免费99精品久久久久久| 国产精品久久久久久久电影| 亚洲美女在线观看| 99成人在线| 欧美精品一区在线观看| 91久久线看在观草草青青| 亚洲国产激情| 男人的天堂亚洲| 欧美激情视频一区二区三区免费| 在线观看欧美激情| 久久亚洲私人国产精品va| 蜜桃伊人久久| 亚洲国产精品久久91精品| 浪潮色综合久久天堂| 欧美成人日韩| 亚洲美女视频| 欧美日韩另类国产亚洲欧美一级| 亚洲精品国产日韩| 亚洲一区在线看| 国产九九精品视频| 久久超碰97中文字幕| 美女视频黄免费的久久| 亚洲国产美女| 欧美日韩蜜桃| 亚洲欧美日韩一区二区三区在线| 久久超碰97人人做人人爱| 国语精品中文字幕| 免费高清在线一区| 日韩一级在线| 性色av一区二区三区在线观看| 国产欧美在线视频| 久久人人97超碰精品888| 91久久极品少妇xxxxⅹ软件| 亚洲一区国产精品| 国产一区二区成人久久免费影院| 久久久噜噜噜久久狠狠50岁| 亚洲日本理论电影| 午夜国产精品视频| 精品999久久久| 欧美日韩国产在线观看| 午夜精品久久久久久 | 欧美一区二区视频在线观看2020 | 国产精品亚洲综合久久| 久久久噜久噜久久综合| 夜夜狂射影院欧美极品| 久久亚洲一区二区三区四区| 99国内精品久久| 国产一区二区久久| 欧美日韩国产经典色站一区二区三区| 亚洲欧美日韩精品久久久| 亚洲盗摄视频| 久久精品在线播放| 一本久久a久久免费精品不卡| 国产资源精品在线观看| 欧美日韩一二三四五区| 久久久福利视频| 亚洲小说区图片区| 亚洲人被黑人高潮完整版| 久久久噜噜噜久久中文字幕色伊伊 | 欧美日韩在线观看一区二区三区| 欧美日韩精品免费观看视频| 欧美日本一区二区三区| 篠田优中文在线播放第一区| 亚洲精品美女91| 欧美1区2区| 久久精视频免费在线久久完整在线看| 99国产精品久久久久久久久久| 好吊妞这里只有精品| 国产精品成av人在线视午夜片| 欧美成人午夜免费视在线看片| 欧美在线短视频| 亚洲欧美在线另类| 亚洲性xxxx| 亚洲一区二区三区免费在线观看|