diff --git a/grammar.ne b/grammar.ne index 5ea358b..be43851 100644 --- a/grammar.ne +++ b/grammar.ne @@ -19,10 +19,13 @@ DIRECTIVE_STATEMENT -> DIRECTIVE __ OPEN_PARAMETERS EOL {% ([,directive,,paramet DIRECTIVE -> %SINGLETON {% () => 'singleton' %} | %KEEPALIVE {% () => 'keepalive' %} -LINK_DECLARATION -> _ %LINK __ IDENTIFIER {% ([,,,id]) => { return { type: 'link', array: false, required: false, name: id }} %} - | _ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,id]) => { return { type: 'link', array: true, required: false, name: id }} %} - | _ %REQUIRED __ %LINK __ IDENTIFIER {% ([,,,,,id]) => { return { type: 'link', array: false, required: true, name: id }} %} - | _ %REQUIRED __ %LINK _ %ARRAY __ IDENTIFIER {% ([,,,,,,,id]) => { return { type: 'link', array: true, required: true, name: id }} %} +LINK_DECLARATION -> LINK __ IDENTIFIER {% ([,,id]) => { return { type: 'link', array: false, required: false, name: id }} %} + | LINK_ARR __ IDENTIFIER {% ([,,id]) => { return { type: 'link', array: true, required: false, name: id }} %} + | %REQUIRED __ LINK __ IDENTIFIER {% ([,,,,id]) => { return { type: 'link', array: false, required: true, name: id }} %} + | %REQUIRED __ LINK_ARR __ IDENTIFIER {% ([,,,,id]) => { return { type: 'link', array: true, required: true, name: id }} %} + +LINK -> %LINK +LINK_ARR -> %LINK %LSQBRACKET %RSQBRACKET NAMESPACE -> IDENTIFIER | IDENTIFIER %DOTOP NAMESPACE {% ([a,,b]) => { return [`${a}.${b}`] } %} diff --git a/package.json b/package.json index cefb1d4..7a55ca2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vogue", - "version": "1.0.0", + "version": "0.0.1", "main": "index.js", "license": "MIT", "type": "module", @@ -12,6 +12,7 @@ "test": "node run.js test" }, "dependencies": { + "debug": "^4.3.1", "lodash": "^4.17.21", "moo": "^0.5.1", "nearley": "^2.20.1", diff --git a/run.js b/run.js index 8def3c6..18a496a 100755 --- a/run.js +++ b/run.js @@ -1,5 +1,6 @@ #!/usr/bin/env node +import debug from 'debug'; import { resolve, parse } from 'path'; import { readFileSync, readdirSync } from 'fs'; import nearley from 'nearley'; @@ -12,11 +13,17 @@ import _ from 'lodash'; const { get, set } = _; import Module from './Module.js'; import System from './System.js'; -const debug = true; +import tokens from './tokens.js'; // globals inside grammar context import minify from './minify.js'; +const log = { + ast: debug('vogue:ast'), + modules: debug('vogue:modules'), + debug: debug('vogue:debug'), +} + Object.defineProperty(Array.prototype, 'empty', { get() { return this.length === 0; @@ -34,30 +41,7 @@ function createParser() { // Generate JavaScript code from the rules const grammarJs = generate(grammarInfoObject, "grammar"); - const lexer = moo.compile({ - LINK: 'link', - NAMESPACE: 'namespace', - REQUIRED: 'required', - SINGLETON: 'singleton', - KEEPALIVE: 'keepalive', - STATIC: 'static', - MEMBER: 'member', - RUNTIME: 'runtime', - IMPORT: 'import', - ASYNC: 'async', - AS: 'as', - STRING: /'(?:\\['\\]|[^\n'\\])*'/, - ARRAY: '[]', - OBJECT: '{}', - LPAREN: '(', - RPAREN: ')', - DOTOP: '.', - JS_BLOCK: /\[\[[^]*?\n\]\]$/, - JS_BLOCK2: /{[^]*?\n}$/, - IDENTIFIER: /[a-zA-Z][a-zA-Z0-9]*/, - SPACE: { match: /\s+/, lineBreaks: true }, - SEMICOLON: ';' - }); + const lexer = moo.compile(tokens); // lexer.__proto__.formatError = function(token, message) { // if (token == null) { @@ -125,9 +109,9 @@ async function parseModule(location) { parser.finish(); const parsed = parser.results[0]; - console.log('='.repeat(80)); - console.log(location); - console.log(parsed); + log.ast('='.repeat(80)); + log.ast(location); + log.ast(parsed); module.name.last = name; module.name.full = name; diff --git a/tokens.js b/tokens.js new file mode 100644 index 0000000..8c29e00 --- /dev/null +++ b/tokens.js @@ -0,0 +1,24 @@ +export default { + LINK: 'link', + NAMESPACE: 'namespace', + REQUIRED: 'required', + SINGLETON: 'singleton', + KEEPALIVE: 'keepalive', + STATIC: 'static', + MEMBER: 'member', + RUNTIME: 'runtime', + IMPORT: 'import', + ASYNC: 'async', + AS: 'as', + STRING: /'(?:\\['\\]|[^\n'\\])*'/, + LSQBRACKET: '[', + RSQBRACKET: ']', + LPAREN: '(', + RPAREN: ')', + DOTOP: '.', + JS_BLOCK: /\[\[[^]*?\n\]\]$/, + JS_BLOCK2: /{[^]*?\n}$/, + IDENTIFIER: /[a-zA-Z][a-zA-Z0-9]*/, + SPACE: { match: /\s+/, lineBreaks: true }, + SEMICOLON: ';' +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 5deb942..5ddc2a9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,237 +3,247 @@ "@cronvel/get-pixels@^3.4.0": - "resolved" "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.0.tgz" - "version" "3.4.0" + version "3.4.0" + resolved "https://registry.npmjs.org/@cronvel/get-pixels/-/get-pixels-3.4.0.tgz" dependencies: - "jpeg-js" "^0.4.1" - "ndarray" "^1.0.19" - "ndarray-pack" "^1.1.1" - "node-bitmap" "0.0.1" - "omggif" "^1.0.10" - "pngjs" "^5.0.0" + jpeg-js "^0.4.1" + ndarray "^1.0.19" + ndarray-pack "^1.1.1" + node-bitmap "0.0.1" + omggif "^1.0.10" + pngjs "^5.0.0" -"async@0.2.10": - "resolved" "https://registry.npmjs.org/async/-/async-0.2.10.tgz" - "version" "0.2.10" +async@0.2.10: + version "0.2.10" + resolved "https://registry.npmjs.org/async/-/async-0.2.10.tgz" -"binary-search-tree@0.2.5": - "resolved" "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz" - "version" "0.2.5" +binary-search-tree@0.2.5: + version "0.2.5" + resolved "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz" dependencies: - "underscore" "~1.4.4" + underscore "~1.4.4" -"chroma-js@^2.1.0": - "resolved" "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.1.tgz" - "version" "2.1.1" +chroma-js@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/chroma-js/-/chroma-js-2.1.1.tgz" dependencies: - "cross-env" "^6.0.3" + cross-env "^6.0.3" -"commander@^2.19.0": - "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - "version" "2.20.3" +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" -"cross-env@^6.0.3": - "resolved" "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz" - "version" "6.0.3" +cross-env@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz" dependencies: - "cross-spawn" "^7.0.0" + cross-spawn "^7.0.0" -"cross-spawn@^7.0.0": - "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - "version" "7.0.3" +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" dependencies: - "path-key" "^3.1.0" - "shebang-command" "^2.0.0" - "which" "^2.0.1" + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" -"cwise-compiler@^1.1.2": - "resolved" "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz" - "version" "1.1.3" +cwise-compiler@^1.1.2: + version "1.1.3" + resolved "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz" dependencies: - "uniq" "^1.0.0" + uniq "^1.0.0" -"discontinuous-range@1.0.0": - "resolved" "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz" - "version" "1.0.0" - -"immediate@~3.0.5": - "resolved" "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" - "version" "3.0.6" - -"iota-array@^1.0.0": - "resolved" "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz" - "version" "1.0.0" - -"is-buffer@^1.0.2": - "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - "version" "1.1.6" - -"isexe@^2.0.0": - "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - "version" "2.0.0" - -"jpeg-js@^0.4.1": - "resolved" "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz" - "version" "0.4.3" - -"lazyness@^1.2.0": - "resolved" "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz" - "version" "1.2.0" - -"lie@3.1.1": - "resolved" "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz" - "version" "3.1.1" +debug@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" dependencies: - "immediate" "~3.0.5" + ms "2.1.2" -"localforage@^1.3.0": - "resolved" "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz" - "version" "1.9.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + +iota-array@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz" + +is-buffer@^1.0.2: + version "1.1.6" + resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + +jpeg-js@^0.4.1: + version "0.4.3" + resolved "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz" + +lazyness@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/lazyness/-/lazyness-1.2.0.tgz" + +lie@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz" dependencies: - "lie" "3.1.1" + immediate "~3.0.5" -"lodash@^4.17.21": - "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - "version" "4.17.21" - -"minimist@^1.2.5": - "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - "version" "1.2.5" - -"mkdirp@~0.5.1": - "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - "version" "0.5.5" +localforage@^1.3.0: + version "1.9.0" + resolved "https://registry.npmjs.org/localforage/-/localforage-1.9.0.tgz" dependencies: - "minimist" "^1.2.5" + lie "3.1.1" -"moo@^0.5.0", "moo@^0.5.1": - "resolved" "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz" - "version" "0.5.1" +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" -"ndarray-pack@^1.1.1": - "resolved" "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz" - "version" "1.2.1" +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + +mkdirp@~0.5.1: + version "0.5.5" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" dependencies: - "cwise-compiler" "^1.1.2" - "ndarray" "^1.0.13" + minimist "^1.2.5" -"ndarray@^1.0.13", "ndarray@^1.0.19": - "resolved" "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz" - "version" "1.0.19" +moo@^0.5.0, moo@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + +ndarray-pack@^1.1.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz" dependencies: - "iota-array" "^1.0.0" - "is-buffer" "^1.0.2" + cwise-compiler "^1.1.2" + ndarray "^1.0.13" -"nearley@^2.20.1": - "resolved" "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz" - "version" "2.20.1" +ndarray@^1.0.13, ndarray@^1.0.19: + version "1.0.19" + resolved "https://registry.npmjs.org/ndarray/-/ndarray-1.0.19.tgz" dependencies: - "commander" "^2.19.0" - "moo" "^0.5.0" - "railroad-diagrams" "^1.0.0" - "randexp" "0.4.6" + iota-array "^1.0.0" + is-buffer "^1.0.2" -"nedb@^1.8.0": - "resolved" "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz" - "version" "1.8.0" +nearley@^2.20.1: + version "2.20.1" + resolved "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz" dependencies: - "async" "0.2.10" - "binary-search-tree" "0.2.5" - "localforage" "^1.3.0" - "mkdirp" "~0.5.1" - "underscore" "~1.4.4" + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" -"nextgen-events@^1.3.4": - "resolved" "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.3.4.tgz" - "version" "1.3.4" - -"node-bitmap@0.0.1": - "resolved" "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz" - "version" "0.0.1" - -"omggif@^1.0.10": - "resolved" "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz" - "version" "1.0.10" - -"path-key@^3.1.0": - "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - "version" "3.1.1" - -"pngjs@^5.0.0": - "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz" - "version" "5.0.0" - -"railroad-diagrams@^1.0.0": - "resolved" "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz" - "version" "1.0.0" - -"randexp@0.4.6": - "resolved" "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz" - "version" "0.4.6" +nedb@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/nedb/-/nedb-1.8.0.tgz" dependencies: - "discontinuous-range" "1.0.0" - "ret" "~0.1.10" + async "0.2.10" + binary-search-tree "0.2.5" + localforage "^1.3.0" + mkdirp "~0.5.1" + underscore "~1.4.4" -"ret@~0.1.10": - "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - "version" "0.1.15" +nextgen-events@^1.3.4: + version "1.3.4" + resolved "https://registry.npmjs.org/nextgen-events/-/nextgen-events-1.3.4.tgz" -"setimmediate@^1.0.5": - "resolved" "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" - "version" "1.0.5" +node-bitmap@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz" -"seventh@^0.7.40": - "resolved" "https://registry.npmjs.org/seventh/-/seventh-0.7.40.tgz" - "version" "0.7.40" +omggif@^1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz" + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz" + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz" dependencies: - "setimmediate" "^1.0.5" + discontinuous-range "1.0.0" + ret "~0.1.10" -"shebang-command@^2.0.0": - "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - "version" "2.0.0" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + +seventh@^0.7.40: + version "0.7.40" + resolved "https://registry.npmjs.org/seventh/-/seventh-0.7.40.tgz" dependencies: - "shebang-regex" "^3.0.0" + setimmediate "^1.0.5" -"shebang-regex@^3.0.0": - "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - "version" "3.0.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + dependencies: + shebang-regex "^3.0.0" -"string-kit@^0.12.0": - "resolved" "https://registry.npmjs.org/string-kit/-/string-kit-0.12.5.tgz" - "version" "0.12.5" +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" -"terminal-kit@^2.1.0": - "resolved" "https://registry.npmjs.org/terminal-kit/-/terminal-kit-2.1.0.tgz" - "version" "2.1.0" +string-kit@^0.12.0: + version "0.12.5" + resolved "https://registry.npmjs.org/string-kit/-/string-kit-0.12.5.tgz" + +terminal-kit@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/terminal-kit/-/terminal-kit-2.1.0.tgz" dependencies: "@cronvel/get-pixels" "^3.4.0" - "chroma-js" "^2.1.0" - "lazyness" "^1.2.0" - "ndarray" "^1.0.19" - "nextgen-events" "^1.3.4" - "seventh" "^0.7.40" - "string-kit" "^0.12.0" - "tree-kit" "^0.7.0" + chroma-js "^2.1.0" + lazyness "^1.2.0" + ndarray "^1.0.19" + nextgen-events "^1.3.4" + seventh "^0.7.40" + string-kit "^0.12.0" + tree-kit "^0.7.0" -"tree-kit@^0.7.0": - "resolved" "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.0.tgz" - "version" "0.7.0" +tree-kit@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/tree-kit/-/tree-kit-0.7.0.tgz" -"uglify-js@^3.13.5": - "resolved" "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz" - "version" "3.13.5" +uglify-js@^3.13.5: + version "3.13.5" + resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.5.tgz" -"underscore@~1.4.4": - "resolved" "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" - "version" "1.4.4" +underscore@~1.4.4: + version "1.4.4" + resolved "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz" -"uniq@^1.0.0": - "resolved" "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" - "version" "1.0.1" +uniq@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz" -"which@^2.0.1": - "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - "version" "2.0.2" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" dependencies: - "isexe" "^2.0.0" + isexe "^2.0.0"