add printf. recognize strings as atoms
This commit is contained in:
parent
d4ea3b5d79
commit
23e907aa5c
|
@ -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]
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user