3 (eval-when (:compile-toplevel
:load-toplevel
:execute
)
4 (declaim (optimize (speed 0) (safety 3) (debug 3))))
6 (let ((opossum:*context
* (make-instance 'opossum
:context
:start-index
0
8 :input
(opossum:read-file f
))))
9 (funcall (opossum::|parse_program|
) 0)))
11 (DEFUN |parse_program|
()
12 (LAMBDA (opossum::OFFSET
)
13 (opossum::BUILD-PARSER-FUNCTION
"program"
14 (opossum::SEQ
(opossum::MANY
(|parse_ws|
))
18 '|metapeg_action320|
)))))
19 (DEFUN |parse_rule|
()
20 (LAMBDA (opossum::OFFSET
)
21 (opossum::BUILD-PARSER-FUNCTION
"rule"
22 (opossum::SEQ
(|parse_id|
)
23 (opossum::MANY
(|parse_ws|
))
24 (opossum::MATCH-STRING
"<-")
25 (opossum::MANY
(|parse_ws|
))
26 (|parse_ordered-expr-list|
)
30 '|metapeg_action321|
)))))
31 (DEFUN |parse_ordered-expr-list|
()
32 (LAMBDA (opossum::OFFSET
)
33 (opossum::BUILD-PARSER-FUNCTION
"ordered-expr-list"
35 (opossum::SEQ
(|parse_expr-list|
)
36 (opossum::MANY
(|parse_ws|
))
37 (opossum::MATCH-STRING
"/")
38 (opossum::MANY
(|parse_ws|
))
39 (|parse_ordered-expr-list|
)
41 '|metapeg_action322|
))
42 (opossum::SEQ
(|parse_expr-list|
)
44 '|metapeg_action323|
))))))
45 (DEFUN |parse_expr-list|
()
46 (LAMBDA (opossum::OFFSET
)
47 (opossum::BUILD-PARSER-FUNCTION
"expr-list"
48 (opossum::SEQ
(|parse_expr|
)
55 '|metapeg_action324|
)))))
56 (DEFUN |parse_expr|
()
57 (LAMBDA (opossum::OFFSET
)
58 (opossum::BUILD-PARSER-FUNCTION
"expr"
60 (opossum::SEQ
(|parse_simple-expr|
)
61 (opossum::MATCH-STRING
"*")
63 '|metapeg_action325|
))
64 (opossum::SEQ
(|parse_simple-expr|
)
65 (opossum::MATCH-STRING
"+")
67 '|metapeg_action326|
))
68 (opossum::SEQ
(|parse_simple-expr|
)
69 (opossum::MATCH-STRING
"?")
71 '|metapeg_action327|
))
72 (opossum::SEQ
(|parse_simple-expr|
)
74 '|metapeg_action328|
))))))
75 (DEFUN |parse_simple-expr|
()
76 (LAMBDA (opossum::OFFSET
)
77 (opossum::BUILD-PARSER-FUNCTION
"simple-expr"
79 (opossum::SEQ
(|parse_string|
)
81 '|metapeg_action329|
))
83 (opossum::SEQ
(opossum::MATCH-STRING
"&")
86 '|metapeg_action330|
))
87 (opossum::SEQ
(opossum::MATCH-STRING
"@")
90 '|metapeg_action331|
))
91 (opossum::SEQ
(|parse_id|
)
93 '|metapeg_action332|
))
94 (opossum::SEQ
(|parse_bracketed-rule|
)
96 '|metapeg_action333|
))
97 (opossum::MATCH-STRING
"!.")
98 (opossum::SEQ
(opossum::MATCH-STRING
"!")
101 '|metapeg_action334|
))
102 (opossum::SEQ
(|parse_character-class|
)
104 '|metapeg_action335|
))
105 (opossum::SEQ
(opossum::MATCH-STRING
".")
107 '|metapeg_action336|
))))))
108 (DEFUN |parse_bracketed-rule|
()
109 (LAMBDA (opossum::OFFSET
)
110 (opossum::BUILD-PARSER-FUNCTION
"bracketed-rule"
112 (opossum::MATCH-STRING
"()")
113 (opossum::SEQ
(opossum::MATCH-STRING
"(")
114 (opossum::MANY
(|parse_ws|
))
115 (|parse_ordered-expr-list|
)
116 (opossum::MANY
(|parse_ws|
))
117 (opossum::MATCH-STRING
")")
119 '|metapeg_action337|
))))))
121 (LAMBDA (opossum::OFFSET
)
122 (opossum::BUILD-PARSER-FUNCTION
"id"
126 '(#\A
#\B
#\C
#\D
#\E
#\F
#\G
#\H
#\I
127 #\J
#\K
#\L
#\M
#\N
#\O
#\P
#\Q
#\R
128 #\S
#\T
#\U
#\V
#\W
#\X
#\Y
#\Z
#\a
129 #\b #\c
#\d
#\e
#\f #\g
#\h
#\i
#\j
130 #\k
#\l
#\m
#\n #\o
#\p
#\q
#\r #\s
131 #\t #\u
#\v #\w
#\x
#\y
#\z
#\-
#\_
)))
133 '|metapeg_action338|
)))))
134 (DEFUN |parse_character-class|
()
135 (LAMBDA (opossum::OFFSET
)
136 (opossum::BUILD-PARSER-FUNCTION
"character-class"
137 (opossum::SEQ
(opossum::MATCH-STRING
"[")
140 (|parse_not_right_bracket|
)
141 (opossum::MATCH-ANY-CHAR
)))
142 (opossum::MATCH-STRING
"]")
144 '|metapeg_action339|
)))))
145 (DEFUN |parse_string|
()
146 (LAMBDA (opossum::OFFSET
)
147 (opossum::BUILD-PARSER-FUNCTION
"string"
148 (opossum::SEQ
(opossum::MATCH-CHAR
'(#\"))
154 (opossum::MATCH-ANY-CHAR
)))
155 (opossum::MATCH-CHAR
'(#\"))
157 '|metapeg_action340|
)))))
158 (DEFUN |parse_action|
()
159 (LAMBDA (opossum::OFFSET
)
160 (opossum::BUILD-PARSER-FUNCTION
"action"
161 (opossum::SEQ
(opossum::MATCH-CHAR
'(#\
{))
167 (opossum::MATCH-ANY-CHAR
)))
168 (opossum::MATCH-CHAR
'(#\
}))
172 (DEFUN |parse_not_right_bracket|
()
173 (LAMBDA (opossum::OFFSET
)
174 (opossum::BUILD-PARSER-FUNCTION
"not_right_bracket"
176 (opossum::MATCH-STRING
"]")))))
177 (Defun |parse_comment|
()
178 (lambda (opossum::offset
)
179 ;; ad-hoc comment handling addition to bootstrap ourselves
180 (opossum::BUILD-PARSER-FUNCTION
"comment" (opossum::seq
181 (opossum::match-char
'(#\
#))
185 (opossum::match-char
'(#\Newline
)))
186 (opossum::match-any-char
)))
188 (opossum::match-char
'(#\Newline
)))))))
190 (LAMBDA (opossum::OFFSET
)
191 (opossum::BUILD-PARSER-FUNCTION
"ws" (opossum::either
192 (opossum::MATCH-CHAR
'(#\Space
#\Tab
))
193 (|parse_comment|
)))))
195 (LAMBDA (opossum::OFFSET
)
196 (opossum::BUILD-PARSER-FUNCTION
"nl" (opossum::MATCH-CHAR
'(#\Newline
)))))
197 (DEFUN |parse_ws_or_nl|
()
198 (LAMBDA (opossum::OFFSET
)
199 (opossum::BUILD-PARSER-FUNCTION
"ws_or_nl"
200 (opossum::EITHER
(|parse_ws|
)
205 (defun |metapeg_action341|
(data)
206 (let* ((action-sans-{ (second data
))
208 ;; FIXME: fix escapes
209 (opossum::fix-escape-sequences
210 (mapcar #'second action-sans-
{))
212 (ctx (fourth (fourth data
)))
213 (action-name (make-action-name :ctx ctx
)))
214 (store-action opossum
:*context
*
215 `(,action-name
,action-code
))
216 `(list ':action nil
',action-name
)))
218 (defun |metapeg_action340|
(data) `(match-string ,(char-list-to-string (mapcar #'second
(second data
)))) )
220 (defun |metapeg_action339|
(data)
221 ;; FIXME: this is character-class matching and needs to use cl-ppcre
222 `(opossum::match-char-class
,(coerce (mapcar #'second
(second data
)) 'string
)))
224 (defun |metapeg_action338|
(data) (char-list-to-string (first data
)) )
225 (defun |metapeg_action337|
(data) (third data
) )
226 (defun |metapeg_action336|
(data) (declare (ignore data
)) `(match-any-char) )
227 (defun |metapeg_action335|
(data) (first data
) )
228 (defun |metapeg_action334|
(data) `(negate ,(second data
)) )
229 (defun |metapeg_action333|
(data) (first data
) )
230 (defun |metapeg_action332|
(data)
231 `(,(make-name (first data
)))
233 (defun |metapeg_action331|
(data) `(match ,(second data
)) )
234 (defun |metapeg_action330|
(data) `(follow ,(second data
)) )
235 (defun |metapeg_action329|
(data) (first data
) )
236 (defun |metapeg_action328|
(data) (first data
) )
237 (defun |metapeg_action327|
(data) `(optional ,(first data
)) )
238 (defun |metapeg_action326|
(data) `(many1 ,(first data
)) )
239 (defun |metapeg_action325|
(data) `(many ,(first data
)) )
240 (defun |metapeg_action324|
(data) (if (or (equal (second data
) "") (null (second data
)))
242 (let ((tail (second (first (second data
)))))
243 (if (equal (first tail
) 'seq
)
244 `(seq ,(first data
) ,@(rest tail
))
245 `(seq ,(first data
) ,tail
)))) )
246 (defun |metapeg_action323|
(data) (first data
) )
247 (defun |metapeg_action322|
(data)
248 (let ((tail (fifth data
)))
249 (if (equal (first tail
) 'either
)
250 `(either ,(first data
) ,@(rest tail
))
251 `(either ,(first data
) ,(fifth data
))))
253 (defun |metapeg_action321|
(data) `(defun ,(make-name (first data
)) ()
255 (build-parser-function ,(first data
) ,(fifth data
)))) )
256 (defun |metapeg_action320|
(data)