bramble-parser
Version:
Bramble is a lightweight recursive descent parser that processes .havenfs files, returning a structured Json tree that can be used to construct an in-memory FS representation. The parser is based on line-based grammar, chunk headers, and metadata declarat
66 lines (58 loc) • 3.22 kB
text/typescript
import { ELexerTokens } from "../common";
class BrambleLexerRule {
pattern: RegExp;
tokenToMatch: ELexerTokens;
constructor(_pattern: RegExp, _tokenToMatch: ELexerTokens) {
this.pattern = _pattern;
this.tokenToMatch = _tokenToMatch;
}
}
export const LexerRules: BrambleLexerRule[] = [
new BrambleLexerRule(/^#[0-9a-fA-F]{6}\b/, ELexerTokens.ATT_COLOR), // PRIORITY collision #
new BrambleLexerRule(/^x-[^\s]+/, ELexerTokens.DEPRECATED),
new BrambleLexerRule(/^#/, ELexerTokens.HASH), // GENERAL collision #
new BrambleLexerRule(/^@/, ELexerTokens.AT),
new BrambleLexerRule(/^-/, ELexerTokens.LINE),
new BrambleLexerRule(/^=/, ELexerTokens.OPERATOR),
new BrambleLexerRule(/^:/, ELexerTokens.DOTS),
new BrambleLexerRule(/^,/, ELexerTokens.COMMA),
new BrambleLexerRule(/^BRANCH\b/, ELexerTokens.KW_BRANCH),
new BrambleLexerRule(/^CHUNK\b/, ELexerTokens.KW_CHUNK),
new BrambleLexerRule(/^FILE\b/, ELexerTokens.KW_FILE),
new BrambleLexerRule(/^META\b/, ELexerTokens.KW_META),
new BrambleLexerRule(/^LIB\b/, ELexerTokens.KW_LIB),
new BrambleLexerRule(/^TAG\b/, ELexerTokens.KW_TAG),
new BrambleLexerRule(/^FR\b/, ELexerTokens.KW_FR),
new BrambleLexerRule(/^DIR\b/, ELexerTokens.KW_DIR),
new BrambleLexerRule(/^REF\b/, ELexerTokens.KW_REF),
new BrambleLexerRule(/^HIST\b/, ELexerTokens.KW_HIST),
new BrambleLexerRule(/^base\b/, ELexerTokens.ATT_BASE),
new BrambleLexerRule(/^head\b/, ELexerTokens.ATT_HEAD),
new BrambleLexerRule(/^parent\b/, ELexerTokens.ATT_PARENT),
new BrambleLexerRule(/^name\b/, ELexerTokens.ATT_NAME),
new BrambleLexerRule(/^size\b/, ELexerTokens.ATT_SIZE),
new BrambleLexerRule(/^tags\b/, ELexerTokens.ATT_TAGS),
new BrambleLexerRule(/^libs\b/, ELexerTokens.ATT_LIBS),
new BrambleLexerRule(/^modified\b/, ELexerTokens.ATT_MODIFIED), // ACTION
new BrambleLexerRule(/^created\b/, ELexerTokens.ATT_CREATED), // ACTION
new BrambleLexerRule(/^updated\b/, ELexerTokens.ATT_UPDATE), // ACTION
new BrambleLexerRule(/^deleted\b/, ELexerTokens.ATT_DELETED), // ACTION
new BrambleLexerRule(/^restored\b/, ELexerTokens.ATT_RESTORED), // ACTION
new BrambleLexerRule(/^mimetype\b/, ELexerTokens.ATT_MIMETYPE),
new BrambleLexerRule(/^to\b/, ELexerTokens.ATT_TO),
new BrambleLexerRule(/^type\b/, ELexerTokens.ATT_TYPE),
new BrambleLexerRule(/^context\b/, ELexerTokens.ATT_CONTEXT),
new BrambleLexerRule(/^user\b/, ELexerTokens.ATT_USER),
new BrambleLexerRule(/^action\b/, ELexerTokens.ATT_ACTION),
new BrambleLexerRule(/^hash\b/, ELexerTokens.ATT_HASH),
new BrambleLexerRule(/^[a-f0-9]+\b/i, ELexerTokens.ID),
new BrambleLexerRule(/^root\b/, ELexerTokens.ROOT),
new BrambleLexerRule(/^\d+-\d+/, ELexerTokens.RANGE),
new BrambleLexerRule(/^\d{8}T\d{4}/, ELexerTokens.TIMESTAMP),
new BrambleLexerRule(/^[a-z]+\/[a-z0-9\-\.+]+/i, ELexerTokens.MIME_TYPE),
new BrambleLexerRule(/^[^ \s#@=]+(,[^ \s#@=]+)+/, ELexerTokens.LIST),
new BrambleLexerRule(/^\d+/, ELexerTokens.NUMBER),
new BrambleLexerRule(/^[a-zA-Z0-9_\-\.\/]+/, ELexerTokens.STRING),
new BrambleLexerRule(/^\n/, ELexerTokens.NEWLINE),
new BrambleLexerRule(/^[ \t]+/, ELexerTokens.WHITESPACE),
];