summary refs log tree commit diff stats
BranchCommit messageAuthorAge
masterremove remote registry list push to leveldb because that doesn't work right nowBenjamin Morrison3 years
 
TagDownloadAuthorAge
v0.5.0getwtxt-0.5.0.tar.gz  Benjamin Morrison3 years
v0.4.15getwtxt-0.4.15.tar.gz  Ben Morrison4 years
v0.4.14getwtxt-0.4.14.tar.gz  Ben Morrison4 years
v0.4.13getwtxt-0.4.13.tar.gz  Ben Morrison4 years
v0.4.12getwtxt-0.4.12.tar.gz  Ben Morrison4 years
v0.4.11getwtxt-0.4.11.tar.gz  Ben Morrison4 years
v0.4.10getwtxt-0.4.10.tar.gz  Ben Morrison4 years
v0.4.9getwtxt-0.4.9.tar.gz  Ben Morrison4 years
v0.4.8getwtxt-0.4.8.tar.gz  Ben Morrison5 years
v0.4.7getwtxt-0.4.7.tar.gz  Ben Morrison5 years
v0.4.6getwtxt-0.4.6.tar.gz  Ben Morrison5 years
v0.4.5getwtxt-0.4.5.tar.gz  Ben Morrison5 years
v0.4.4getwtxt-0.4.4.tar.gz  Ben Morrison5 years
v0.4.3getwtxt-0.4.3.tar.gz  Ben Morrison5 years
v0.4.2getwtxt-0.4.2.tar.gz  Ben Morrison5 years
v0.4.1getwtxt-0.4.1.tar.gz  Ben Morrison5 years
v0.4.0getwtxt-0.4.0.tar.gz  Ben Morrison5 years
v0.3.3getwtxt-0.3.3.tar.gz  Ben Morrison5 years
v0.3.2getwtxt-0.3.2.tar.gz  Ben Morrison5 years
v0.3.1getwtxt-0.3.1.tar.gz  Ben Morrison5 years
v0.3.0getwtxt-0.3.0.tar.gz  Ben Morrison5 years
v0.2.4getwtxt-0.2.4.tar.gz  Ben Morrison5 years
v0.2.3getwtxt-0.2.3.tar.gz  Ben Morrison5 years
v0.2.2getwtxt-0.2.2.tar.gz  Ben Morrison5 years
v0.2.1getwtxt-0.2.1.tar.gz  Ben Morrison5 years
v0.2.0getwtxt-0.2.0.tar.gz  Ben Morrison5 years
v0.1.1getwtxt-0.1.1.tar.gz  Ben Morrison5 years
v0.1getwtxt-0.1.tar.gz  Ben Morrison5 years
lass */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
(defun pp-binop (bin-op)
  (case bin-op
    ((plus) "+")
    ((mult) "*")
    ((mod) "%")
    ((minus) "-")
    ((div) "/")
    ((equal) " = ")
    ((less) " < ")
    ((lesseq) " <= ")
    ((great) " > ")
    ((greateq) " >= ")
    ((diff) " <> ")
    ((and) " & ")
    ((or) " | ")))

(defun pp-unrop (unr-op)
   (case unr-op
         ((uminus) "-")
         ((not) "!")))

(defun parenthesis (x)
   (string-append "(" x ")"))

(defgeneric ppl (pr expr))
(defmethod ppl (pr (expr <exp-int>))
   (convert (num expr) <string>))
(defmethod ppl (pr (expr <exp-var>))
   (var expr))
(defmethod ppl (pr (expr <exp-str>))
   (string-append "\"" (str expr) "\""))
(defmethod ppl (pr (expr <exp-unr>))
   (let* ((op (op expr))
          (res-op (pp-unrop op))
          (pr2 (priority-uop op))
          (res-e (ppl pr2 (expr expr))))
         (if (= pr 0)
             (parenthesis (string-append res-op res-e))
             (string-append res-op res-e))))
(defmethod ppl (pr (expr <exp-bin>))
   (let* ((op (op expr))
          (pr2 (priority-binop op))
          (res (string-append (ppl pr2 (expr1 expr)) (pp-binop op) (ppr pr2 (expr2 expr)))))
         (if (>= pr2 pr)
             res
             (parenthesis res))))

(defgeneric ppr (pr expr))
(defmethod ppr (pr (expr <exp-bin>))
   (let* ((op (op expr))
          (pr2 (priority-binop op))
          (res (string-append (ppl pr2 (expr1 expr)) (pp-binop op) (ppr pr2 (expr2 expr)))))
         (if (> pr2 pr)
             res
             (parenthesis res))))
(defmethod ppr (pr (expr <exp-int>))
   (ppl pr expr))
(defmethod ppr (pr (expr <exp-var>))
   (ppl pr expr))
(defmethod ppr (pr (expr <exp-str>))
   (ppl pr expr))
(defmethod ppr (pr (expr <exp-unr>))
   (ppl pr expr))

(defun pp-expression (expr)
   (ppl 0 expr))

(defgeneric pp-command (cmd))
(defmethod pp-command ((cmd <cmd-rem>))
   (string-append "REM " (str cmd)))
(defmethod pp-command ((cmd <cmd-goto>))
   (string-append "GOTO " (convert (num cmd) <string>)))
(defmethod pp-command ((cmd <cmd-print>))
   (string-append "PRNT " (pp-expression (expr cmd))))
(defmethod pp-command ((cmd <cmd-input>))
   (string-append "INPUT " (var cmd)))
(defmethod pp-command ((cmd <cmd-if>))
   (string-append "IF " (pp-expression (expr cmd)) " THEN " (convert (num cmd) <string>)))
(defmethod pp-command ((cmd <cmd-let>))
   (string-append "LET " (var cmd) " = " (pp-expression (expr cmd))))

(defun pp-line (l)
   (string-append (convert (car l) <string>) "  " (pp-command (cdr l))))