115 lines
3.7 KiB
Go
115 lines
3.7 KiB
Go
package parsekit
|
|
|
|
// A provides convenient access to a range of atoms that can be used to
|
|
// build combinators or parsing rules.
|
|
var A = struct {
|
|
EndOfFile Matcher
|
|
AnyRune Matcher
|
|
Space Matcher
|
|
Tab Matcher
|
|
CarriageRet Matcher
|
|
Newline Matcher
|
|
Excl Matcher
|
|
DoubleQuote Matcher
|
|
Hash Matcher
|
|
Dollar Matcher
|
|
Percent Matcher
|
|
Amp Matcher
|
|
SingleQuote Matcher
|
|
RoundOpen Matcher
|
|
RoundClose Matcher
|
|
Asterisk Matcher
|
|
Plus Matcher
|
|
Comma Matcher
|
|
Minus Matcher
|
|
Dot Matcher
|
|
Slash Matcher
|
|
Colon Matcher
|
|
Semicolon Matcher
|
|
AngleOpen Matcher
|
|
Equal Matcher
|
|
AngleClose Matcher
|
|
Question Matcher
|
|
At Matcher
|
|
SquareOpen Matcher
|
|
Backslash Matcher
|
|
SquareClose Matcher
|
|
Caret Matcher
|
|
Underscore Matcher
|
|
Backquote Matcher
|
|
CurlyOpen Matcher
|
|
Pipe Matcher
|
|
CurlyClose Matcher
|
|
Tilde Matcher
|
|
Whitespace Matcher
|
|
WhitespaceAndNewlines Matcher
|
|
EndOfLine Matcher
|
|
Digit Matcher
|
|
ASCII Matcher
|
|
ASCIILower Matcher
|
|
ASCIIUpper Matcher
|
|
HexDigit Matcher
|
|
}{
|
|
EndOfFile: MatchEndOfFile(),
|
|
AnyRune: MatchAnyRune(),
|
|
Space: C.Rune(' '),
|
|
Tab: C.Rune('\t'),
|
|
CarriageRet: C.Rune('\r'),
|
|
Newline: C.Rune('\n'),
|
|
Excl: C.Rune('!'),
|
|
DoubleQuote: C.Rune('"'),
|
|
Hash: C.Rune('#'),
|
|
Dollar: C.Rune('$'),
|
|
Percent: C.Rune('%'),
|
|
Amp: C.Rune('&'),
|
|
SingleQuote: C.Rune('\''),
|
|
RoundOpen: C.Rune('('),
|
|
RoundClose: C.Rune(')'),
|
|
Asterisk: C.Rune('*'),
|
|
Plus: C.Rune('+'),
|
|
Comma: C.Rune(','),
|
|
Minus: C.Rune('-'),
|
|
Dot: C.Rune('.'),
|
|
Slash: C.Rune('/'),
|
|
Colon: C.Rune(':'),
|
|
Semicolon: C.Rune(';'),
|
|
AngleOpen: C.Rune('<'),
|
|
Equal: C.Rune('='),
|
|
AngleClose: C.Rune('>'),
|
|
Question: C.Rune('?'),
|
|
At: C.Rune('@'),
|
|
SquareOpen: C.Rune('['),
|
|
Backslash: C.Rune('\\'),
|
|
SquareClose: C.Rune(']'),
|
|
Caret: C.Rune('^'),
|
|
Underscore: C.Rune('_'),
|
|
Backquote: C.Rune('`'),
|
|
CurlyOpen: C.Rune('{'),
|
|
Pipe: C.Rune('|'),
|
|
CurlyClose: C.Rune('}'),
|
|
Tilde: C.Rune('~'),
|
|
Whitespace: C.OneOrMore(C.AnyOf(C.Rune(' '), C.Rune('\t'))),
|
|
WhitespaceAndNewlines: C.OneOrMore(C.AnyOf(C.Rune(' '), C.Rune('\t'), C.Rune('\r'), C.Rune('\n'))),
|
|
EndOfLine: C.AnyOf(C.String("\r\n"), C.Rune('\n'), MatchEndOfFile()),
|
|
Digit: C.RuneRange('0', '9'),
|
|
ASCII: C.RuneRange('\x00', '\x7F'),
|
|
ASCIILower: C.RuneRange('a', 'z'),
|
|
ASCIIUpper: C.RuneRange('A', 'Z'),
|
|
HexDigit: C.AnyOf(C.RuneRange('0', '9'), C.RuneRange('a', 'f'), C.RuneRange('A', 'F')),
|
|
}
|
|
|
|
func MatchEndOfFile() Matcher {
|
|
return func(m *MatchDialog) bool {
|
|
fork := m.Fork()
|
|
input, ok := fork.NextRune()
|
|
return !ok && input == EOF
|
|
}
|
|
}
|
|
|
|
func MatchAnyRune() Matcher {
|
|
return func(m *MatchDialog) bool {
|
|
_, ok := m.NextRune()
|
|
return ok
|
|
}
|
|
}
|