diff options
author | Masaya Tojo <masaya@tojo.tokyo> | 2024-09-14 16:13:57 +0900 |
---|---|---|
committer | Masaya Tojo <masaya@tojo.tokyo> | 2024-09-14 16:15:37 +0900 |
commit | 11277783121140002ba19885690756de17d88538 (patch) | |
tree | 90d5f3fed9e4099dd77a66b2fdae5be9cab5b1dd /qklib/infix/rule-set.scm | |
parent | 172d403016f959549c7de8a9e257c6324af3b9e9 (diff) |
Add support for unary minus operator
Diffstat (limited to 'qklib/infix/rule-set.scm')
-rw-r--r-- | qklib/infix/rule-set.scm | 12 |
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)))))) |