add printf. recognize strings as atoms

This commit is contained in:
Jon Rafkind 2011-07-22 14:40:30 -04:00
parent d4ea3b5d79
commit 23e907aa5c
3 changed files with 12 additions and 7 deletions

View File

@ -6,7 +6,7 @@
(provide #%top (provide #%top
#%datum #%datum
print print printf
(rename-out [#%dynamic-honu-module-begin #%module-begin] (rename-out [#%dynamic-honu-module-begin #%module-begin]
[honu-function function] [honu-function function]
[honu-var var] [honu-var var]

View File

@ -134,6 +134,11 @@
;; return the parsed stuff and the unparsed stuff ;; return the parsed stuff and the unparsed stuff
(define (parse input) (define (parse input)
(define (do-parse stream precedence left current) (define (do-parse stream precedence left current)
(define-syntax-class atom
[pattern x:identifier]
[pattern x:str]
[pattern x:number])
(debug "parse ~a precedence ~a left ~a current ~a\n" stream precedence left current) (debug "parse ~a precedence ~a left ~a current ~a\n" stream precedence left current)
(syntax-parse stream #:literal-sets (cruft) (syntax-parse stream #:literal-sets (cruft)
[() (values (left current) #'())] [() (values (left current) #'())]
@ -171,7 +176,7 @@
(case association (case association
[(left) >] [(left) >]
[(right) >=])) [(right) >=]))
(printf "new precedence ~a\n" new-precedence) (debug "new precedence ~a\n" new-precedence)
(if (higher new-precedence precedence) (if (higher new-precedence precedence)
(do-parse #'(rest ...) new-precedence (do-parse #'(rest ...) new-precedence
(lambda (stuff) (lambda (stuff)
@ -211,8 +216,7 @@
#'rest)] #'rest)]
[else (syntax-parse #'head [else (syntax-parse #'head
#:literal-sets (cruft) #:literal-sets (cruft)
[x:identifier (do-parse #'(rest ...) precedence left #'x)] [x:atom (do-parse #'(rest ...) precedence left #'x)]
[x:number (do-parse #'(rest ...) precedence left #'x)]
[(#%parens args ...) [(#%parens args ...)
(debug "function call ~a\n" left) (debug "function call ~a\n" left)
(values (left (with-syntax ([current current] (values (left (with-syntax ([current current]

View File

@ -22,8 +22,9 @@ test1(){
test("x = 3", x, 3); test("x = 3", x, 3);
test("y = 2", y, 2); test("y = 2", y, 2);
*/ */
print(x + 2); printf("x is ~a\n", x + 2);
print(x ^ 2) // print(x + 2);
// print(x ^ 2)
} }
val test2(val x, val y){ val test2(val x, val y){
@ -31,7 +32,7 @@ val test2(val x, val y){
print(y) print(y)
} }
// test1(); test1();
test2(5, 9); test2(5, 9);
// function(z){ print(z) }(12) // function(z){ print(z) }(12)