1 ! Copyright (C) 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: parser-combinators regexp lists sequences kernel
4 promises strings unicode.case ;
9 : 'char' [ ",*?" member? not ] satisfy ;
11 : 'string' 'char' <+> [ >lower token ] <@ ;
13 : 'escaped-char' "\\" token any-char-parser &> [ 1token ] <@ ;
15 : 'escaped-string' 'string' 'escaped-char' <|> ;
19 : 'glob' ( -- parser )
20 'term' <*> [ <and-parser> ] <@ ;
22 : 'union' ( -- parser )
23 'glob' "," token nonempty-list-of "{" "}" surrounded-by
29 "?" token [ drop any-char-parser ] <@ <|>
30 "*" token [ drop any-char-parser <*> ] <@ <|>
31 'escaped-string' <|> ;
35 : <glob> 'glob' just parse-1 just ;
37 : glob-matches? ( input glob -- ? )
38 [ >lower ] [ <glob> ] bi* parse nil? not ;