UNPKG

js-slang

Version:

Javascript-based implementations of Source, written in Typescript

59 lines 2.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.unparse = void 0; function unparse(node) { //if ((node as any)?.hidden) return ""; switch (node.type) { case "Identifier": return node.name; case "Literal": return node.raw; case "CallExpression": const callee = unparse(node.callee); const args = node.arguments.map(unparse).join(" "); return `(${callee} ${args})`; case "ArrayExpression": const elements = node.elements.map(s => unparse(s)).join(" "); return `(vector ${elements})`; case "ArrowFunctionExpression": const params = node.params.map(unparse).join(" "); const body = unparse(node.body); return `(lambda (${params}) ${body})`; case "RestElement": return `. ${unparse(node.argument)}`; case "BlockStatement": const statements = node.body.map(unparse).join(" "); return `(begin ${statements})`; case "ReturnStatement": const argument = unparse(node.argument); return argument; case "VariableDeclaration": const id = unparse(node.declarations[0].id); const init = unparse(node.declarations[0].init); return `(define ${id} ${init})`; case "ExpressionStatement": return unparse(node.expression); case "AssignmentExpression": const left = unparse(node.left); const right = unparse(node.right); return `(set! ${left} ${right})`; case "ConditionalExpression": const test = unparse(node.test); const consequent = unparse(node.consequent); const alternate = unparse(node.alternate); return `(if ${test} ${consequent} ${alternate})`; case "Program": return node.body.map(unparse).join("\n"); case "ImportDeclaration": const identifiers = node.specifiers.map(unparse).join(" "); const source = unparse(node.source); return `(import (${source} ${identifiers}))`; case "ExportNamedDeclaration": const definition = unparse(node.declaration); return `(export ${definition})`; default: throw new Error(`Unparsing for node type ${node.type} not implemented`); } } exports.unparse = unparse; //# sourceMappingURL=reverse_parser.js.map