about summary refs log tree commit diff stats
path: root/parsing.lsp
diff options
context:
space:
mode:
authorDarren Bane <dbane@tilde.institute>2020-12-11 14:14:33 +0000
committerDarren Bane <dbane@tilde.institute>2020-12-11 14:14:33 +0000
commit207cda23007f05dd954ee82511babba457465265 (patch)
tree44c143f1554b83d31eaac374a738b7fbaaba459d /parsing.lsp
parent76105d297c5b56cf097bcf129e6de56d681744cc (diff)
parentf16f553f2effb7ac8120fb8a15b59bcdd480a97d (diff)
downloadlsp-207cda23007f05dd954ee82511babba457465265.tar.gz
Merge branch 'master' of /home/dbane/public_repos/lsp into master
Diffstat (limited to 'parsing.lsp')
-rw-r--r--parsing.lsp43
1 files changed, 43 insertions, 0 deletions
diff --git a/parsing.lsp b/parsing.lsp
new file mode 100644
index 0000000..3e26a35
--- /dev/null
+++ b/parsing.lsp
@@ -0,0 +1,43 @@
+(defpackage #:parsing
+  (:use #:openlisp #:lex #:abs-syn)
+  (:export
+   #:parse))
+(in-package #:parsing)
+
+(defclass <exp-elem> () () (:abstractp t))
+(defclass <elem-exp> (<exp-elem>) ((expr :accessor expr)))
+(defclass <elem-bin> (<exp-elem>) ((bin-op :accessor bin-op)))
+(defclass <elem-unr> (<exp-elem>) ((unr-op :accessor unr-op)))
+(defclass <elem-lp> (<exp-elem>) ())
+
+(defun unr-symb (s)
+  (cond ((string= s "!") 'not)
+	((string= s "-") 'uminus)
+	(t (error "Parse error"))))
+
+(defun bin-symb (s)
+  (cond ((string= s "+") 'plus)
+	((string= s "-") 'minus)
+	((string= s "*") 'mult)
+	((string= s "/") 'div)
+	((string= s "%") 'mod)
+	((string= s "=") 'equal)
+	((string= s "<") 'less)
+	((string= s "<=") 'lesseq)
+	((string= s ">") 'great)))
+
+(defun parse (str)
+  (let* ((cl (init-lex str))
+	 (tok (lexer cl)))
+    (cond ((instancep tok (class <lint>))
+	   (create (class <line>) 'n n 'c (parse-cmd cl)))
+	  ((instancep tok (class <lident>))
+	   (cond ((string= (ident tok) "LIST")
+		  (create (class <phrase-list>)))
+		 ((string= (ident tok) "RUN")
+		  (create (class <phrase-run>)))
+		 ((string= (ident tok) "END")
+		  (create (class <phrase-p-end>)))
+		 (t (error "Parse error"))))
+	  (t (error "Parse error")))))
+(provide "parsing")