diff options
Diffstat (limited to 'test-suite/lalr/test-lr-error-recovery-02.scm')
-rw-r--r-- | test-suite/lalr/test-lr-error-recovery-02.scm | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/test-suite/lalr/test-lr-error-recovery-02.scm b/test-suite/lalr/test-lr-error-recovery-02.scm new file mode 100644 index 000000000..a82498b50 --- /dev/null +++ b/test-suite/lalr/test-lr-error-recovery-02.scm @@ -0,0 +1,51 @@ +;;; test-lr-error-recovery-02.scm -- +;; +;;Test error recovery policy when the synchronisation terminal has the +;;same category of the lookahead that raises the error. +;; + +(load "common-test.scm") + +(define (doit . tokens) + (let ((parser (lalr-parser (expect: 0) + (A B C) + (alphas (alpha) : $1 + (alphas alpha) : $2) + (alpha (A B) : (list $1 $2) + (C) : $1 + (error C) : 'error-form)))) + (parser (make-lexer tokens) error-handler))) + +;;; -------------------------------------------------------------------- +;;; No error, just grammar tests. + +(check + (doit (make-lexical-token 'A #f 1) + (make-lexical-token 'B #f 2)) + => '(1 2)) + +(check + (doit (make-lexical-token 'C #f 3)) + => '3) + +;;; -------------------------------------------------------------------- +;;; Successful error recovery. + +(check + ;;Error, recovery, end-of-input. + (let ((r (doit (make-lexical-token 'A #f 1) + (make-lexical-token 'C #f 3)))) + (cons r *error*)) + => '(error-form (error-handler "Syntax error: unexpected token : " . C))) + +(check + ;;Error, recovery, correct parse of "A B". + (let ((r (doit (make-lexical-token 'A #f 1) + (make-lexical-token 'C #f 3) + (make-lexical-token 'A #f 1) + (make-lexical-token 'B #f 2)))) + (cons r *error*)) + => '((1 2) + (error-handler "Syntax error: unexpected token : " . C))) + +;;; end of file |