UNPKG

ima-parse

Version:

Easy Simple Parser, that only requires a Grammar JSON to output an AST.

86 lines (85 loc) 2.86 kB
"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: "}" } ] };