1 ":";exec snow -- "$0" "$@"
3 ;;;; Tests for the GLR parser generator
6 ;; @created "Fri Aug 19 11:23:48 EDT 2005"
9 (package* glr-test/v1.0.0
10 (require: lalr/v2.4.0))
13 (define (syntax-error msg . args)
14 (display msg (current-error-port))
15 (for-each (cut format (current-error-port) " ~A" <>) args)
16 (newline (current-error-port))
20 (define (make-lexer words)
25 (let ((word (car phrase)))
26 (set! phrase (cdr phrase))
36 ;; Grammar taken from Tomita's "An Efficient Augmented-Context-Free Parsing Algorithm"
50 (define *phrase-1* '(*n *v *d *n *p *d *n *p *d *n *p *d *n))
53 (parser-1 (make-lexer *phrase-1*) syntax-error))
62 ;; The dangling-else problem
66 ((nonassoc: if then else e s))
69 (if e then <s> else <s>))))
72 (define *phrase-2* '(if e then if e then s else s))
75 (parser-2 (make-lexer *phrase-2*) syntax-error))
80 (define (assert-length l n test-name)
83 (display (if (not (= (length l) n)) "' failed!" "' passed!"))
86 (assert-length (test-1) 14 1)
87 (assert-length (test-2) 2 2)