当前位置:编程学习 > C/C++ >>

马虎浏览完一遍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 str

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,