From 11277783121140002ba19885690756de17d88538 Mon Sep 17 00:00:00 2001 From: Masaya Tojo Date: Sat, 14 Sep 2024 16:13:57 +0900 Subject: Add support for unary minus operator --- qklib/infix/rule-set.scm | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'qklib/infix') 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 @@ -160,14 +164,16 @@ (make-prefix binary-only? #t symbol)))) (define-record-type - (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)))))) -- cgit v1.2.3