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 };