(define shift?
(lambda (expr-stack next-token)
(let ((stack-top (top-minus expr-stack 0)))
(cond ((or (operator? stack-top)
(member stack-top '($ lparen)))
(or (number? next-token)
(equal? next-token 'lparen)))
((number? stack-top)
(let ((stack-second (top-minus expr-stack 1)))
(cond ((operator? next-token)
(or (not (operator? stack-second))
(lower-precedence? stack-second
next-token)))
((equal? next-token 'rparen)
(equal? stack-second 'lparen))
(else #F))))
(else #F)))))
|
|