summaryrefslogtreecommitdiff
path: root/test-suite/lalr/test-glr-basics-05.scm
diff options
context:
space:
mode:
Diffstat (limited to 'test-suite/lalr/test-glr-basics-05.scm')
-rw-r--r--test-suite/lalr/test-glr-basics-05.scm40
1 files changed, 40 insertions, 0 deletions
diff --git a/test-suite/lalr/test-glr-basics-05.scm b/test-suite/lalr/test-glr-basics-05.scm
new file mode 100644
index 000000000..ca48fd79f
--- /dev/null
+++ b/test-suite/lalr/test-glr-basics-05.scm
@@ -0,0 +1,40 @@
+;;; test-lr-basics-05.scm --
+;;
+;;A grammar accepting a sequence of equal tokens of arbitrary length.
+;;The return value is the list of values.
+;;
+
+(load "common-test.scm")
+
+(define (doit . tokens)
+ (let ((parser (lalr-parser (expect: 0)
+ (driver: glr)
+ (A)
+ (e (e A) : (cons $2 $1)
+ (A) : (list $1)
+ () : (list 0)))))
+ (parser (make-lexer tokens) error-handler)))
+
+(check
+ (doit)
+ => '((0)))
+
+(check
+ (doit (make-lexical-token 'A #f 1))
+ => '((1 0)
+ (1)))
+
+(check
+ (doit (make-lexical-token 'A #f 1)
+ (make-lexical-token 'A #f 2))
+ => '((2 1 0)
+ (2 1)))
+
+(check
+ (doit (make-lexical-token 'A #f 1)
+ (make-lexical-token 'A #f 2)
+ (make-lexical-token 'A #f 3))
+ => '((3 2 1 0)
+ (3 2 1)))
+
+;;; end of file