Untabify some test files.
[bpt/guile.git] / test-suite / lalr / test-glr-associativity.scm
CommitLineData
1b101522
LC
1;;; test-glr-associativity.scm
2;;
3;;With the GLR parser both the terminal precedence and the non-terminal
4;;associativity are not respected; rather they generate two child
5;;processes.
6;;
7
8(load "common-test.scm")
9
10(define parser
11 (lalr-parser
12 (driver: glr)
13 (expect: 0)
14
15 (N LPAREN RPAREN
16 (left: + -)
17 (right: * /)
18 (nonassoc: uminus))
19
20 (output (expr) : $1)
21 (expr (expr + expr) : (list $1 '+ $3)
22 (expr - expr) : (list $1 '- $3)
23 (expr * expr) : (list $1 '* $3)
24 (expr / expr) : (list $1 '/ $3)
25 (- expr (prec: uminus)) : (list '- $2)
26 (N) : $1
27 (LPAREN expr RPAREN) : $2)))
28
29(define (doit . tokens)
30 (parser (make-lexer tokens) error-handler))
31
32;;; --------------------------------------------------------------------
33
34;;Remember that the result of the GLR driver is a list of parses, not a
35;;single parse.
36
37(check
38 (doit (make-lexical-token 'N #f 1))
39 => '(1))
40
41(check
42 (doit (make-lexical-token 'N #f 1)
43 (make-lexical-token '+ #f '+)
44 (make-lexical-token 'N #f 2))
45 => '((1 + 2)))
46
47(check
48 (doit (make-lexical-token 'N #f 1)
49 (make-lexical-token '* #f '*)
50 (make-lexical-token 'N #f 2))
51 => '((1 * 2)))
52
53(check
54 (doit (make-lexical-token '- #f '-)
55 (make-lexical-token 'N #f 1))
56 => '((- 1)))
57
58(check
59 (doit (make-lexical-token '- #f '-)
60 (make-lexical-token '- #f '-)
61 (make-lexical-token 'N #f 1))
62 => '((- (- 1))))
63
64(check
65 (doit (make-lexical-token 'N #f 1)
66 (make-lexical-token '+ #f '+)
67 (make-lexical-token '- #f '-)
68 (make-lexical-token 'N #f 2))
69 => '((1 + (- 2))))
70
71;;; --------------------------------------------------------------------
72
73(check
74 ;;left-associativity
75 (doit (make-lexical-token 'N #f 1)
76 (make-lexical-token '+ #f '+)
77 (make-lexical-token 'N #f 2)
78 (make-lexical-token '+ #f '+)
79 (make-lexical-token 'N #f 3))
80 => '(((1 + 2) + 3)))
81
82(check
83 ;;right-associativity
84 (doit (make-lexical-token 'N #f 1)
85 (make-lexical-token '* #f '*)
86 (make-lexical-token 'N #f 2)
87 (make-lexical-token '* #f '*)
88 (make-lexical-token 'N #f 3))
89 => '(((1 * 2) * 3)
90 (1 * (2 * 3))))
91
92(check
93 ;;precedence
94 (doit (make-lexical-token 'N #f 1)
95 (make-lexical-token '+ #f '+)
96 (make-lexical-token 'N #f 2)
97 (make-lexical-token '* #f '*)
98 (make-lexical-token 'N #f 3))
99 => '(((1 + 2) * 3)
100 (1 + (2 * 3))))
101
102;;; end of file