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|
))
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|
)
29 '|metapeg_action321|
))))
30 (DEFUN |parse_ordered-expr-list|
()
31 (opossum::BUILD-PARSER-FUNCTION
"ordered-expr-list"
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|
)
39 '|metapeg_action322|
))
40 (opossum::SEQ
(|parse_expr-list|
)
42 '|metapeg_action323|
)))))
43 (DEFUN |parse_expr-list|
()
44 (opossum::BUILD-PARSER-FUNCTION
"expr-list"
45 (opossum::SEQ
(|parse_expr|
)
52 '|metapeg_action324|
))))
53 (DEFUN |parse_expr|
()
54 (opossum::BUILD-PARSER-FUNCTION
"expr"
56 (opossum::SEQ
(|parse_simple-expr|
)
57 (opossum::MATCH-STRING
"*")
59 '|metapeg_action325|
))
60 (opossum::SEQ
(|parse_simple-expr|
)
61 (opossum::MATCH-STRING
"+")
63 '|metapeg_action326|
))
64 (opossum::SEQ
(|parse_simple-expr|
)
65 (opossum::MATCH-STRING
"?")
67 '|metapeg_action327|
))
68 (opossum::SEQ
(|parse_simple-expr|
)
70 '|metapeg_action328|
)))))
71 (DEFUN |parse_simple-expr|
()
72 (opossum::BUILD-PARSER-FUNCTION
"simple-expr"
74 (opossum::SEQ
(|parse_string|
)
76 '|metapeg_action329|
))
78 (opossum::SEQ
(opossum::MATCH-STRING
"&")
81 '|metapeg_action330|
))
82 (opossum::SEQ
(opossum::MATCH-STRING
"@")
85 '|metapeg_action331|
))
86 (opossum::SEQ
(|parse_id|
)
88 '|metapeg_action332|
))
89 (opossum::SEQ
(|parse_bracketed-rule|
)
91 '|metapeg_action333|
))
92 (opossum::MATCH-STRING
"!.")
93 (opossum::SEQ
(opossum::MATCH-STRING
"!")
96 '|metapeg_action334|
))
97 (opossum::SEQ
(|parse_character-class|
)
99 '|metapeg_action335|
))
100 (opossum::SEQ
(opossum::MATCH-STRING
".")
102 '|metapeg_action336|
)))))
103 (DEFUN |parse_bracketed-rule|
()
104 (opossum::BUILD-PARSER-FUNCTION
"bracketed-rule"
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
")")
113 '|metapeg_action337|
)))))
115 (opossum::BUILD-PARSER-FUNCTION
"id"
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
#\-
#\_
)))
126 '|metapeg_action338|
))))
127 (DEFUN |parse_character-class|
()
128 (opossum::BUILD-PARSER-FUNCTION
"character-class"
129 (opossum::SEQ
(opossum::MATCH-STRING
"[")
132 (|parse_not_right_bracket|
)
133 (opossum::MATCH-ANY-CHAR
)))
134 (opossum::MATCH-STRING
"]")
136 '|metapeg_action339|
))))
137 (DEFUN |parse_string|
()
138 (opossum::BUILD-PARSER-FUNCTION
"string"
139 (opossum::SEQ
(opossum::MATCH-CHAR
'(#\"))
145 (opossum::MATCH-ANY-CHAR
)))
146 (opossum::MATCH-CHAR
'(#\"))
148 '|metapeg_action340|
))))
149 (DEFUN |parse_action|
()
150 (opossum::BUILD-PARSER-FUNCTION
"action"
151 (opossum::SEQ
(opossum::MATCH-CHAR
'(#\
{))
157 (opossum::MATCH-ANY-CHAR
)))
158 (opossum::MATCH-CHAR
'(#\
}))
161 opossum
:*context
*))))
162 (DEFUN |parse_not_right_bracket|
()
163 (opossum::BUILD-PARSER-FUNCTION
"not_right_bracket"
165 (opossum::MATCH-STRING
"]"))))
166 (Defun |parse_comment|
()
167 (opossum::BUILD-PARSER-FUNCTION
"comment" (opossum::seq
168 (opossum::match-char
'(#\
#))
172 (opossum::match-char
'(#\Newline
)))
173 (opossum::match-any-char
)))
175 (opossum::match-char
'(#\Newline
))))))
177 (opossum::BUILD-PARSER-FUNCTION
"ws" (opossum::either
178 (opossum::MATCH-CHAR
'(#\Space
#\Tab
))
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|
)
189 (defun |metapeg_action341|
(data)
190 (let* ((action-sans-{ (second data
))
192 ;; FIXME: fix escapes
193 (opossum::fix-escape-sequences
194 (mapcar #'second action-sans-
{))
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
)))
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)