Commit | Line | Data |
---|---|---|
1b101522 LC |
1 | ;;; test-lr-error-recovery-02.scm -- |
2 | ;; | |
3 | ;;Test error recovery policy when the synchronisation terminal has the | |
4 | ;;same category of the lookahead that raises the error. | |
5 | ;; | |
6 | ||
7 | (load "common-test.scm") | |
8 | ||
9 | (define (doit . tokens) | |
10 | (let ((parser (lalr-parser (expect: 0) | |
11 | (A B C) | |
12 | (alphas (alpha) : $1 | |
13 | (alphas alpha) : $2) | |
14 | (alpha (A B) : (list $1 $2) | |
15 | (C) : $1 | |
16 | (error C) : 'error-form)))) | |
17 | (parser (make-lexer tokens) error-handler))) | |
18 | ||
19 | ;;; -------------------------------------------------------------------- | |
20 | ;;; No error, just grammar tests. | |
21 | ||
22 | (check | |
23 | (doit (make-lexical-token 'A #f 1) | |
24 | (make-lexical-token 'B #f 2)) | |
25 | => '(1 2)) | |
26 | ||
27 | (check | |
28 | (doit (make-lexical-token 'C #f 3)) | |
29 | => '3) | |
30 | ||
31 | ;;; -------------------------------------------------------------------- | |
32 | ;;; Successful error recovery. | |
33 | ||
34 | (check | |
35 | ;;Error, recovery, end-of-input. | |
36 | (let ((r (doit (make-lexical-token 'A #f 1) | |
37 | (make-lexical-token 'C #f 3)))) | |
38 | (cons r *error*)) | |
39 | => '(error-form (error-handler "Syntax error: unexpected token : " . C))) | |
40 | ||
41 | (check | |
42 | ;;Error, recovery, correct parse of "A B". | |
43 | (let ((r (doit (make-lexical-token 'A #f 1) | |
44 | (make-lexical-token 'C #f 3) | |
45 | (make-lexical-token 'A #f 1) | |
46 | (make-lexical-token 'B #f 2)))) | |
47 | (cons r *error*)) | |
48 | => '((1 2) | |
49 | (error-handler "Syntax error: unexpected token : " . C))) | |
50 | ||
51 | ;;; end of file |