diff --git a/beautiful-racket-demo/scriptish-demo/main.rkt b/beautiful-racket-demo/scriptish-demo/main.rkt index e35555a..d2bf265 100644 --- a/beautiful-racket-demo/scriptish-demo/main.rkt +++ b/beautiful-racket-demo/scriptish-demo/main.rkt @@ -1,5 +1,5 @@ #lang br/quicklang -(require "grammar.rkt" brag/support) +(require "parser.rkt" brag/support) (module+ reader (provide read-syntax)) @@ -9,8 +9,8 @@ ":" "," "(" ")" "//" "/*" "*/" "if" "while" "==" "!=" "function" "return" "++")) -(define tokenize - (lexer +(define scriptish-lexer + (lexer-srcloc [(:or (from/stop-before "//" "\n") (from/to "/*" "*/")) (token 'COMMENT #:skip? #t)] [reserved-terms (token lexeme (string->symbol lexeme))] @@ -21,13 +21,21 @@ [(:+ (char-set "0123456789")) (token 'INTEGER (string->number lexeme))] [(:or (from/to "\"" "\"") (from/to "'" "'")) - (token 'STRING (string-trim lexeme (substring lexeme 0 1)))] + (let () + (token 'STRING (string-trim lexeme (substring lexeme 0 1))))] [whitespace (token 'WHITE #:skip? #t)] [any-char lexeme])) +(define (make-tokenizer ip [src #f]) + (port-count-lines! ip) + (lexer-file-path src) + (define (next-token) (scriptish-lexer ip)) + next-token) + (define (read-syntax src ip) - (define parse-tree (parse (λ () (tokenize ip)))) + (println src) + (define parse-tree (parse src (make-tokenizer ip src))) (strip-context (with-syntax ([PT parse-tree]) - #'(module you-win scriptish-demo/expander + #'(module scriptish-mod scriptish-demo/expander PT)))) \ No newline at end of file diff --git a/beautiful-racket-demo/scriptish-demo/grammar.rkt b/beautiful-racket-demo/scriptish-demo/parser.rkt similarity index 100% rename from beautiful-racket-demo/scriptish-demo/grammar.rkt rename to beautiful-racket-demo/scriptish-demo/parser.rkt