diff --git a/collects/parser-tools/examples/calc.ss b/collects/parser-tools/examples/calc.ss index caeaa4f..871ac3c 100644 --- a/collects/parser-tools/examples/calc.ss +++ b/collects/parser-tools/examples/calc.ss @@ -13,14 +13,8 @@ (define vars (make-hash-table)) (define-lex-abbrevs - (lower-letter (- a z)) + (lower-letter (- "a" "z")) - ;; In the following line if we used (- A Z) dr/mzscheme would read it as (- a z) if - ;; case-sensitivity is not enabled. (- #\A #\Z) will not be altered because dr/mzscheme - ;; reads them as character constants and not as symbols. (- "A" "Z") would work as well - ;; since dr/mzscheme would read them as strings. The lexer generator treates single character - ;; strings and symbols the same as an actual #\ character. #cs(- A Z) works too because the #cs - ;; tells dr/mzscheme to read the next expression with case-sensitivity turned on. (upper-letter (- #\A #\Z)) ;; (- 0 9) would not work because the lexer does not understand numbers. (- #\0 #\9) is ok too. @@ -34,17 +28,15 @@ [(: #\tab #\space) (calcl input-port)] ;; The parser will treat the return of 'newline the same as (token-newline) [#\newline 'newline] - [(: = + - * / ^) (string->symbol lexeme)] + [(: "=" "+" "-" "*" "/" "^") (string->symbol lexeme)] ["(" 'OP] [")" 'CP] - [sin (token-FNCT sin)] - ;; It the parens are left off of an "invocation" of an abbreviation, it means the - ;; character sequence instead. - [(+ (: (lower-letter) (upper-letter))) (token-VAR (string->symbol lexeme))] - [(+ (digit)) (token-NUM (string->number lexeme))] + ["sin" (token-FNCT sin)] + [(+ (: lower-letter upper-letter)) (token-VAR (string->symbol lexeme))] + [(+ digit) (token-NUM (string->number lexeme))] ;; Strings which dr/mzscheme does not think of as symbols (such as . or ,) must be ;; entered as a string or character. "." would also be ok. - [(@ (+ (digit)) #\. (* (digit))) (token-NUM (string->number lexeme))])) + [(@ (+ digit) #\. (* digit)) (token-NUM (string->number lexeme))])) (define calcp diff --git a/collects/parser-tools/examples/read.ss b/collects/parser-tools/examples/read.ss index 3a974b4..ea659b6 100644 --- a/collects/parser-tools/examples/read.ss +++ b/collects/parser-tools/examples/read.ss @@ -17,24 +17,24 @@ (lexer-src-pos ;; Skip comments, without accumulating extra position information - [(: (whitespace) (comment)) (return-without-pos (scheme-lexer input-port))] + [(: whitespace comment) (return-without-pos (scheme-lexer input-port))] ["#t" (token-DATUM #t)] ["#f" (token-DATUM #f)] - [(@ "#\\" (any)) (token-DATUM (caddr (string->list lexeme)))] + [(@ "#\\" any) (token-DATUM (caddr (string->list lexeme)))] ["#\\space" (token-DATUM #\space)] ["#\\newline" (token-DATUM #\newline)] - [(: (@ (initial) (* (subsequent))) + - "...") (token-DATUM (string->symbol lexeme))] + [(: (@ initial (* subsequent)) "+" "-" "...") (token-DATUM (string->symbol lexeme))] [#\" (token-DATUM (list->string (get-string-token input-port)))] [#\( 'OP] [#\) 'CP] [#\[ 'OP] [#\] 'CP] ["#(" 'HASHOP] - [(num2) (token-DATUM (string->number lexeme 2))] - [(num8) (token-DATUM (string->number lexeme 8))] - [(num10) (token-DATUM (string->number lexeme 10))] - [(num16) (token-DATUM (string->number lexeme 16))] + [num2 (token-DATUM (string->number lexeme 2))] + [num8 (token-DATUM (string->number lexeme 8))] + [num10 (token-DATUM (string->number lexeme 10))] + [num16 (token-DATUM (string->number lexeme 16))] ["'" 'QUOTE] ["`" 'QUASIQUOTE] ["," 'UNQUOTE] @@ -53,117 +53,113 @@ (define-lex-abbrevs [any (- #\000 #\377)] - [letter (: (- a z) (- #\A #\Z))] + [letter (: (- "a" "z") (- #\A #\Z))] [digit (- #\0 #\9)] [whitespace (: #\newline #\return #\tab #\space #\vtab)] - [initial (: (letter) ! $ % & * / : < = > ? ^ _ ~ @)] - [subsequent (: (initial) (digit) + - #\. @)] + [initial (: letter "!" "$" "%" "&" "*" "/" ":" "<" "=" ">" "?" "^" "_" "~" "@")] + [subsequent (: initial digit "+" "-" #\. "@")] [comment (@ #\; (* (^ #\newline)) #\newline)] -; [numR (@ (prefixR) (complexR))] -; [complexR (: (realR) -; (@ (realR) @ (realR)) -; (@ (realR) + (urealR) i) -; (@ (realR) - (urealR) i) -; (@ (realR) + i) -; (@ (realR) - i) -; (@ + (urealR) i) -; (@ - (urealR) i) -; (@ + i) -; (@ - i))] -; [realR (@ (sign) (urealR))] -; [urealR (: (uintegerR) (@ (uintegerR) / (uintegerR)) (decimalR))] -; [uintegerR (@ (+ (digitR)) (* #\#))] -; [prefixR (: (@ (radixR) (exactness)) -; (@ (exactness) (radixR)))] -; [numR (@ (prefixR) (complexR))] -; [complexR (: (realR) -; (@ (realR) @ (realR)) - - [num2 (@ (prefix2) (complex2))] - [complex2 (: (real2) - (@ (real2) @ (real2)) - (@ (real2) + (ureal2) i) - (@ (real2) - (ureal2) i) - (@ (real2) + i) - (@ (real2) - i) - (@ + (ureal2) i) - (@ - (ureal2) i) - (@ + i) - (@ - i))] - [real2 (@ (sign) (ureal2))] - [ureal2 (: (uinteger2) (@ (uinteger2) / (uinteger2)))] - [uinteger2 (@ (+ (digit2)) (* #\#))] - [prefix2 (: (@ (radix2) (exactness)) - (@ (exactness) (radix2)))] - [radix2 "#b"] - [digit2 (: #\0 #\1)] +; [numR (@ prefixR complexR)] +; [complexR (: realR +; (@ realR "@" realR) +; (@ realR "+" urealR "i") +; (@ realR "-" urealR "i") +; (@ realR "+i") +; (@ realR "-i") +; (@ "+" urealR "i") +; (@ "-" urealR "i") +; (@ "+i") +; (@ "-i"))] +; [realR (@ sign urealR)] +; [urealR (: uintegerR (@ uintegerR "/" uintegerR) decimalR)] +; [uintegerR (@ (+ digitR) (* #\#))] +; [prefixR (: (@ radixR exactness) +; (@ exactness radixR))] - [num8 (@ (prefix8) (complex8))] - [complex8 (: (real8) - (@ (real8) @ (real8)) - (@ (real8) + (ureal8) i) - (@ (real8) - (ureal8) i) - (@ (real8) + i) - (@ (real8) - i) - (@ + (ureal8) i) - (@ - (ureal8) i) - (@ + i) - (@ - i))] - [real8 (@ (sign) (ureal8))] - [ureal8 (: (uinteger8) (@ (uinteger8) / (uinteger8)))] - [uinteger8 (@ (+ (digit8)) (* #\#))] - [prefix8 (: (@ (radix8) (exactness)) - (@ (exactness) (radix8)))] + [num2 (@ prefix2 complex2)] + [complex2 (: real2 + (@ real2 "@" real2) + (@ real2 "+" ureal2 "i") + (@ real2 "-" ureal2 "i") + (@ real2 "+i") + (@ real2 "-i") + (@ "+" ureal2 "i") + (@ "-" ureal2 "i") + (@ "+i") + (@ "-i"))] + [real2 (@ sign ureal2)] + [ureal2 (: uinteger2 (@ uinteger2 "/" uinteger2))] + [uinteger2 (@ (+ digit2) (* #\#))] + [prefix2 (: (@ radix2 exactness) + (@ exactness radix2))] + [radix2 "#b"] + [digit2 (: "0" "1")] + [num8 (@ prefix8 complex8)] + [complex8 (: real8 + (@ real8 "@" real8) + (@ real8 "+" ureal8 "i") + (@ real8 "-" ureal8 "i") + (@ real8 "+i") + (@ real8 "-i") + (@ "+" ureal8 "i") + (@ "-" ureal8 "i") + (@ "+i") + (@ "-i"))] + [real8 (@ sign ureal8)] + [ureal8 (: uinteger8 (@ uinteger8 "/" uinteger8))] + [uinteger8 (@ (+ digit8) (* #\#))] + [prefix8 (: (@ radix8 exactness) + (@ exactness radix8))] [radix8 "#o"] - [digit8 (- #\0 #\7)] + [digit8 (- "0" "7")] - [num10 (@ (prefix10) (complex10))] - [complex10 (: (real10) - (@ (real10) @ (real10)) - (@ (real10) + (ureal10) i) - (@ (real10) - (ureal10) i) - (@ (real10) + i) - (@ (real10) - i) - (@ + (ureal10) i) - (@ - (ureal10) i) - (@ + i) - (@ - i))] - [real10 (@ (sign) (ureal10))] - [ureal10 (: (uinteger10) (@ (uinteger10) / (uinteger10)) (decimal10))] - [uinteger10 (@ (+ (digit10)) (* #\#))] - [prefix10 (: (@ (radix10) (exactness)) - (@ (exactness) (radix10)))] + [num10 (@ prefix10 complex10)] + [complex10 (: real10 + (@ real10 "@" real10) + (@ real10 "+" ureal10 "i") + (@ real10 "-" ureal10 "i") + (@ real10 "+i") + (@ real10 "-i") + (@ "+" ureal10 "i") + (@ "-" ureal10 "i") + (@ "+i") + (@ "-i"))] + [real10 (@ sign ureal10)] + [ureal10 (: uinteger10 (@ uinteger10 "/" uinteger10) decimal10)] + [uinteger10 (@ (+ digit10) (* #\#))] + [prefix10 (: (@ radix10 exactness) + (@ exactness radix10))] [radix10 (: (@) "#d")] - [digit10 (digit)] - [decimal10 (: (@ (uinteger10) (suffix)) - (@ #\. (+ (digit10)) (* #\#) (suffix)) - (@ (+ (digit10)) #\. (* (digit10)) (* #\#) (suffix)) - (@ (+ (digit10)) (+ #\#) #\. (* #\#) (suffix)))] + [digit10 digit] + [decimal10 (: (@ uinteger10 suffix) + (@ #\. (+ digit10) (* #\#) suffix) + (@ (+ digit10) #\. (* digit10) (* #\#) suffix) + (@ (+ digit10) (+ #\#) #\. (* #\#) suffix))] - [num16 (@ (prefix16) (complex16))] - [complex16 (: (real16) - (@ (real16) @ (real16)) - (@ (real16) + (ureal16) i) - (@ (real16) - (ureal16) i) - (@ (real16) + i) - (@ (real16) - i) - (@ + (ureal16) i) - (@ - (ureal16) i) - (@ + i) - (@ - i))] - [real16 (@ (sign) (ureal16))] - [ureal16 (: (uinteger16) (@ (uinteger16) / (uinteger16)))] - [uinteger16 (@ (+ (digit16)) (* #\#))] - [prefix16 (: (@ (radix16) (exactness)) - (@ (exactness) (radix16)))] + [num16 (@ prefix16 complex16)] + [complex16 (: real16 + (@ real16 "@" real16) + (@ real16 "+" ureal16 "i") + (@ real16 "-" ureal16 "i") + (@ real16 "+i") + (@ real16 "-i") + (@ "+" ureal16 "i") + (@ "-" ureal16 "i") + "+i" + "-i")] + [real16 (@ sign ureal16)] + [ureal16 (: uinteger16 (@ uinteger16 "/" uinteger16))] + [uinteger16 (@ (+ digit16) (* #\#))] + [prefix16 (: (@ radix16 exactness) + (@ exactness radix16))] [radix16 "#x"] - [digit16 (: (digit) (- #\a #\f) (- #\A #\F))] + [digit16 (: digit (- #\a #\f) (- #\A #\F))] - [suffix (: (@) (@ (exponent-marker) (sign) (+ (digit10))))] - [exponent-marker (: e s f d l)] - [sign (: (@) + -)] + [suffix (: (@) (@ exponent-marker sign (+ digit10)))] + [exponent-marker (: "e" "s" "f" "d" "l")] + [sign (: (@) "+" "-")] [exactness (: (@) "#i" "#e")])