diff --git a/beautiful-racket-demo/basic-demo-3/misc.rkt b/beautiful-racket-demo/basic-demo-3/misc.rkt index 5f947fe..f487136 100644 --- a/beautiful-racket-demo/basic-demo-3/misc.rkt +++ b/beautiful-racket-demo/basic-demo-3/misc.rkt @@ -1,6 +1,6 @@ #lang br -(require "struct.rkt") -(provide b-rem b-print b-let b-input b-statements b-require) +(require "struct.rkt" "expr.rkt") +(provide b-rem b-print b-let b-input b-repl b-require) (define (b-rem val) (void)) @@ -14,6 +14,10 @@ [num (string->number (string-trim str))]) (or num str)))) -(define-macro (b-statements STMT ...) #'(begin STMT ...)) +(define-macro (b-repl . ARGS) + (with-pattern ([STMTS (pattern-case-filter #'ARGS + [(b-expr . EXPR-ARGS) #'(b-print (b-expr . EXPR-ARGS))] + [OTHER-STMT #'OTHER-STMT])]) + #'(begin . STMTS))) (define-macro (b-require ID) #'(void)) \ No newline at end of file diff --git a/beautiful-racket-demo/basic-demo-3/parser.rkt b/beautiful-racket-demo/basic-demo-3/parser.rkt index a2dfcf3..d2ecf18 100644 --- a/beautiful-racket-demo/basic-demo-3/parser.rkt +++ b/beautiful-racket-demo/basic-demo-3/parser.rkt @@ -1,13 +1,12 @@ #lang brag b-program : [b-line] (/NEWLINE [b-line])* | b-statement /NEWLINE -b-line : b-line-num b-statements [b-rem] +b-line : b-line-num [b-statement] (/":" [b-statement])* [b-rem] @b-line-num : INTEGER b-rem : REM -@b-statements : [b-statement] (/":" [b-statement])* @b-statement : b-end | b-print | b-goto | b-let | b-input | b-if | b-gosub | b-return | b-for | b-next - | b-def | b-require | b-expr + | b-def | b-require b-end : /"end" b-print : /"print" [b-printable] (/";" [b-printable])* @b-printable : STRING | b-expr @@ -37,4 +36,5 @@ b-expt : [b-expt ("^")] b-value @b-value : b-number | b-id | /"(" b-expr /")" | b-func b-func : ID /"(" b-input-list /")" @b-input-list : (ID | b-expr) [/"," (ID | b-expr)]* -@b-number : INTEGER | DECIMAL \ No newline at end of file +@b-number : INTEGER | DECIMAL +b-repl : (b-statement | b-expr) (/":" [b-repl])* \ No newline at end of file diff --git a/beautiful-racket-demo/basic-demo-3/runtime.rkt b/beautiful-racket-demo/basic-demo-3/runtime.rkt index 170ad96..62e7d15 100644 --- a/beautiful-racket-demo/basic-demo-3/runtime.rkt +++ b/beautiful-racket-demo/basic-demo-3/runtime.rkt @@ -4,7 +4,7 @@ (define basic-output-port (make-parameter (open-output-nowhere))) -(define statement-parser (make-rule-parser b-statements)) +(define repl-parser (make-rule-parser b-repl)) (define (configure-this!) (basic-output-port (current-output-port)) @@ -13,7 +13,7 @@ (define one-line (read-line port)) (if (eof-object? one-line) eof - (statement-parser (make-tokenizer (open-input-string one-line))))) + (repl-parser (make-tokenizer (open-input-string one-line))))) (current-read-interaction read-one-line))