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 | (N O C (left: A) (left: M) (nonassoc: U)) | |
11 | ||
12 | (E (N) : $1 | |
13 | (E A E) : ($2 $1 $3) | |
14 | (E M E) : ($2 $1 $3) | |
15 | (A E (prec: U)) : ($1 $2) | |
16 | (O E C) : $2)))) | |
17 | (parser (make-lexer tokens) error-handler))) | |
18 | ||
19 | ;;; -------------------------------------------------------------------- | |
20 | ||
21 | (check ;correct input | |
22 | (doit (make-lexical-token 'N #f 1)) | |
23 | => 1) | |
24 | ||
25 | (check ;correct input | |
26 | (doit (make-lexical-token 'A #f -) | |
27 | (make-lexical-token 'N #f 1)) | |
28 | => -1) | |
29 | ||
30 | (check ;correct input | |
31 | (doit (make-lexical-token 'A #f +) | |
32 | (make-lexical-token 'N #f 1)) | |
33 | => 1) | |
34 | ||
35 | (check ;correct input | |
36 | (doit (make-lexical-token 'N #f 1) | |
37 | (make-lexical-token 'A #f +) | |
38 | (make-lexical-token 'N #f 2)) | |
39 | => 3) | |
40 | ||
41 | (check ;correct input | |
42 | (doit (make-lexical-token 'N #f 1) | |
43 | (make-lexical-token 'A #f +) | |
44 | (make-lexical-token 'N #f 2) | |
45 | (make-lexical-token 'M #f *) | |
46 | (make-lexical-token 'N #f 3)) | |
47 | => 7) | |
48 | ||
49 | (check ;correct input | |
50 | (doit (make-lexical-token 'O #f #\() | |
51 | (make-lexical-token 'N #f 1) | |
52 | (make-lexical-token 'A #f +) | |
53 | (make-lexical-token 'N #f 2) | |
54 | (make-lexical-token 'C #f #\)) | |
55 | (make-lexical-token 'M #f *) | |
56 | (make-lexical-token 'N #f 3)) | |
57 | => 9) | |
58 | ||
59 | ;;; end of file |