24 lines
690 B
Factor
24 lines
690 B
Factor
USING: accessors kernel lists literals namespaces
|
|
parser-combinators prettyprint sequences strings ;
|
|
|
|
SYMBOLS: esc sep ;
|
|
|
|
: set-chars ( m n -- ) [ sep set ] [ esc set ] bi* ;
|
|
: escape ( -- parser ) esc get 1token ;
|
|
: escaped ( -- parser ) escape any-char-parser &> ;
|
|
: separator ( -- parser ) sep get 1token ;
|
|
|
|
: character ( -- parser )
|
|
${ esc get sep get } [ member? not ] curry satisfy ;
|
|
|
|
: my-token ( -- parser ) escaped character <|> <*> ;
|
|
|
|
: token-list ( -- parser )
|
|
my-token separator list-of [ [ >string ] map ] <@ ;
|
|
|
|
: tokenize ( str sep-char esc-char -- seq )
|
|
set-chars token-list parse car parsed>> ;
|
|
|
|
"one^|uno||three^^^^|four^^^|^cuatro|"
|
|
CHAR: | CHAR: ^ tokenize .
|