8f6b602cd8836796eebcce65f1544dfc120a4000
[cl-opossum.git] / pegparser-boot.lisp
blob8f6b602cd8836796eebcce65f1544dfc120a4000
1 ;; -*- mode:lisp -*-
2 (in-package :opossum-system)
3 (eval-when (:compile-toplevel :load-toplevel :execute)
4 (declaim (optimize (speed 0) (safety 3) (debug 3))))
5 (defun parse-file (f dst-package)
6 (let ((opossum:*context* (make-instance 'opossum:context :start-index 0
7 :dst-package dst-package
8 :input (opossum::read-file f))))
9 (funcall (|parse_program|) 0)))
11 (DEFUN |parse_program| ()
12 (opossum::BUILD-PARSER-FUNCTION "program"
13 (opossum::SEQ (opossum::MANY (|parse_ws|))
14 (opossum::MANY1
15 (|parse_rule|))
16 (LIST ':ACTION NIL
17 '|metapeg_action320|))))
19 (DEFUN |parse_rule| ()
20 (opossum::BUILD-PARSER-FUNCTION "rule"
21 (opossum::SEQ (|parse_id|)
22 (opossum::MANY (|parse_ws|))
23 (opossum::MATCH-STRING "<-")
24 (opossum::MANY (|parse_ws|))
25 (|parse_ordered-expr-list|)
26 (opossum::MANY
27 (|parse_ws_or_nl|))
28 (LIST ':ACTION NIL
29 '|metapeg_action321|))))
30 (DEFUN |parse_ordered-expr-list| ()
31 (opossum::BUILD-PARSER-FUNCTION "ordered-expr-list"
32 (opossum::EITHER
33 (opossum::SEQ (|parse_expr-list|)
34 (opossum::MANY (|parse_ws|))
35 (opossum::MATCH-STRING "/")
36 (opossum::MANY (|parse_ws|))
37 (|parse_ordered-expr-list|)
38 (LIST ':ACTION NIL
39 '|metapeg_action322|))
40 (opossum::SEQ (|parse_expr-list|)
41 (LIST ':ACTION NIL
42 '|metapeg_action323|)))))
43 (DEFUN |parse_expr-list| ()
44 (opossum::BUILD-PARSER-FUNCTION "expr-list"
45 (opossum::SEQ (|parse_expr|)
46 (opossum::MANY
47 (opossum::SEQ
48 (opossum::MANY1
49 (|parse_ws|))
50 (|parse_expr-list|)))
51 (LIST ':ACTION NIL
52 '|metapeg_action324|))))
53 (DEFUN |parse_expr| ()
54 (opossum::BUILD-PARSER-FUNCTION "expr"
55 (opossum::EITHER
56 (opossum::SEQ (|parse_simple-expr|)
57 (opossum::MATCH-STRING "*")
58 (LIST ':ACTION NIL
59 '|metapeg_action325|))
60 (opossum::SEQ (|parse_simple-expr|)
61 (opossum::MATCH-STRING "+")
62 (LIST ':ACTION NIL
63 '|metapeg_action326|))
64 (opossum::SEQ (|parse_simple-expr|)
65 (opossum::MATCH-STRING "?")
66 (LIST ':ACTION NIL
67 '|metapeg_action327|))
68 (opossum::SEQ (|parse_simple-expr|)
69 (LIST ':ACTION NIL
70 '|metapeg_action328|)))))
71 (DEFUN |parse_simple-expr| ()
72 (opossum::BUILD-PARSER-FUNCTION "simple-expr"
73 (opossum::EITHER
74 (opossum::SEQ (|parse_string|)
75 (LIST ':ACTION NIL
76 '|metapeg_action329|))
77 (|parse_action|)
78 (opossum::SEQ (opossum::MATCH-STRING "&")
79 (|parse_simple-expr|)
80 (LIST ':ACTION NIL
81 '|metapeg_action330|))
82 (opossum::SEQ (opossum::MATCH-STRING "@")
83 (|parse_id|)
84 (LIST ':action NIL
85 '|metapeg_action331|))
86 (opossum::SEQ (|parse_id|)
87 (LIST ':action NIL
88 '|metapeg_action332|))
89 (opossum::SEQ (|parse_bracketed-rule|)
90 (LIST ':action NIL
91 '|metapeg_action333|))
92 (opossum::MATCH-STRING "!.")
93 (opossum::SEQ (opossum::MATCH-STRING "!")
94 (|parse_expr|)
95 (LIST ':action NIL
96 '|metapeg_action334|))
97 (opossum::SEQ (|parse_character-class|)
98 (LIST ':action NIL
99 '|metapeg_action335|))
100 (opossum::SEQ (opossum::MATCH-STRING ".")
101 (LIST ':action NIL
102 '|metapeg_action336|)))))
103 (DEFUN |parse_bracketed-rule| ()
104 (opossum::BUILD-PARSER-FUNCTION "bracketed-rule"
105 (opossum::EITHER
106 (opossum::MATCH-STRING "()")
107 (opossum::SEQ (opossum::MATCH-STRING "(")
108 (opossum::MANY (|parse_ws|))
109 (|parse_ordered-expr-list|)
110 (opossum::MANY (|parse_ws|))
111 (opossum::MATCH-STRING ")")
112 (LIST ':action NIL
113 '|metapeg_action337|)))))
114 (DEFUN |parse_id| ()
115 (opossum::BUILD-PARSER-FUNCTION "id"
116 (opossum::SEQ
117 (opossum::MANY1
118 (opossum::MATCH-CHAR
119 '(#\A #\B #\C #\D #\E #\F #\G #\H #\I
120 #\J #\K #\L #\M #\N #\O #\P #\Q #\R
121 #\S #\T #\U #\V #\W #\X #\Y #\Z #\a
122 #\b #\c #\d #\e #\f #\g #\h #\i #\j
123 #\k #\l #\m #\n #\o #\p #\q #\r #\s
124 #\t #\u #\v #\w #\x #\y #\z #\- #\_)))
125 (LIST ':action NIL
126 '|metapeg_action338|))))
127 (DEFUN |parse_character-class| ()
128 (opossum::BUILD-PARSER-FUNCTION "character-class"
129 (opossum::SEQ (opossum::MATCH-STRING "[")
130 (opossum::MANY1
131 (opossum::SEQ
132 (|parse_not_right_bracket|)
133 (opossum::MATCH-ANY-CHAR)))
134 (opossum::MATCH-STRING "]")
135 (LIST ':action NIL
136 '|metapeg_action339|))))
137 (DEFUN |parse_string| ()
138 (opossum::BUILD-PARSER-FUNCTION "string"
139 (opossum::SEQ (opossum::MATCH-CHAR '(#\"))
140 (opossum::MANY
141 (opossum::SEQ
142 (opossum::NEGATE
143 (opossum::MATCH-CHAR
144 '(#\")))
145 (opossum::MATCH-ANY-CHAR)))
146 (opossum::MATCH-CHAR '(#\"))
147 (LIST ':action NIL
148 '|metapeg_action340|))))
149 (DEFUN |parse_action| ()
150 (opossum::BUILD-PARSER-FUNCTION "action"
151 (opossum::SEQ (opossum::MATCH-CHAR '(#\{))
152 (opossum::MANY
153 (opossum::SEQ
154 (opossum::NEGATE
155 (opossum::MATCH-CHAR
156 '(#\})))
157 (opossum::MATCH-ANY-CHAR)))
158 (opossum::MATCH-CHAR '(#\}))
159 (LIST ':action NIL
160 '|metapeg_action341|
161 opossum:*context*))))
162 (DEFUN |parse_not_right_bracket| ()
163 (opossum::BUILD-PARSER-FUNCTION "not_right_bracket"
164 (opossum::NEGATE
165 (opossum::MATCH-STRING "]"))))
166 (Defun |parse_comment| ()
167 (opossum::BUILD-PARSER-FUNCTION "comment" (opossum::seq
168 (opossum::match-char '(#\#))
169 (opossum::many
170 (opossum::seq
171 (opossum::negate
172 (opossum::match-char '(#\Newline)))
173 (opossum::match-any-char)))
174 (opossum::optional
175 (opossum::match-char '(#\Newline))))))
176 (DEFUN |parse_ws| ()
177 (opossum::BUILD-PARSER-FUNCTION "ws" (opossum::either
178 (opossum::MATCH-CHAR '(#\Space #\Tab))
179 (|parse_comment|))))
180 (DEFUN |parse_nl| ()
181 (opossum::BUILD-PARSER-FUNCTION "nl" (opossum::MATCH-CHAR '(#\Newline))))
182 (DEFUN |parse_ws_or_nl| ()
183 (opossum::BUILD-PARSER-FUNCTION "ws_or_nl"
184 (opossum::EITHER (|parse_ws|)
185 (|parse_nl|)
189 (defun |metapeg_action341| (data)
190 (let* ((action-sans-{ (second data))
191 (action-code (coerce
192 ;; FIXME: fix escapes
193 (opossum::fix-escape-sequences
194 (mapcar #'second action-sans-{))
195 'string))
196 (ctx (fourth (fourth data)))
197 (action-name (opossum::make-action-name :ctx ctx)))
198 (opossum::store-action opossum:*context*
199 `(,action-name ,action-code))
200 `(list ':action nil ',action-name)))
202 (defun |metapeg_action340| (data) `(opossum::match-string ,(opossum::char-list-to-string (mapcar #'second (second data)))) )
204 (defun |metapeg_action339| (data)
205 ;; FIXME: this is character-class matching and needs to use cl-ppcre
206 `(opossum::match-char-class ,(coerce (mapcar #'second (second data)) 'string)))
208 (defun |metapeg_action338| (data) (opossum::char-list-to-string (first data)) )
209 (defun |metapeg_action337| (data) (third data) )
210 (defun |metapeg_action336| (data) (declare (ignore data)) `(opossum::match-any-char) )
211 (defun |metapeg_action335| (data) (first data) )
212 (defun |metapeg_action334| (data) `(opossum::negate ,(second data)) )
213 (defun |metapeg_action333| (data) (first data) )
214 (defun |metapeg_action332| (data)
215 `(,(opossum::make-name (first data)))
217 (defun |metapeg_action331| (data) `(opossum::match ,(second data)) )
218 (defun |metapeg_action330| (data) `(opossum::follow ,(second data)) )
219 (defun |metapeg_action329| (data) (first data) )
220 (defun |metapeg_action328| (data) (first data) )
221 (defun |metapeg_action327| (data) `(opossum::optional ,(first data)) )
222 (defun |metapeg_action326| (data) `(opossum::many1 ,(first data)) )
223 (defun |metapeg_action325| (data) `(opossum::many ,(first data)) )
224 (defun |metapeg_action324| (data) (if (or (equal (second data) "") (null (second data)))
225 (first data)
226 (let ((tail (second (first (second data)))))
227 (if (equal (first tail) 'seq)
228 `(opossum::seq ,(first data) ,@(rest tail))
229 `(opossum::seq ,(first data) ,tail)))) )
230 (defun |metapeg_action323| (data) (first data) )
231 (defun |metapeg_action322| (data)
232 (let ((tail (fifth data)))
233 (if (equal (first tail) 'either)
234 `(opossum::either ,(first data) ,@(rest tail))
235 `(opossum::either ,(first data) ,(fifth data))))
237 (defun |metapeg_action321| (data) `(defun ,(opossum::make-name (first data)) ()
238 (opossum::build-parser-function ,(first data) ,(fifth data))) )
239 (defun |metapeg_action320| (data)
240 `( ,@(second data))