2 (defpackage :lalr-parser-generator-tests
3 (:use
:cl
:rt
:lalr-parser-generator
))
5 (in-package :lalr-parser-generator-tests
)
10 #|
(defparameter *lr0-test-grammar
*
11 '(sentence ((open list close
)
14 (list comma sentence
)))) |
#
16 ;; Basic parsing test.
17 (deftest lr0-grammar
.1
18 (let ((input "open variable comma open open variable close comma variable close close"))
19 (lalr-parser-generator::test-parser
'(sentence ((open list close
)
22 (list comma sentence
)))
27 (LIST (SENTENCE (VARIABLE)))
32 (LIST (SENTENCE (VARIABLE)))
35 (SENTENCE (VARIABLE)))
39 ;; Test for failure: parse errors.
40 (deftest lr0-grammar
.2
43 (lalr-parser-generator::test-parser
'(sentence ((open list close
)
46 (list comma sentence
)))
51 (deftest lr0-grammar
.3
52 (let ((input "open variable comma open open variable close comma variable close close open"))
54 (lalr-parser-generator::test-parser
'(sentence ((open list close
)
57 (list comma sentence
)))
63 #|
(defparameter *slr-test-grammar
*
67 (deftest slr-grammar
.1
68 (let ((input "x + x + x"))
69 (lalr-parser-generator::test-parser
'(E ((T + E
) (T))
72 (E (T (x)) (+) (E (T (x)) (+) (E (T (x))))))
74 #|
(defparameter *simple-nullable-test-grammar
*
82 ;; XXX has shift/reduce conflicts
83 (deftest nullable-grammar
.1
85 (handler-bind ((warning #'muffle-warning
))
86 (lalr-parser-generator::test-parser
'(Z ((d) (X Y Z
))
90 (Z (X (A)) (Y) (Z (D))))
93 (defparameter *simple-lalr-test-grammar
*
96 T
((n) (OPEN E CLOSE
))))
99 (deftest lalr-grammar
.1
100 (let ((input "open n - open n close - n close - open n close"))
101 (lalr-parser-generator::test-parser
'(S ((E))
103 T
((n) (OPEN E CLOSE
)))
107 (E (E (E (T (N))) (-) (T (OPEN) (E (T (N))) (CLOSE))) (-) (T (N)))
110 (T (OPEN) (E (T (N))) (CLOSE)))))
113 (defparameter *nicer-looking-test-grammar
*
123 ;;;; MISC. FAILURE CONDITIONS
125 ;; Test for failure: bad terminal.
126 (deftest test-for-failure
.1
127 (let ((input "not-a-terminal"))
129 (lalr-parser-generator::test-parser
'(sentence ((variable))) input
)
130 (simple-error () t
)))
133 ;; Expected shift-reduce conflict.
135 ;; Expected reduce-reduce conflict.
139 ;; test make-parser by evaluating its output etc
143 ;; Stress test with random sentence generation.