Untabify some test files.
[bpt/guile.git] / test-suite / lalr / test-lr-associativity-01.scm
CommitLineData
1b101522
LC
1;;; test-lr-associativity-01.scm --
2;;
3;;Show how to use left and right associativity. Notice that the
4;;terminal M is declared as right associative; this influences the
5;;binding of values to the $n symbols in the semantic clauses. The
6;;semantic clause in the rule:
7;;
8;; (E M E M E) : (list $1 $2 (list $3 $4 $5))
9;;
10;;looks like it is right-associated, and it is because we have declared
11;;M as "right:".
12;;
13
14(load "common-test.scm")
15
16(define (doit . tokens)
17 (let ((parser (lalr-parser
18 (expect: 0)
19 (N (left: A)
20 (right: M)
21 (nonassoc: U))
22 (E (N) : $1
23 (E A E) : (list $1 $2 $3)
24 (E M E) : (list $1 $2 $3)
25 (E M E M E) : (list $1 $2 (list $3 $4 $5))
26 (A E (prec: U)) : (list '- $2)))))
27 (parser (make-lexer tokens) error-handler)))
28
29;;; --------------------------------------------------------------------
30;;; Single operator.
31
32(check
33 (doit (make-lexical-token 'N #f 1))
34 => 1)
35
36(check
37 (doit (make-lexical-token 'N #f 1)
38 (make-lexical-token 'A #f '+)
39 (make-lexical-token 'N #f 2))
40 => '(1 + 2))
41
42(check
43 (doit (make-lexical-token 'N #f 1)
44 (make-lexical-token 'M #f '*)
45 (make-lexical-token 'N #f 2))
46 => '(1 * 2))
47
48(check
49 (doit (make-lexical-token 'A #f '-)
50 (make-lexical-token 'N #f 1))
51 => '(- 1))
52
53;;; --------------------------------------------------------------------
54;;; Precedence.
55
56(check
57 (doit (make-lexical-token 'N #f 1)
58 (make-lexical-token 'A #f '+)
59 (make-lexical-token 'N #f 2)
60 (make-lexical-token 'M #f '*)
61 (make-lexical-token 'N #f 3))
62 => '(1 + (2 * 3)))
63
64(check
65 (doit (make-lexical-token 'N #f 1)
66 (make-lexical-token 'M #f '*)
67 (make-lexical-token 'N #f 2)
68 (make-lexical-token 'A #f '+)
69 (make-lexical-token 'N #f 3))
70 => '((1 * 2) + 3))
71
72;;; --------------------------------------------------------------------
73;;; Associativity.
74
75(check
76 (doit (make-lexical-token 'N #f 1)
77 (make-lexical-token 'A #f '+)
78 (make-lexical-token 'N #f 2)
79 (make-lexical-token 'A #f '+)
80 (make-lexical-token 'N #f 3))
81 => '((1 + 2) + 3))
82
83(check
84 (doit (make-lexical-token 'N #f 1)
85 (make-lexical-token 'M #f '*)
86 (make-lexical-token 'N #f 2)
87 (make-lexical-token 'M #f '*)
88 (make-lexical-token 'N #f 3))
89 => '(1 * (2 * 3)))
90
91;;; end of file