summaryrefslogtreecommitdiff
path: root/test-suite/lalr/test-lr-basics-02.scm
blob: 4a5abc1af20394e36703a8819d8014cf4cfeff55 (about) (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
;;; test-lr-basics-02.scm --
;;
;;A grammar that only accept a single terminal or the EOI.
;;

(load "common-test.scm")

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

(check
    (doit)
  => 0)

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

(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, the end-of-input token is correctly parsed.
    (let ((r (doit (make-lexical-token 'A #f 1)
		   (make-lexical-token 'A #f 2)
		   (make-lexical-token 'A #f 3))))
      (cons r *error*))
  => '(0 (error-handler "Syntax error: unexpected token : " . A)))

;;; end of file