[honu] always keep parsing a unary operator

This commit is contained in:
Jon Rafkind 2012-04-23 17:17:58 -06:00
parent 4799d08022
commit 40a3161570

View File

@ -418,24 +418,25 @@
#f)]) #f)])
(do-parse unparsed precedence left parsed)) (do-parse unparsed precedence left parsed))
;; if we have a unary transformer then we have to keep parsing
#; (if unary-transformer
(do-parse #'(rest ...) new-precedence (if current
(lambda (stuff) (values (left current) stream)
(if current (do-parse #'(rest ...) new-precedence
(if binary-transformer (lambda (stuff)
(left (binary-transformer current stuff)) (define right (parse-all stuff))
(error '#'head "cannot be used as a binary operator")) (define output (unary-transformer right))
(if unary-transformer ;; apply the left function because
(left (unary-transformer stuff)) ;; we just went ahead with parsing without
(error '#'head "cannot be used as a unary operator")))) ;; caring about precedence
#f) (with-syntax ([out (left (parse-all output))])
(values (left current) stream) #'out))
#; #f))
(do-parse #'(head rest ...) ;; otherwise we have a binary transformer (or no transformer..??)
0 ;; so we must have made a recursive call to parse, just return the
(lambda (x) x) ;; left hand
(left final)))] (values (left current) stream))
)]
#; #;
[(stopper? #'head) [(stopper? #'head)