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
|