aboutsummaryrefslogtreecommitdiff
path: root/qklib/infix/rule-set.scm
diff options
context:
space:
mode:
authorMasaya Tojo <masaya@tojo.tokyo>2024-09-14 16:13:57 +0900
committerMasaya Tojo <masaya@tojo.tokyo>2024-09-14 16:15:37 +0900
commit11277783121140002ba19885690756de17d88538 (patch)
tree90d5f3fed9e4099dd77a66b2fdae5be9cab5b1dd /qklib/infix/rule-set.scm
parent172d403016f959549c7de8a9e257c6324af3b9e9 (diff)
Add support for unary minus operator
Diffstat (limited to 'qklib/infix/rule-set.scm')
-rw-r--r--qklib/infix/rule-set.scm12
1 files changed, 9 insertions, 3 deletions
diff --git a/qklib/infix/rule-set.scm b/qklib/infix/rule-set.scm
index 1189bca..db0c4e5 100644
--- a/qklib/infix/rule-set.scm
+++ b/qklib/infix/rule-set.scm
@@ -34,6 +34,7 @@
identity-value
identity-inv?
identity-unary?
+ identity-unary-precedence
direction
direction?
@@ -106,6 +107,9 @@
((symbol precedence direction identity)
(operator symbol precedence direction identity #f))
((symbol precedence direction identity prefix)
+ (when (and identity (identity-unary? identity)
+ (not (and direction (direction-left? direction))))
+ (error "operator: unary operator must be left direction" symbol))
(make-operator symbol precedence direction identity prefix))))
(define-record-type <direction>
@@ -160,14 +164,16 @@
(make-prefix binary-only? #t symbol))))
(define-record-type <identity>
- (make-identity value inv? unary?)
+ (make-identity value inv? unary? unary-precedence)
identity?
(value identity-value)
(inv? identity-inv?)
- (unary? identity-unary?))
+ (unary? identity-unary?)
+ (unary-precedence identity-unary-precedence))
(define identity
(case-lambda
((value) (identity value #f))
((value inv?) (identity value inv? #f))
- ((value inv? unary?) (make-identity value inv? unary?))))))
+ ((value inv? unary?) (identity value inv? unary? #f))
+ ((value inv? unary? unary-precedence) (make-identity value inv? unary? unary-precedence))))))