From 3b5a07f954c97c2463fd7b9a5b51027411013745 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sat, 19 Mar 2016 13:01:14 -0400 Subject: [PATCH] Split out compiler to separate syndicatec command --- js/bin/syndicatec | 23 ++++++++++++++++ js/compiler/README.md | 4 +++ js/{src => compiler}/compiler.js | 35 ++++++++++-------------- js/{src => compiler}/demo-bankaccount.js | 0 js/{src => compiler}/syndicate.ohm | 1 + js/package.json | 6 +++- 6 files changed, 48 insertions(+), 21 deletions(-) create mode 100755 js/bin/syndicatec create mode 100644 js/compiler/README.md rename js/{src => compiler}/compiler.js (93%) rename js/{src => compiler}/demo-bankaccount.js (100%) rename js/{src => compiler}/syndicate.ohm (99%) diff --git a/js/bin/syndicatec b/js/bin/syndicatec new file mode 100755 index 0000000..f7311d0 --- /dev/null +++ b/js/bin/syndicatec @@ -0,0 +1,23 @@ +#!/usr/bin/env node +// -*- javascript -*- + +var fs = require('fs'); +var compiler = require('../compiler/compiler.js'); + +function compileAndPrint(inputSource) { + var translatedSource = compiler.compileSyndicateSource(inputSource); + if (translatedSource) { + console.log(translatedSource); + } +} + +if (process.argv.length < 3 || process.argv[2] === '-') { + var inputSource = ''; + process.stdin.resume(); + process.stdin.setEncoding('utf8'); + process.stdin.on('data', function(buf) { inputSource += buf; }); + process.stdin.on('end', function() { compileAndPrint(inputSource); }); +} else { + var inputSource = fs.readFileSync(process.argv[2]).toString(); + compileAndPrint(inputSource); +} diff --git a/js/compiler/README.md b/js/compiler/README.md new file mode 100644 index 0000000..d9031f8 --- /dev/null +++ b/js/compiler/README.md @@ -0,0 +1,4 @@ +# Syndicate/js compiler + +Translates ES5 + Syndicate extensions to plain ES5 using +[Ohm](https://github.com/cdglabs/ohm#readme). diff --git a/js/src/compiler.js b/js/compiler/compiler.js similarity index 93% rename from js/src/compiler.js rename to js/compiler/compiler.js index c5698aa..14a1d8f 100644 --- a/js/src/compiler.js +++ b/js/compiler/compiler.js @@ -316,27 +316,22 @@ semantics.addOperation('pushBindings(accumulator)', { } }) -function compileExtendedSource(inputSource) { +function compileSyndicateSource(inputSource, onError) { var parseResult = grammar.match(inputSource); - if (parseResult.failed()) console.error(parseResult.message); - return parseResult.succeeded() && semantics(parseResult).asES5; -} - -function compileAndPrint(inputSource) { - var translatedSource = compileExtendedSource(inputSource); - if (translatedSource) { - console.log('"use strict";'); - console.log(translatedSource); + if (parseResult.failed()) { + if (onError) { + return onError(parseResult.message, parseResult); + } else { + console.error(parseResult.message); + return false; + } + } else { + return '"use strict";\n' + semantics(parseResult).asES5; } } -if (process.argv.length < 3 || process.argv[2] === '-') { - var inputSource = ''; - process.stdin.resume(); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(buf) { inputSource += buf; }); - process.stdin.on('end', function() { compileAndPrint(inputSource); }); -} else { - var inputSource = fs.readFileSync(process.argv[2]).toString(); - compileAndPrint(inputSource); -} +//--------------------------------------------------------------------------- + +module.exports.grammar = grammar; +module.exports.semantics = semantics; +module.exports.compileSyndicateSource = compileSyndicateSource; diff --git a/js/src/demo-bankaccount.js b/js/compiler/demo-bankaccount.js similarity index 100% rename from js/src/demo-bankaccount.js rename to js/compiler/demo-bankaccount.js diff --git a/js/src/syndicate.ohm b/js/compiler/syndicate.ohm similarity index 99% rename from js/src/syndicate.ohm rename to js/compiler/syndicate.ohm index 549c562..a7d3886 100644 --- a/js/src/syndicate.ohm +++ b/js/compiler/syndicate.ohm @@ -1,3 +1,4 @@ +// -*- javascript -*- // Syntactic extensions to ES5 for Syndicate/js. See compiler.js for // the rest of the translator. diff --git a/js/package.json b/js/package.json index b435e79..f988ebb 100644 --- a/js/package.json +++ b/js/package.json @@ -8,11 +8,15 @@ "type": "git", "url": "git://github.com/tonyg/syndicate" }, + "directories": { + "bin": "./bin" + }, "scripts": { "clean": "rm -f dist/*", "build-debug": "browserify src/main.js -d -s Syndicate -o dist/syndicate.js", "build-min": "browserify src/main.js -s Syndicate -o dist/_syndicate.js && uglifyjs dist/_syndicate.js -o dist/syndicate.min.js && rm dist/_syndicate.js", - "build": "npm run build-debug && npm run build-min", + "build-compiler": "browserify compiler/compiler.js -s SyndicateCompiler -o dist/_syndicatecompiler.js && uglifyjs dist/_syndicatecompiler.js -o dist/syndicatecompiler.min.js && rm dist/_syndicatecompiler.js", + "build": "npm run build-debug && npm run build-min && npm run build-compiler", "watch": "watchify src/main.js -d -s Syndicate -o dist/syndicate.js", "test": "mocha", "prepublish": "npm run build"