Libraryless. Click here for Pure Java version (9353L/52K).
sclass ShuntingYardParser_v2 > ShuntingYardCore is Steppable { // input LS tok; int iTok = 1; // transitional int iLiteralStart; *() {} *(S s) { this(noTok(s)); } *(LS *tok) {} run { stepAll(this); } public bool step() { if (iTok >= l(tok)) { finishLiteral(); handleEOT(); false; } S t = tok.get(iTok); bool space = isSpacer(t); if (!space) { if (isOperatorOrBracket(t)) { finishLiteral(); handleToken(t); } else if (iLiteralStart == 0) iLiteralStart = iTok; } iTok += 2; true; } @Override int precedence(S op) { if (eqOneOf(op, "*", "/")) ret 2; if (eqOneOf(op, "+", "-")) ret 1; ret 0; } bool isSpacer(S t) { ret emptyAfterTrim(t); } @Override bool isOperator(S t) { ret !isSpacer(t) && !startsWithLetterOrDigit(t) && !eq(t, "."); } void finishLiteral { if (iLiteralStart == 0) ret; S s = joinSubList(tok, iLiteralStart, iTok-1); if (!isSpacer(s)) handleToken(s); iLiteralStart = 0; } // returns list that can be processed with CalcRPN LS get() { run(); ret outputQueue; } }
Began life as a copy of #1032659
download show line numbers debug dex old transpilations
Travelled to 3 computer(s): bhatertpkbcr, ekrmjmnbrukm, mqqgnosmbjvj
No comments. add comment
| Snippet ID: | #1035190 |
| Snippet name: | ShuntingYardParser_v2 [parses things like "1+2*(3-4)"] - reimplementation over ShuntingYardCore |
| Eternal ID of this version: | #1035190/2 |
| Text MD5: | f75aff3ba56bd16906433835093791b2 |
| Transpilation MD5: | dd3d644bf3c61432a79fca72168f1c3d |
| Author: | stefan |
| Category: | javax |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2022-04-08 18:38:27 |
| Source code size: | 1269 bytes / 66 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 587 / 705 |
| Version history: | 1 change(s) |
| Referenced in: | [show references] |