! Copyright (C) 2007, 2009 Slava Pestov, Daniel Ehrenberg. ! See http://factorcode.org/license.txt for BSD license. USING: sequences kernel regexp.combinators strings unicode.case peg.ebnf regexp arrays ; IN: globs EBNF: Character = "\\" .:c => [[ c 1string ]] | !(","|"}") . => [[ 1string ]] RangeCharacter = !("]") . Range = RangeCharacter:a "-" RangeCharacter:b => [[ a b ]] | RangeCharacter => [[ 1string ]] StartRange = .:a "-" RangeCharacter:b => [[ a b ]] | . => [[ 1string ]] Ranges = StartRange:s Range*:r => [[ r s prefix ]] CharClass = "^"?:n Ranges:e => [[ e n [ ] when ]] AlternationBody = Concatenation:c "," AlternationBody:a => [[ a c prefix ]] | Concatenation => [[ 1array ]] Element = "*" => [[ R/ .*/ ]] | "?" => [[ R/ ./ ]] | "[" CharClass:c "]" => [[ c ]] | "{" AlternationBody:b "}" => [[ b ]] | Character Concatenation = Element* => [[ ]] End = !(.) Main = Concatenation End ;EBNF : glob-matches? ( input glob -- ? ) [ >case-fold ] bi@ matches? ;