diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-11-17 10:04:55 -0700 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-11-17 10:04:55 -0700 |
commit | 7d897cb2b5f3292c403700dbac98f79f1052422b (patch) | |
tree | 97bd7f9949e0c5730bb821d7569c08b2c36ccdc7 /godel/js | |
parent | 56bf4878236f5464ba19d27b4342fa2a3a99eac6 (diff) | |
download | simponic.xyz-7d897cb2b5f3292c403700dbac98f79f1052422b.tar.gz simponic.xyz-7d897cb2b5f3292c403700dbac98f79f1052422b.zip |
add addition l-program
Diffstat (limited to 'godel/js')
-rw-r--r-- | godel/js/compiler.js | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/godel/js/compiler.js b/godel/js/compiler.js index 65ebbcd..e63f5b0 100644 --- a/godel/js/compiler.js +++ b/godel/js/compiler.js @@ -65,7 +65,8 @@ const compile = (ast) => { this.finalInstruction = ${ ast.instructions.length + 1 }; // instruction of the implied "exit" label - this.labelInstructions.set("E", this.finalInstruction); // "E" is the exit label + // "E" is the exit label + this.labelInstructions.set("E", this.finalInstruction); } get(variable) { @@ -106,13 +107,14 @@ const compile = (ast) => { return this.variables.get("Y"); } - run(maxIter=50000) { + run(maxIter=500_000) { let iter = 0; while (!this.isCompleted() && (++iter) < maxIter) this.step(); if (iter < maxIter) { return this.getResult(); } - throw new Error("Iterations went over maxIter=(" + maxIter + "). To resolve, please ask Turing how we can tell if a program will halt during compilation."); + throw new Error("Too many iterations. To resolve, please ask" + + " Turing how we can find if a program will halt during compilation."); } main() { @@ -124,10 +126,10 @@ const compile = (ast) => { const instructionIdx = i + 1; if (line.label) { stringBuilder.add( - `this.instructions.set(${instructionIdx}, () => this.${line.label}());\n`, + `this.instructions.set(${instructionIdx}, () => this.${line.label}());\n` ); stringBuilder.add( - `this.labelInstructions.set("${line.label}", ${instructionIdx});\n`, + `this.labelInstructions.set("${line.label}", ${instructionIdx});\n` ); } } @@ -138,7 +140,7 @@ const compile = (ast) => { const instructionIdx = i + 1; if (instruction.label) { stringBuilder.add( - ` this.followGoto("${instruction.label}");\n}\n\n${instruction.label}() {\n`, + ` this.followGoto("${instruction.label}");\n}\n\n${instruction.label}() {\n` ); stringBuilder.add(`this.instructionPointer = ${instructionIdx};\n`); instruction = instruction.instruction; @@ -152,12 +154,12 @@ const compile = (ast) => { stringBuilder.add("const program = new Program();\n\n"); stringBuilder.add("// set the initial Snapshot here\n"); stringBuilder.add('// program.variables.set("X1", 2);\n\n'); - stringBuilder.add( - "program.run(50_000); // 50_000 is the max iterations before throwing an exception\n", - ); + stringBuilder.add("program.run();\n"); + stringBuilder.add("console.log(program.variables);\n"); + stringBuilder.add("program.getResult();\n"); return js_beautify(stringBuilder.build(), { indent_size: 2, - wrap_line_length: 120, + wrap_line_length: 100, }); }; |