Exam 2     Parser

; assume
;
; (str= s1 s2)    return true if two strings are equal
; (isNumber s1)   return true if s1 is "number"
; (prints s1)     print a string to screen
; (space)         print a blank to screen
; (tokenise)      read one token from input

(def tokenise () ()
  (set tok (sys 3)))

(def parseSym () ()
  (do
  (if (str= tok "ADD")
    (do
    (prints "OP:") (prints tok))
  (if (isNumber tok)
    (prints tok)
  ; else
    (do
    (prints "VAR:") (prints tok))))
  (space)))

(def parseX () () 0)        ; forward declaration

(def parseL () ()
  (do
  (tokenise)
  (if (not (str= tok ")"))
    (do
    (parseX) (parseL)))))

(def parseX () ()
  (do
  (if (str= tok "(")        ; it is a list
    (do
    (tokenise)
    (parseSym) (parseL))
    ; else
    (parseSym))))

(def main () ()
  (do
  (sys 11)        ; readinfile
  (tokenise)
  (parseX)))

;   End