add printf. recognize strings as atoms
This commit is contained in:
parent
d4ea3b5d79
commit
23e907aa5c
|
@ -6,7 +6,7 @@
|
|||
|
||||
(provide #%top
|
||||
#%datum
|
||||
print
|
||||
print printf
|
||||
(rename-out [#%dynamic-honu-module-begin #%module-begin]
|
||||
[honu-function function]
|
||||
[honu-var var]
|
||||
|
|
|
@ -134,6 +134,11 @@
|
|||
;; return the parsed stuff and the unparsed stuff
|
||||
(define (parse input)
|
||||
(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)
|
||||
(syntax-parse stream #:literal-sets (cruft)
|
||||
[() (values (left current) #'())]
|
||||
|
@ -171,7 +176,7 @@
|
|||
(case association
|
||||
[(left) >]
|
||||
[(right) >=]))
|
||||
(printf "new precedence ~a\n" new-precedence)
|
||||
(debug "new precedence ~a\n" new-precedence)
|
||||
(if (higher new-precedence precedence)
|
||||
(do-parse #'(rest ...) new-precedence
|
||||
(lambda (stuff)
|
||||
|
@ -211,8 +216,7 @@
|
|||
#'rest)]
|
||||
[else (syntax-parse #'head
|
||||
#:literal-sets (cruft)
|
||||
[x:identifier (do-parse #'(rest ...) precedence left #'x)]
|
||||
[x:number (do-parse #'(rest ...) precedence left #'x)]
|
||||
[x:atom (do-parse #'(rest ...) precedence left #'x)]
|
||||
[(#%parens args ...)
|
||||
(debug "function call ~a\n" left)
|
||||
(values (left (with-syntax ([current current]
|
||||
|
|
|
@ -22,8 +22,9 @@ test1(){
|
|||
test("x = 3", x, 3);
|
||||
test("y = 2", y, 2);
|
||||
*/
|
||||
print(x + 2);
|
||||
print(x ^ 2)
|
||||
printf("x is ~a\n", x + 2);
|
||||
// print(x + 2);
|
||||
// print(x ^ 2)
|
||||
}
|
||||
|
||||
val test2(val x, val y){
|
||||
|
@ -31,7 +32,7 @@ val test2(val x, val y){
|
|||
print(y)
|
||||
}
|
||||
|
||||
// test1();
|
||||
test1();
|
||||
test2(5, 9);
|
||||
|
||||
// function(z){ print(z) }(12)
|
||||
|
|
Loading…
Reference in New Issue
Block a user