summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-04-11 00:27:40 -0400
committerbd <bdunahu@operationnull.com>2025-04-11 00:27:40 -0400
commit5d63924222856e9decd4f8981869141ac5a5b430 (patch)
tree76b4ba4758fa1f612c2962e4c07773bc304dab97
parent23d2ccc3e1b05a1ca0ff72317cc6da0773a0a9d1 (diff)
Rename some grammar rules (for better error output
-rw-r--r--src/parse.lisp43
1 files changed, 22 insertions, 21 deletions
diff --git a/src/parse.lisp b/src/parse.lisp
index a3c9cbd..2e1cf55 100644
--- a/src/parse.lisp
+++ b/src/parse.lisp
@@ -12,58 +12,59 @@
(esrap:defrule eol (and (esrap:? space) (esrap:? (and #\; (* (not #\newline)))) #\newline)
(:constant nil))
-(esrap:defrule nl (+ eol)
+(esrap:defrule newline (+ eol)
(:constant nil))
(esrap:defrule sign (or #\+ #\-))
-(esrap:defrule alpha (+ (alphanumericp character))
+(esrap:defrule alphanumeric (+ (alphanumericp character))
(:text t))
;;; defines rules to parse an integer in various bases
(defmacro define-number-rule ())
-(esrap:defrule binary (and #\0 #\B (+ (or "0" "1")))
+(esrap:defrule binary-number (and #\0 #\B (+ (or "0" "1")))
(:lambda (e) (parse-integer (esrap:text (cddr e)) :radix 2)))
-(esrap:defrule octal (and #\0 #\O (+ (or (esrap:character-ranges (#\0 #\7)))))
+(esrap:defrule octal-number (and #\0 #\O (+ (or (esrap:character-ranges (#\0 #\7)))))
(:lambda (e) (parse-integer (esrap:text (cddr e)) :radix 8)))
-(esrap:defrule decimal (+ (or (esrap:character-ranges (#\0 #\9))))
+(esrap:defrule decimal-number (+ (or (esrap:character-ranges (#\0 #\9))))
(:lambda (e) (parse-integer (esrap:text e) :radix 10)))
-(esrap:defrule hex (and #\0 #\X (+ (or (esrap:character-ranges (#\0 #\9))
+(esrap:defrule hexadecimal-number (and #\0 #\X (+ (or (esrap:character-ranges (#\0 #\9))
"A" "B" "C" "D" "E" "F")))
(:lambda (e) (parse-integer (esrap:text (cddr e)) :radix 16)))
-(esrap:defrule int (and (esrap:? sign) (or binary octal hex decimal))
+(esrap:defrule integer (and (esrap:? sign) (or binary-number octal-number
+ hexadecimal-number decimal-number))
(:destructure (s i)
(if (and s (string= s "-")) (- i) i)))
;;; defines rules to parse an operand
-(esrap:defrule register (and #\$ int)
+(esrap:defrule register (and #\$ integer)
(:function cadr)
(:lambda (e) (list 'emit::rr e)))
-(esrap:defrule variable alpha
+(esrap:defrule variable alphanumeric
(:lambda (e) (list 'emit::var e)))
-(esrap:defrule dereference (and int #\( register #\))
+(esrap:defrule dereference (and integer #\( register #\))
(:destructure (i1 w1 r w2)
(declare (ignore w1 w2))
(list r (list 'emit::imm i1))))
-(esrap:defrule immediate (or int variable)
+(esrap:defrule immediate (or integer variable)
(:lambda (e) (list 'emit::imm e)))
;;; defines rules to parse labels
-(esrap:defrule label alpha
+(esrap:defrule label alphanumeric
(:lambda (e) (list 'emit::l e line-number)))
-(esrap:defrule label-decl (and alpha #\:)
+(esrap:defrule label-declaration (and alphanumeric #\:)
(:function car)
(:lambda (e)
(util:add-label e line-number)
@@ -136,41 +137,41 @@ DESTRUCTURE-PATTERN is the list of non-terminals on the right side of the gramma
;;; defines rules to parse the .text segment
-(esrap:defrule instr-clean (and (esrap:? space) instr nl)
+(esrap:defrule instr-clean (and (esrap:? space) instr newline)
(:function cadr)
(:lambda (i) (incf line-number) i))
-(esrap:defrule label-clean (and label-decl nl)
+(esrap:defrule label-clean (and label-declaration newline)
(:function car))
(esrap:defrule text-line (or instr-clean label-clean))
-(esrap:defrule text (and ".TEXT" (esrap:? space) nl (* text-line))
+(esrap:defrule text (and ".TEXT" (esrap:? space) newline (* text-line))
(:function cadddr)
(:lambda (e) `(emit::x ,@(remove nil e))))
;;; defines rules to parse the .data segment
-(esrap:defrule data-word (and (esrap:? space) int)
+(esrap:defrule data-word (and (esrap:? space) integer)
(:function cadr)
(:lambda (e)
(incf var-offset)
e))
-(esrap:defrule var-decl alpha
+(esrap:defrule var-declaration alphanumeric
(:lambda (e)
(util:add-variable e var-offset)
nil))
-(esrap:defrule data-line (and (esrap:? space) var-decl (+ data-word) nl)
+(esrap:defrule data-line (and (esrap:? space) var-declaration (+ data-word) newline)
(:function caddr))
-(esrap:defrule data (and ".DATA" (esrap:? space) nl (* data-line))
+(esrap:defrule data (and ".DATA" (esrap:? space) newline (* data-line))
(:function cadddr)
(:lambda (e) `(emit::d ,@(apply #'append e))))
;;; defines rules to parse a program
-(esrap:defrule str->ast (and (* (or space nl)) data text)
+(esrap:defrule str->ast (and (* (or space newline)) data text)
(:function cdr)
(:lambda (e) `(emit::p ,@e)))