1 ! Copyright (C) 2024 Aleksander Sabak.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: help.markup help.markup help.syntax kernel math quotations sequences
9 { "from" integer } { "to" integer } { "seq" sequence }
10 { "slice/f" { $maybe slice } }
13 HELP: <sequence-parser>
15 { "sequence" sequence }
16 { "sequence-parser" sequence-parser }
19 "Creates a new sequence-parser parsing " { $snippet "sequence" } "."
21 { $see-also advance current offset }
24 { advance current consume next offset } related-words
28 { "sequence-parser" sequence-parser }
30 { $description "Advances the parser by one element." } ;
34 { "sequence-parser" sequence-parser }
35 { "obj/f" { $maybe object } }
37 { $description "Returns the current element and advances the parser." } ;
41 { "sequence-parser" sequence-parser }
42 { "obj/f" { $maybe object } }
44 { $description "Returns the current element." } ;
48 { "sequence-parser" sequence-parser }
49 { "obj/f" { $maybe object } }
51 { $description "Advances the parser and returns the new current element." } ;
55 { "sequence-parser" sequence-parser } { "offset" object }
56 { "obj/f" { $maybe object } }
58 { $description "Return the element of the parsed sequence offset from the current position of the parser. Negative offsets will yield already parsed elements." } ;
60 { parse-sequence with-sequence-parser } related-words
64 { "sequence" sequence } { "quot" { $quotation ( ..a parser -- ..b ) } }
66 { $description "Runs the quotation on a sequence-parser parsing the " { $snippet "sequence" } "." } ;
70 { "sequence-parser" sequence-parser }
71 { "obj/f" { $maybe object } }
73 { $description "Return the element of the sequence after the current position of the parser." } ;
77 { "sequence-parser" sequence-parser }
78 { "obj/f" { $maybe object } }
80 { $description "Return the element of the sequence before the current position of the parser." } ;
82 HELP: sequence-parse-end?
84 { "sequence-parser" sequence-parser }
87 { $description "Retruns " { $link POSTPONE: t } " if the parser has exhausted the sequence, otherwise " { $link POSTPONE: f } "." } ;
90 { $class-description "A class for keeping the state of a parser on a sequence." }
91 { $see-also <sequence-parser> }
96 { "sequence-parser" sequence-parser } { "quot" quotation }
101 { "sequence-parser" sequence-parser }
104 HELP: skip-whitespace-eol
106 { "sequence-parser" sequence-parser }
115 HELP: take-first-matching
117 { "sequence-parser" sequence-parser } { "seq" sequence }
122 { "sequence-parser" sequence-parser }
123 { "n/f" { $maybe integer } }
128 { "sequence-parser" sequence-parser } { "seq" sequence }
133 { "sequence-parser" sequence-parser } { "n" integer }
134 { "seq/f" { $maybe sequence } }
139 { "sequence-parser" sequence-parser }
140 { "sequence" sequence }
143 HELP: take-rest-slice
145 { "sequence-parser" sequence-parser }
146 { "sequence/f" { $maybe sequence } }
151 { "sequence-parser" sequence-parser } { "sequence" sequence }
152 { "obj/f" { $maybe object } }
157 { "sequence-parser" sequence-parser } { "sequence" sequence }
162 { "sequence-parser" sequence-parser } { "quot" quotation }
163 { "sequence/f" { $maybe sequence } }
166 HELP: take-until-object
168 { "sequence-parser" sequence-parser } { "obj" object }
169 { "sequence" sequence }
172 HELP: take-until-sequence
174 { "sequence-parser" sequence-parser } { "sequence" sequence }
175 { "sequence'/f" { $maybe sequence } }
178 HELP: take-until-sequence*
180 { "sequence-parser" sequence-parser } { "sequence" sequence }
181 { "sequence'/f" { $maybe sequence } }
186 { "sequence-parser" sequence-parser } { "quot" quotation }
187 { "sequence/f" { $maybe sequence } }
190 HELP: with-sequence-parser
192 { "sequence-parser" sequence-parser } { "quot" { $quotation ( ..a parser -- ..b obj/f ) } }
193 { "obj/f" { $maybe object } }
195 { $description "Saves the position of the parser and calls the quotation on it. If the quotation returns " { $link POSTPONE: f } " the parser is rewound to the saved position." } ;
199 { "sequence-parser" sequence-parser }
204 { "sequence-parser" sequence-parser }
207 ARTICLE: "sequences.parser" "Sequence parser"
208 { $vocab-link "sequences.parser" }
211 ABOUT: "sequences.parser"