1 ;;; test-lr-associativity-01.scm --
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:
8 ;; (E M E M E) : (list $1 $2 (list $3 $4 $5))
10 ;;looks like it is right-associated, and it is because we have declared
14 (load "common-test.scm")
16 (define (doit . tokens)
17 (let ((parser (lalr-parser
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)))
29 ;;; --------------------------------------------------------------------
33 (doit (make-lexical-token 'N #f 1))
37 (doit (make-lexical-token 'N #f 1)
38 (make-lexical-token 'A #f '+)
39 (make-lexical-token 'N #f 2))
43 (doit (make-lexical-token 'N #f 1)
44 (make-lexical-token 'M #f '*)
45 (make-lexical-token 'N #f 2))
49 (doit (make-lexical-token 'A #f '-)
50 (make-lexical-token 'N #f 1))
53 ;;; --------------------------------------------------------------------
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))
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))
72 ;;; --------------------------------------------------------------------
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))
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))