USING: accessors assocs combinators combinators.short-circuit
effects kernel make math.parser multiline namespaces parser peg
-peg.private peg.parsers quotations sequences sequences.deep
-splitting stack-checker strings strings.parser summary unicode
-vocabs.parser words ;
-
-FROM: vocabs.parser => search ;
-FROM: peg.search => replace ;
+peg.private peg.parsers peg.search quotations sequences
+sequences.deep splitting stack-checker strings strings.parser
+summary unicode vocabs.parser words ;
IN: peg.ebnf
"\t" token [ drop "\\t" ] action ,
"\n" token [ drop "\\n" ] action ,
"\r" token [ drop "\\r" ] action ,
- ] choice* replace ;
+ ] choice* peg-replace ;
: identifier-parser ( -- parser )
! Return a parser that parses an identifier delimited by
! Copyright (C) 2007, 2008 Chris Double, Doug Coleman.
! See https://factorcode.org/license.txt for BSD license.
USING: accessors fry kernel literals make math math.parser
-ranges peg peg.private sequences splitting strings unicode
-vectors ;
-FROM: peg.search => replace ;
+ranges peg peg.private peg.search sequences splitting strings
+unicode vectors ;
IN: peg.parsers
<PRIVATE
any-char ,
] seq* [
first2 [a..b] >string
- ] action replace ;
+ ] action peg-replace ;
: range-pattern ( pattern -- parser )
! 'pattern' is a set of characters describing the
"writing each object to the stream." }
{ $example "USE: peg.search" "{ 65 \"bc\" { 68 \"ef\" } } tree-write" "AbcDef" } ;
-HELP: search
+HELP: peg-search
{ $values
{ "string" string }
{ "parser" "a peg based parser" }
"parser."
}
-{ $example "USING: peg.parsers peg.search prettyprint ;" "\"one 123 two 456\" integer-parser search ." "V{ 123 456 }" }
-{ $example "USING: peg peg.parsers peg.search prettyprint ;" "\"one 123 \\\"hello\\\" two 456\" integer-parser string-parser 2choice search ." "V{ 123 \"hello\" 456 }" }
-{ $see-also replace } ;
+{ $example
+ "USING: peg.parsers peg.search prettyprint ;"
+ "\"one 123 two 456\" integer-parser peg-search ."
+ "V{ 123 456 }"
+}
+{ $example
+ "USING: peg peg.parsers peg.search prettyprint ;"
+ "\"one 123 \\\"hello\\\" two 456\" integer-parser string-parser 2choice peg-search ."
+ "V{ 123 \"hello\" 456 }"
+} ;
-HELP: replace
+HELP: peg-replace
{ $values
{ "string" string }
{ "parser" "a peg based parser" }
"successfully parse with the given parser replaced with "
"the result of that parser."
}
-{ $example "USING: math math.parser peg peg.parsers peg.search prettyprint ;" "\"one 123 two 456\" integer-parser [ 2 * number>string ] action replace ." "\"one 246 two 912\"" }
-{ $see-also search } ;
+{ $example
+ "USING: math math.parser peg peg.parsers peg.search prettyprint ;"
+ "\"one 123 two 456\" integer-parser [ 2 * number>string ] action peg-replace ."
+ "\"one 246 two 912\""
+} ;
+
+{ peg-search peg-replace } related-words
PRIVATE>
-: search ( string parser -- seq )
+: peg-search ( string parser -- seq )
any-char-parser [ drop f ] action 2choice repeat0
[ parse sift ] [ 3drop { } ] recover ;
-: replace ( string parser -- result )
+: peg-replace ( string parser -- result )
[
any-char-parser 2choice repeat0
parse sift tree-write