ima-parse
Version:
Easy Simple Parser, that only requires a Grammar JSON to output an AST.
86 lines (85 loc) • 2.86 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.classRule = exports.classProperty = exports.importRule = exports.anyTextRule = exports.asteriskRule = void 0;
exports.asteriskRule = {
name: "Asterisk",
definition: [{ type: "keyword", phrase: "*" }]
};
const identifierRule = {
name: "Identifier",
definition: [{ type: "identifier", key: "name" }]
};
const stringLiteralRule = {
name: "StringLiteral",
definition: [{ type: "text", startPhrase: '"', endPhrase: '"', key: "value" }]
};
exports.anyTextRule = {
name: "AnyText",
definition: [{ type: "text", key: "any", endPhrase: "*", excludeEndPhrase: true }]
};
const numberLiteralRule = {
name: "NumberLiteral",
definition: [{ type: "number", key: "number" }]
};
const importSpecifiers = {
name: "ImportParts",
definition: [
{ type: "keyword", phrase: "{" },
{ type: "rules", rules: [identifierRule], separatorPhrase: ",", key: "values", optional: false },
{ type: "keyword", phrase: "}" }
]
};
exports.importRule = {
name: "Import",
definition: [
{ type: "keyword", phrase: "import" },
{ type: "rules", rules: [importSpecifiers, exports.asteriskRule], singular: true, optional: false, key: "target" },
{ type: "keyword", phrase: "from" },
{ type: "rules", rules: [stringLiteralRule], key: "source", optional: false, singular: true }
]
};
const valueAssignment = {
name: "ValueAssignment",
definition: [
{ type: "keyword", phrase: "=" },
{ type: "rules", key: "value", optional: false, singular: true, rules: [stringLiteralRule, numberLiteralRule] }
]
};
exports.classProperty = {
name: "ClassProperty",
definition: [
{ type: "identifier", key: "name" },
{
type: "paths",
optional: true,
paths: [
[
{ type: "keyword", phrase: ":" },
{ type: "identifier", key: "type" }
]
]
},
{ type: "rules", rules: [valueAssignment], key: "defaultValue", singular: true, optional: true }
]
};
exports.classRule = {
name: "ClassDefinition",
definition: [
{ type: "modifiers", phrases: ["abstract"], optional: true },
{ type: "keyword", phrase: "class" },
{ type: "identifier", key: "name" },
{
type: "paths",
optional: true,
paths: [
[
{ type: "keyword", phrase: "extends" },
{ type: "identifier", key: "extends" }
]
]
},
{ type: "keyword", phrase: "{" },
{ type: "rules", rules: [exports.classProperty], key: "properties", optional: true },
{ type: "keyword", phrase: "}" }
]
};