summaryrefslogtreecommitdiff
path: root/test-suite/lalr/test-glr-basics-01.scm
blob: 8cac63c713ec960375f17b4f287752a236b62ded (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
;;; test-lr-basics-01.scm --
;;
;;A grammar that only accept a single terminal as input.  It refuses the
;;end-of-input as first token.
;;

(load "common-test.scm")

(define (doit . tokens)
  (let* ((lexer		(make-lexer tokens))
	 (parser	(lalr-parser (expect: 0)
				     (driver: glr)
				     (A)
				     (e (A) : $1))))
    (parser lexer error-handler)))

(check
    (doit (make-lexical-token 'A #f 1))
  => '(1))

(check
    (doit)
  => '())

(check
    ;;Parse correctly the first A  and reduce it.  The second A triggers
    ;;an  error which  empties  the  stack and  consumes  all the  input
    ;;tokens.   Finally, an  unexpected end-of-input  error  is returned
    ;;because EOI is invalid as first token after the start.
    (doit (make-lexical-token 'A #f 1)
	  (make-lexical-token 'A #f 2)
	  (make-lexical-token 'A #f 3))
  => '())

;;; end of file