From c35b02c986992390d9728db642d4c9ed9c94dbb2 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Thu, 2 Mar 2017 12:45:11 -0800 Subject: [PATCH] add new token --- beautiful-racket-demo/basic-demo-3/lexer.rkt | 10 ++++++---- beautiful-racket-demo/basic-demo-3/parser.rkt | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/beautiful-racket-demo/basic-demo-3/lexer.rkt b/beautiful-racket-demo/basic-demo-3/lexer.rkt index e4be528..37d6d12 100644 --- a/beautiful-racket-demo/basic-demo-3/lexer.rkt +++ b/beautiful-racket-demo/basic-demo-3/lexer.rkt @@ -8,8 +8,8 @@ (define-lex-abbrev id-kapu (:or whitespace (char-set "()[]{}\",'`;#|\\"))) -(define-lex-abbrev id - (:seq (:~ (:or "-" id-kapu)) (:* (:~ id-kapu)))) +(define-lex-abbrev racket-id + (:seq "[" (:~ (:or "-" id-kapu)) (:* (:~ id-kapu)) "]")) (define basic-lexer (lexer-srcloc @@ -17,15 +17,17 @@ ["\n" (token 'NEWLINE lexeme)] [whitespace (token lexeme #:skip? #t)] [(from/stop-before "rem" "\n") (token 'REM lexeme)] + [racket-id (token 'RACKET-ID (string->symbol (trim-ends "[" lexeme "]")))] [reserved-terms (token lexeme lexeme)] + [(:seq alphabetic (:* (:or alphabetic numeric "$"))) + (token 'ID (string->symbol lexeme))] [digits (token 'INTEGER (string->number lexeme))] [(:or (:seq (:? digits) "." digits) (:seq digits ".")) (token 'DECIMAL (string->number lexeme))] - [id (token 'ID (string->symbol lexeme))] [(:or (from/to "\"" "\"") (from/to "'" "'")) (token 'STRING (substring lexeme 1 (sub1 (string-length lexeme))))])) -(provide basic-lexer) \ No newline at end of file +(provide basic-lexer) diff --git a/beautiful-racket-demo/basic-demo-3/parser.rkt b/beautiful-racket-demo/basic-demo-3/parser.rkt index ae5af15..990ee9f 100644 --- a/beautiful-racket-demo/basic-demo-3/parser.rkt +++ b/beautiful-racket-demo/basic-demo-3/parser.rkt @@ -22,7 +22,7 @@ b-for : /"for" b-id /"=" b-expr /"to" b-expr [/"step" b-expr] b-next : /"next" b-id b-def : /"def" b-id /"(" ID [/"," ID]* /")" /"=" b-expr b-import : /"import" b-import-name -@b-import-name : ID | STRING +@b-import-name : RACKET-ID | STRING b-export : /"export" b-export-name @b-export-name : ID b-expr : b-or-expr @@ -35,6 +35,6 @@ b-product : [b-product ("*"|"/"|"mod")] b-neg b-neg : ["-"] b-expt b-expt : [b-expt ("^")] b-value @b-value : b-number | b-id | /"(" b-expr /")" | b-func -b-func : ID /"(" b-expr [/"," b-expr]* /")" +b-func : (ID | RACKET-ID) /"(" b-expr [/"," b-expr]* /")" @b-number : INTEGER | DECIMAL b-repl : (b-statement | b-expr) (/":" [b-repl])*