Add exception for strings
authorFrank Duncan <frank@kank.net>
Sun, 12 Jul 2015 18:45:26 +0000 (13:45 -0500)
committerFrank Duncan <frank@kank.net>
Mon, 13 Jul 2015 05:18:34 +0000 (00:18 -0500)
resources/good.lisp
src/main/checker.lisp

index adb5e3797718e50a07ec79a6c1d168429c14583f..10a6091be89ee51e56da7cd6edc3e4fcd263d4e1 100644 (file)
@@ -3,12 +3,19 @@
 (defun small-guy (a b) (+ a b))
 (defun small-guy-2 (a b) (+ a b))
 
+; This comment is awesome
 (defun hello-world (a b c)
  (progn
   (let
-   ((x y)
-    (z 9))
+   ((x y)                            ; Ok, this comment is also great
+    (z 9))                           ; so is this one!
    (with-open-file (str "increasinglylongfilenamesfailme.dat" :direction :input :if-does-not-exist :create)
     (when
      (read-line str)
-     (format t "This file had some things in int, yay!~%")))))
+     (format t "This file had some things in int, yay!~%"))))))
+
+(defvar *x* "hello world
+ this is a multiline string
+ with \" some escaped things
+ and some (_) and whatnot
+ ")
index 0e3dd7a39b4095508cadb59b801ed2c72e038f34..3a78d88980958db5d1085f47b31d2369ce687c99 100644 (file)
@@ -19,7 +19,7 @@
 ;
 ; Exceptions
 ; * comments
-; - multiline strings
+; * multiline strings
 
 ; Some thoughts
 ; - form starting reader macros will have to be hand added to this code
@@ -49,6 +49,7 @@
     :beginning-of-line-with-comment-and-separator ; weird edge case part 2
     :first-symbol ; first symbol of form/line
     :all ; matches everything
+    :in-string
    )))
 
 (defun set-state (state)
      ((< 50 (- *line-no* (car form))) "Forms can't be over 50 lines long")
      (t (setf *form-ended-on-same-line* (= *line-no* (car form))) nil)))))
  (defevaluator :normal "::" (constantly "No internal symbols from other packages"))
+ (defevaluator :in-string "\\\\\"" (constantly nil))
+ (defevaluator :normal "\"" (lambda () (set-state :in-string)))
+ (defevaluator :in-string "\"" (lambda () (set-state :normal)))
+ (defevaluator :in-string "\\n"
+  (lambda ()
+   (incf *line-no*)
+   (setf *col-no* -1)
+   nil))
+ (defevaluator :in-string "." (constantly nil))
  (defevaluator :first-symbol "\\n" (constantly "No new line after opening form"))
  (defevaluator :first-symbol " " (constantly "No space after opening parens"))
  (defevaluator :first-symbol ""