Add documentation checker for exported symbols
[clnl] / src / main / parse.lisp
index 10e2f08aa25575207dab84d1433eae82e919188a..1e5c30593fed8acc330095f4b90f277e0da0c5fb 100644 (file)
 ; Make this only as complicated as it needs to be, letting it grow
 ; as we take on more and more of the language
 (defun parse (lexed-ast)
+ "PARSE LEXED-AST => AST
+
+ARGUMENTS AND VALUES:
+
+  LEXED-AST: An ambigious ast
+  AST: An unambigious ast that can be transpiled
+
+DESCRIPTION:
+
+  PARSE takes a ambigious LEXED-AST and converts it to an unambigious one.
+
+  The need for a parser between the lexer and the transpiler is because NetLogo
+  needs two passes to turn into something that can be used.  This is the only entry
+  point into this module, and should probably remain that way.
+
+  There's also a lot of error checking that the LEXED-AST even makes sense, even
+  though the lexer obviously thought it did.
+
+  Examples are too numerous and varied, but by inserting an output between
+  the lexer and this code, a good idea of what goes on can be gotten."
  (cond
   ((not lexed-ast) nil)
   ((numberp (car lexed-ast)) (cons (coerce (car lexed-ast) 'double-float) (parse (cdr lexed-ast))))
@@ -45,7 +65,7 @@
       (prim-name prim)
       (mapcar
        #'help-arg
-       (prim-args prim) 
+       (prim-args prim)
        (butlast parsed-remainder (- (length parsed-remainder) num-args))))
      (nthcdr num-args parsed-remainder))))
   (t (error "Couldn't parse ~S" lexed-ast))))
@@ -54,8 +74,8 @@
  (case arg-type
   (:command-block
    (if (not (and (consp arg) (eql 'block (car arg))))
-       (error "Required a block, but found a ~A" arg)
-       (cons :command-block (cdr arg))))
+    (error "Required a block, but found a ~A" arg)
+    (cons :command-block (cdr arg))))
   (t arg)))
 
 (defun parse-block (tokens)