logica
Version:
a compile-to-javascript predicate logic language
28 lines (21 loc) • 580 B
JavaScript
var parser = require('./parser.js');
var traverse = require('traverse');
var _ = require('lodash');
function parse(source) {
parser.parse(source);
var parsed = parser.parser.yy
// for variadic Operations, collapse repeated operands
traverse(parsed.AST).forEach(function (node) {
if (!node) return;
switch (node.type) {
case 'OPERATION':
node.tailOperands = _.flatten(node.tailOperands)
break;
case 'COMBINATION':
node.operands = _.flatten(node.operands)
break;
}
})
return parsed;
}
module.exports = parse