From 87b08cd9ee0fd5f10d531eb04f0c74b1322f42f2 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 24 Nov 2020 11:17:25 +0900 Subject: [PATCH] basic:leftmost derivatives are now actually leftmost --- assets/tbas/basic.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/assets/tbas/basic.js b/assets/tbas/basic.js index f875716..08439c6 100644 --- a/assets/tbas/basic.js +++ b/assets/tbas/basic.js @@ -720,7 +720,7 @@ bF._opPrc = { "OR":12, "TO":13, "STEP":14, - ":":15,"~":15, // FIXME it seems every operator is utilised as rightmost-derivative + ":":15,"~":15, // array CONS and PUSH "=":999 }; bF._opRh = {"^":1,"=":1,":":1}; @@ -1320,7 +1320,10 @@ for input "DEFUN sinc(x) = sin(x) / x" } if (parenDepth == 0) { - if (states[k] == "operator" && isSemanticLiteral(tokens[k-1], states[k-1]) && bF._opPrc[tokens[k].toUpperCase()] > topmostOpPrc) { + if (states[k] == "operator" && isSemanticLiteral(tokens[k-1], states[k-1]) && + ((bF._opPrc[tokens[k].toUpperCase()] > topmostOpPrc) || + (!bF._opRh[tokens[k].toUpperCase()] && bF._opPrc[tokens[k].toUpperCase()] == topmostOpPrc)) + ) { topmostOp = tokens[k].toUpperCase(); topmostOpPrc = bF._opPrc[tokens[k].toUpperCase()]; operatorPos = k; @@ -1362,7 +1365,10 @@ for input "DEFUN sinc(x) = sin(x) / x" separators.push(k); } if (parenDepth == 0) { - if (states[k] == "operator" && isSemanticLiteral(tokens[k-1], states[k-1]) && bF._opPrc[tokens[k].toUpperCase()] > topmostOpPrc) { + if (states[k] == "operator" && isSemanticLiteral(tokens[k-1], states[k-1]) && + ((bF._opPrc[tokens[k].toUpperCase()] > topmostOpPrc) || + (!bF._opRh[tokens[k].toUpperCase()] && bF._opPrc[tokens[k].toUpperCase()] == topmostOpPrc)) + ) { topmostOp = tokens[k].toUpperCase(); topmostOpPrc = bF._opPrc[tokens[k].toUpperCase()]; operatorPos = k;