123456789101112131415161718192021222324252627282930313233343536373839 |
- ;;; 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)
- (A)
- (e (A) : $1))))
- (parser lexer error-handler)))
- (check
- (doit (make-lexical-token 'A #f 1))
- => 1)
- (check
- (let ((r (doit)))
- (cons r *error*))
- => '(#f (error-handler "Syntax error: unexpected end of input")))
- (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.
- (let ((r (doit (make-lexical-token 'A #f 1)
- (make-lexical-token 'A #f 2)
- (make-lexical-token 'A #f 3))))
- (cons r *error*))
- => '(#f
- (error-handler "Syntax error: unexpected end of input")
- (error-handler "Syntax error: unexpected token : " . A)))
- ;;; end of file
|