Fix bug with making [] extended alphabetic.
authorGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Sat, 6 Apr 1991 05:23:30 +0000 (05:23 +0000)
committerGuillermo J. Rozas <edu/mit/csail/zurich/gjr>
Sat, 6 Apr 1991 05:23:30 +0000 (05:23 +0000)
char-set/atom-delimiters must be changed in the parser to exclude [].
Otherwise the parser goes into an infinite loop since when peeking any
of them, we will read until a delimiter is found, but it will work as
a delimiter, so the empty string will be interned, and we will
dispatch on the peeked char again, ...

v7/src/sicp/studen.scm

index 3c7aacf69af5eb93d9476d48a3b3732a2bc604ed..3031c6a3f770c4ff5586b209008fa7d203bb1b67 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/sicp/studen.scm,v 1.5 1991/03/12 23:18:51 arthur Exp $
+$Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/sicp/studen.scm,v 1.6 1991/04/06 05:23:30 jinx Exp $
 
 Copyright (c) 1987-91 Massachusetts Institute of Technology
 
@@ -57,7 +57,27 @@ MIT in each case. |#
                               (char=? #\- char)))
                        (begin (discard-char)
                               (string-append string "-" (loop)))
-                       string)))))))))
+                       string))))))))
+  
+  (define char-set/mit-scheme-atom-delimiters
+    char-set/atom-delimiters)
+
+  (define char-set/sicp-atom-delimiters
+    (char-set-difference
+     char-set/mit-scheme-atom-delimiters
+     (char-set #\[ #\])))
+
+  (define (set-atom-delimiters! kind)
+    (set! char-set/atom-delimiters
+         (case kind
+           ((mit-scheme)
+            char-set/mit-scheme-atom-delimiters)
+           ((sicp)
+            char-set/sicp-atom-delimiters)
+           (else
+            (error "set-atom-delimiters!: Unknown kind")))))
+
+) ;; end in-package
 
 (parser-table/set-entry! system-global-parser-table
                         "#\/"
@@ -83,12 +103,17 @@ MIT in each case. |#
 
 (define *student-syntax-table*)
 
+(define set-atom-delimiters!
+  (access set-atom-delimiters! (->environment '(runtime parser))))
+
 (define (enable-system-syntax)
   (set-current-parser-table! system-global-parser-table)
+  (set-atom-delimiters! 'mit-scheme)
   (set-repl/syntax-table! (nearest-repl) system-global-syntax-table))
 
 (define (disable-system-syntax)
   (set-current-parser-table! *student-parser-table*)
+  (set-atom-delimiters! 'sicp)
   (set-repl/syntax-table! (nearest-repl) *student-syntax-table*))
 
 (define (initialize-syntax!)
@@ -102,7 +127,7 @@ MIT in each case. |#
   ;; Add brackets as extended alphabetic since they are used in book (ugh!)
   (parser-table/entry
    system-global-parser-table
-   "/"
+   "@"
    (lambda (parse-object collect-list)
      (parser-table/set-entry! sicp-parser-table "[" parse-object collect-list)
      (parser-table/set-entry! sicp-parser-table "]" parse-object