diff --git a/main.js b/main.js index 5bc0532..efbf83d 100644 --- a/main.js +++ b/main.js @@ -14,38 +14,15 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -import { tokenize } from "./modules/lexer.js"; -import { shunt } from "./modules/parser.js"; function evaluate() { const expr = document.querySelector("#expr"); const modulus = document.querySelector("#modulus"); const result = document.querySelector("#result"); - const m = BigInt(modulus.value); - if (m <= 0n) { - const e = Error("invalid modulus") - result.value = e; - console.log(e); - return; - } - - const tokens = tokenize(expr.value); - console.log(tokens); - let queue = []; - try { - queue = shunt(tokens); - } catch(e) { - result.value = e; - console.log(e); - return; - } - - console.log(queue); - - worker.postMessage({command: "compute", queue, m}); + worker.postMessage({command: "compute", expr: expr.value, modulus: modulus.value}); timeoutId = setTimeout(() => { - document.querySelector("#result").value = "calculating..."; + result.value = "calculating..."; switchInputs(false); switchButtons(false); }, 500); diff --git a/workers/compute.js b/workers/compute.js index ec3621a..edd780d 100644 --- a/workers/compute.js +++ b/workers/compute.js @@ -14,15 +14,30 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ -importScripts("./math.js") +importScripts("./lexer.js", "parser.js", "./math.js") addEventListener("message", (message) => { if (message.data.command === "compute") { - const result = compute(message.data.queue, message.data.m); + const expr = message.data.expr; + const modulus = BigInt(message.data.modulus); + const result = evaluate(expr, modulus); postMessage(result); } }); +function evaluate(expr, m) { + if (m <= 0n) { + throw new Error("invalid modulus"); + } + + const tokens = tokenize(expr); + console.log(tokens); + const queue = shunt(tokens); + console.log(queue); + const result = compute(queue, m); + return result; +} + function binaryOpPop(stack) { const b = stack.pop(); const a = stack.pop(); diff --git a/modules/lexer.js b/workers/lexer.js similarity index 98% rename from modules/lexer.js rename to workers/lexer.js index 9e65f30..43e3c36 100644 --- a/modules/lexer.js +++ b/workers/lexer.js @@ -43,5 +43,3 @@ function tokenize(expr) { return tokens; } - -export { tokenize }; diff --git a/modules/parser.js b/workers/parser.js similarity index 99% rename from modules/parser.js rename to workers/parser.js index cc76fa5..dd40eff 100644 --- a/modules/parser.js +++ b/workers/parser.js @@ -124,5 +124,3 @@ function shunt(tokens) { empty(opstack, queue); return queue; } - -export { shunt };