mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-17 00:16:04 +09:00
basic: parsing for's TO and STEP as operators
This commit is contained in:
@@ -531,11 +531,11 @@ bF._opPrc = {
|
|||||||
"BOR":10,
|
"BOR":10,
|
||||||
"AND":11,
|
"AND":11,
|
||||||
"OR":12,
|
"OR":12,
|
||||||
"TO":13,"STEP":13,
|
"TO":13,
|
||||||
|
"STEP":14,
|
||||||
"=":999
|
"=":999
|
||||||
};
|
};
|
||||||
bF._opRh = {"^":1,"=":1};
|
bF._opRh = {"^":1,"=":1};
|
||||||
bF._opUni = {"+":1,"-":1};
|
|
||||||
bF._keywords = {
|
bF._keywords = {
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -1098,7 +1098,7 @@ for input "DEFUN sinc(x) = sin(x) / x"
|
|||||||
var parenEnd = -1;
|
var parenEnd = -1;
|
||||||
var separators = [];
|
var separators = [];
|
||||||
|
|
||||||
// initial scan
|
// initial scan for adding omitted parens
|
||||||
for (k = 0; k < tokens.length; k++) {
|
for (k = 0; k < tokens.length; k++) {
|
||||||
if (tokens[k] == "(" && states[k] != "quote") {
|
if (tokens[k] == "(" && states[k] != "quote") {
|
||||||
parenDepth += 1;
|
parenDepth += 1;
|
||||||
@@ -1112,7 +1112,7 @@ for input "DEFUN sinc(x) = sin(x) / x"
|
|||||||
if (parenDepth == 0) {
|
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) {
|
||||||
topmostOp = tokens[k].toUpperCase();
|
topmostOp = tokens[k].toUpperCase();
|
||||||
topmostOpPrc = bF._opPrc[tokens[k]];
|
topmostOpPrc = bF._opPrc[tokens[k].toUpperCase()];
|
||||||
operatorPos = k;
|
operatorPos = k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1136,6 +1136,8 @@ for input "DEFUN sinc(x) = sin(x) / x"
|
|||||||
|
|
||||||
// get the position of parens and separators
|
// get the position of parens and separators
|
||||||
parenStart = -1; parenEnd = -1; parenDepth = 0;
|
parenStart = -1; parenEnd = -1; parenDepth = 0;
|
||||||
|
topmostOpPrc = 0; operatorPos = -1;
|
||||||
|
// running again but now with newly added parens
|
||||||
for (k = 0; k < tokens.length; k++) {
|
for (k = 0; k < tokens.length; k++) {
|
||||||
if (tokens[k] == "(" && states[k] != "quote") {
|
if (tokens[k] == "(" && states[k] != "quote") {
|
||||||
parenDepth += 1;
|
parenDepth += 1;
|
||||||
@@ -1152,7 +1154,7 @@ for input "DEFUN sinc(x) = sin(x) / x"
|
|||||||
if (parenDepth == 0) {
|
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) {
|
||||||
topmostOp = tokens[k].toUpperCase();
|
topmostOp = tokens[k].toUpperCase();
|
||||||
topmostOpPrc = bF._opPrc[tokens[k]];
|
topmostOpPrc = bF._opPrc[tokens[k].toUpperCase()];
|
||||||
operatorPos = k;
|
operatorPos = k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user