Commit | Line | Data |
---|---|---|
1b101522 LC |
1 | ;;; test-lr-single-expressions.scm -- |
2 | ;; | |
3 | ;;Grammar accepting single expressions. | |
4 | ;; | |
5 | ||
6 | (load "common-test.scm") | |
7 | ||
8 | (define (doit . tokens) | |
9 | (let ((parser (lalr-parser (expect: 0) | |
10 | (driver: glr) | |
11 | (N O C (left: A) (left: M) (nonassoc: U)) | |
12 | ||
13 | (E (N) : $1 | |
14 | (E A E) : ($2 $1 $3) | |
15 | (E M E) : ($2 $1 $3) | |
16 | (A E (prec: U)) : ($1 $2) | |
17 | (O E C) : $2)))) | |
18 | (parser (make-lexer tokens) error-handler))) | |
19 | ||
20 | ;;; -------------------------------------------------------------------- | |
21 | ||
22 | (check ;correct input | |
23 | (doit (make-lexical-token 'N #f 1)) | |
24 | => '(1)) | |
25 | ||
26 | (check ;correct input | |
27 | (doit (make-lexical-token 'A #f -) | |
28 | (make-lexical-token 'N #f 1)) | |
29 | => '(-1)) | |
30 | ||
31 | (check ;correct input | |
32 | (doit (make-lexical-token 'A #f +) | |
33 | (make-lexical-token 'N #f 1)) | |
34 | => '(1)) | |
35 | ||
36 | (check ;correct input | |
37 | (doit (make-lexical-token 'N #f 1) | |
38 | (make-lexical-token 'A #f +) | |
39 | (make-lexical-token 'N #f 2)) | |
40 | => '(3)) | |
41 | ||
42 | (check ;correct input | |
43 | (doit (make-lexical-token 'N #f 1) | |
44 | (make-lexical-token 'A #f +) | |
45 | (make-lexical-token 'N #f 2) | |
46 | (make-lexical-token 'M #f *) | |
47 | (make-lexical-token 'N #f 3)) | |
48 | => '(9 7)) | |
49 | ||
50 | (check ;correct input | |
51 | (doit (make-lexical-token 'O #f #\() | |
52 | (make-lexical-token 'N #f 1) | |
53 | (make-lexical-token 'A #f +) | |
54 | (make-lexical-token 'N #f 2) | |
55 | (make-lexical-token 'C #f #\)) | |
56 | (make-lexical-token 'M #f *) | |
57 | (make-lexical-token 'N #f 3)) | |
58 | => '(9)) | |
59 | ||
60 | ;;; end of file |