Skip to content

Commit f76b1b7

Browse files
committed
versions 10.8 Moved some n-arity code use from nfx to infix-with-precedence-to-prefix module.
1 parent b1bcac8 commit f76b1b7

File tree

4 files changed

+59
-52
lines changed

4 files changed

+59
-52
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,18 @@ code generated by the SRFI 105 Curly Infix parser and run it like a normal Racke
2525
Again you will have all the information about errors with the true line number displayed.
2626
Another method is to use the [Makefile](https://github.com/damien-mattei/Scheme-PLUS-for-Racket/blob/main/examples/racket/Makefile) provided (see docs).
2727

28+
29+
**Changes of version 10.8:**
30+
31+
Only internal changes in code. Prepare for a greater upgrade.Moved some n-arity code use from nfx to infix-with-precedence-to-prefix module.
32+
Updated relatively with the code changes the personal internal documentation design of Scheme+ which is hosted in the Kawa Scheme+ project for historical reason.
33+
34+
<br>
35+
2836
**Changes of version 10.7:**
2937

3038
No change in API but i removed depandancies between Scheme+ and SRFI-105-curly-infix that was alternating-parameters procedure. The procedure is now duplicated like it was in old versions. This is not elegant but remove dependancies that would lead in future version when i will use more scheme+ procedure in SRFI-105 parser in fatal circular dependancies.
3139

32-
<br>
3340

3441
**Changes of version 10.5:**
3542

infix-with-precedence-to-prefix.rkt

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
Scheme+/plus-minus-parser
4242
Scheme+/atom
4343
Scheme+/in-equalities
44+
Scheme+/n-arity
4445
)
4546

4647

@@ -426,44 +427,55 @@
426427

427428
;; we can check for expressions like 2<3<=3 here or later in the 'else of next 'if
428429

429-
(define rv
430-
431-
(begin
432-
;;(display "!*prec-generic-infix-parser : rv : deep-terms:") (display deep-terms) (newline)
433-
;; test for simple-infix (no operator precedence)
434-
(if (simple-infix-list-syntax? deep-terms)
435-
436-
(begin
437-
;; (display "!*prec-generic-infix-parser : deep-terms is a simple infix list") (newline)
438-
;; (display "!*prec-generic-infix-parser : deep-terms=") (display deep-terms) (newline)
439-
(return ;; list ; we put it in a list because rv2 take the car... or use return to skip list decapsulation
440-
(cons (cadr deep-terms) ; cadr is op in arg1 op arg2 op ....
441-
(alternating-parameters deep-terms))))
442-
443-
(begin
444-
;; (display "!*prec-generic-infix-parser : deep-terms is not a simple infix list") (newline)
445-
;; (display "!*prec-generic-infix-parser : deep-terms=") (display deep-terms) (newline)
446-
;; (newline)
447-
448-
;; we can check for expressions like 2<3<=3 here
449-
(when (multiple-in-equalities? deep-terms)
450-
(return (infix->prefix-in-equality deep-terms)))
430+
;;(display "!*prec-generic-infix-parser : rv : deep-terms:") (display deep-terms) (newline)
431+
;; test for simple-infix (no operator precedence)
432+
(when (simple-infix-list-syntax? deep-terms)
433+
;; (display "!*prec-generic-infix-parser : deep-terms is a simple infix list") (newline)
434+
;; (display "!*prec-generic-infix-parser : deep-terms=") (display deep-terms) (newline)
435+
(return ;; list ; we put it in a list because rv2 take the car... or use return to skip list decapsulation
436+
(cons (cadr deep-terms) ; cadr is op in arg1 op arg2 op ....
437+
(alternating-parameters deep-terms))))
438+
439+
;; (display "!*prec-generic-infix-parser : deep-terms is not a simple infix list") (newline)
440+
;; (display "!*prec-generic-infix-parser : deep-terms=") (display deep-terms) (newline)
441+
;; (newline)
442+
443+
;; we can check for expressions like 2<3<=3 here
444+
(when (multiple-in-equalities? deep-terms)
445+
(return (infix->prefix-in-equality deep-terms)))
451446

452-
(when (not (infix-canonical? deep-terms))
453-
(error "infix-with-precedence-to-prefix.rkt : !*prec-generic-infix-parser : not a canonical infix expression: " deep-terms))
447+
(when (not (infix-canonical? deep-terms))
448+
(error "infix-with-precedence-to-prefix.rkt : !*prec-generic-infix-parser : not a canonical infix expression: " deep-terms))
454449

455-
(pre-check-!*-generic-infix-parser deep-terms creator)))))
450+
(define rv (pre-check-!*-generic-infix-parser deep-terms creator))
456451

457452

458453
;; (display "!*prec-generic-infix-parser : rv=") (display rv) (newline)
459454

460455
;; (newline)
461456
;; (newline)
462457

463-
(define rv2 (car rv))
464-
;;(display "!*prec-generic-infix-parser : (car rv) = rv2 =") (display rv2) (newline)
458+
(define expr (car rv))
459+
;;(display "!*prec-generic-infix-parser : (car rv) = expr =") (display expr) (newline)
460+
461+
;; TODO pass to n-arity also arithmetic expressions (+ , * , ...) note: fail with n-arity
462+
;; note: some overloaded arithmetic operator could not have implemented the n-arity
463+
;; perheaps write this in another module ,sort of !*post-generic-infix-parser
464+
(if ;;(not (isEXPONENTIAL? expr))
465+
(or (isDEFINE? expr)
466+
(isASSIGNMENT? expr))
467+
468+
;; make n-arity for <- and <+ only (because could be false with ** , but not implemented in n-arity for now)
469+
;; (begin
470+
;; (display "!*prec-generic-infix-parser : calling n-arity on expr :") (display expr) (newline)
471+
(n-arity ;; this avoids : '{x <- y <- z <- t <- u <- 3 * 4 + 1}
472+
;; SRFI-105.scm : !0 result = (<- (<- (<- (<- (<- x y) z) t) u) (+ (* 3 4) 1)) ;; fail set! ...
473+
;; transform in : '(<- x y z t u (+ (* 3 4) 1))
474+
expr) ;) ; end begin
475+
476+
expr)
465477

466-
rv2)
478+
) ; end def
467479

468480

469481

info.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"SRFI-105-for-Racket"
1212
"try-catch"))
1313
(define pkg-desc "Scheme+ for Racket")
14-
(define version "10.7")
14+
(define version "10.8")
1515
(define pkg-authors '(mattei))
1616
(define scribblings '(("scribblings/scheme-plus.scrbl" ())))
1717
(define build-deps '("scribble-lib" "racket-doc" "scribble-code-examples" "scribble-doc"))

nfx.rkt

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
(provide $nfx$)
2323

24-
(require (for-syntax Scheme+/n-arity)
24+
(require ;(for-syntax Scheme+/n-arity)
2525
(for-syntax Scheme+/infix-with-precedence-to-prefix)
2626
(for-syntax Scheme+/operators)
2727
;;(for-syntax Scheme+/infix)
@@ -90,7 +90,7 @@
9090
;; (define x - 4)
9191
;; x
9292
;; -4
93-
(($nfx$ op1 e1) ; note : with 2 arg !*-prec-generic-infix-parser could not work , so we use recall-infix-parser
93+
(($nfx$ op1 e1) ; deprecated note : with 2 arg !*-prec-generic-infix-parser could not work , so we use recall-infix-parser
9494

9595
(with-syntax
9696

@@ -108,7 +108,8 @@
108108
;;) ; end car
109109

110110
;;(car ; probably because the result will be encapsuled in a list !
111-
(!*prec-generic-infix-parser (syntax->list #'(op1 e1))
111+
(!*prec-generic-infix-parser (list #'op1 #'e1)
112+
;(syntax->list #'(op1 e1))
112113
(lambda (op a b) (list op a b)))
113114
;) ; close car
114115

@@ -150,25 +151,12 @@
150151
;; ;;(syntax->list #'(e1 op1 e2 op2 e3 op ...))))
151152
;; (syntax->list #'(e1 op1 e2 op ...))))
152153

153-
(let ((expr ;(car ; probably because the result will be encapsuled in a list !
154-
;;(!*prec-generic-infix-parser (syntax->list #'(e1 op1 e2 op2 e3 op ...)) ; apply operator precedence rules
155-
(!*prec-generic-infix-parser (syntax->list #'(e1 op1 e2 op ...))
156-
(lambda (op a b) (list op a b)))
157-
;) ; closing car
158-
))
159-
160-
;; TODO pass back in n-arity also arithmetic operators (+ , * , ...) note: fail with n-arity
161-
(if ;;(not (isEXPONENTIAL? expr))
162-
(or (isDEFINE? expr)
163-
(isASSIGNMENT? expr))
164-
;; make n-arity for <- and <+ only (because could be false with ** , but not implemented in n-arity for now)
165-
;; (begin
166-
;; (display "$nfx$ : calling n-arity on expr :") (display expr) (newline)
167-
(n-arity ;; this avoids : '{x <- y <- z <- t <- u <- 3 * 4 + 1}
168-
;; SRFI-105.scm : !0 result = (<- (<- (<- (<- (<- x y) z) t) u) (+ (* 3 4) 1)) ;; fail set! ...
169-
;; transform in : '(<- x y z t u (+ (* 3 4) 1))
170-
expr) ;) ; end begin
171-
expr)); ) ; end begin
154+
155+
(!*prec-generic-infix-parser (syntax->list #'(e1 op1 e2 op ...))
156+
(lambda (op a b) (list op a b)))
157+
158+
159+
;; ) ; end begin
172160
))
173161

174162
;;(display "$nfx$ : parsed-args=") (display #'parsed-args) (newline)

0 commit comments

Comments
 (0)