1 ;;; test-lr-script-expression.scm --
3 ;;Parse scripts, each line an expression.
6 (load "common-test.scm")
8 (define (doit . tokens)
9 (let ((parser (lalr-parser (expect: 0)
11 (N O C T (left: A) (left: M) (nonassoc: U))
13 (script (lines) : (reverse $1))
15 (lines (lines line) : (cons $2 $1)
20 (error T) : (list 'error-clause $2))
25 (A E (prec: U)) : ($1 $2)
27 (parser (make-lexer tokens) error-handler)))
29 ;;; --------------------------------------------------------------------
33 (doit (make-lexical-token 'T #f #\newline))
37 (doit (make-lexical-token 'N #f 1)
38 (make-lexical-token 'T #f #\newline))
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 'T #f #\newline))
49 (doit (make-lexical-token 'N #f 1)
50 (make-lexical-token 'A #f +)
51 (make-lexical-token 'N #f 2)
52 (make-lexical-token 'M #f *)
53 (make-lexical-token 'N #f 3)
54 (make-lexical-token 'T #f #\newline))
58 (doit (make-lexical-token 'N #f 10)
59 (make-lexical-token 'M #f *)
60 (make-lexical-token 'N #f 2)
61 (make-lexical-token 'A #f +)
62 (make-lexical-token 'N #f 3)
63 (make-lexical-token 'T #f #\newline))
67 (doit (make-lexical-token 'O #f #\()
68 (make-lexical-token 'N #f 1)
69 (make-lexical-token 'A #f +)
70 (make-lexical-token 'N #f 2)
71 (make-lexical-token 'C #f #\))
72 (make-lexical-token 'M #f *)
73 (make-lexical-token 'N #f 3)
74 (make-lexical-token 'T #f #\newline))
78 (doit (make-lexical-token 'O #f #\()
79 (make-lexical-token 'N #f 1)
80 (make-lexical-token 'A #f +)
81 (make-lexical-token 'N #f 2)
82 (make-lexical-token 'C #f #\))
83 (make-lexical-token 'M #f *)
84 (make-lexical-token 'N #f 3)
85 (make-lexical-token 'T #f #\newline)
87 (make-lexical-token 'N #f 4)
88 (make-lexical-token 'M #f /)
89 (make-lexical-token 'N #f 5)
90 (make-lexical-token 'T #f #\newline))
93 ;;; --------------------------------------------------------------------
96 ;;Successful error recovery.
97 (doit (make-lexical-token 'O #f #\()
98 (make-lexical-token 'N #f 1)
99 (make-lexical-token 'A #f +)
100 (make-lexical-token 'N #f 2)
101 (make-lexical-token 'M #f *)
102 (make-lexical-token 'N #f 3)
103 (make-lexical-token 'T #f #\newline)
105 (make-lexical-token 'N #f 4)
106 (make-lexical-token 'M #f /)
107 (make-lexical-token 'N #f 5)
108 (make-lexical-token 'T #f #\newline))
112 ;;Unexpected end of input.
113 (doit (make-lexical-token 'N #f 1)
114 (make-lexical-token 'A #f +)
115 (make-lexical-token 'N #f 2))
119 ;;Unexpected end of input.
120 (doit (make-lexical-token 'N #f 1)
121 (make-lexical-token 'A #f +)
122 (make-lexical-token 'T #f #\newline))