Libraryless. Click here for Pure Java version (9353L/52K).
1 | sclass ShuntingYardParser_v2 > ShuntingYardCore is Steppable {
|
2 | // input |
3 | LS tok; |
4 | int iTok = 1; |
5 | |
6 | // transitional |
7 | int iLiteralStart; |
8 | |
9 | *() {}
|
10 | *(S s) { this(noTok(s)); }
|
11 | *(LS *tok) {}
|
12 | |
13 | run { stepAll(this); }
|
14 | |
15 | public bool step() {
|
16 | if (iTok >= l(tok)) {
|
17 | finishLiteral(); |
18 | handleEOT(); |
19 | false; |
20 | } |
21 | |
22 | S t = tok.get(iTok); |
23 | bool space = isSpacer(t); |
24 | |
25 | if (!space) {
|
26 | if (isOperatorOrBracket(t)) {
|
27 | finishLiteral(); |
28 | handleToken(t); |
29 | } else |
30 | if (iLiteralStart == 0) |
31 | iLiteralStart = iTok; |
32 | } |
33 | |
34 | iTok += 2; |
35 | true; |
36 | } |
37 | |
38 | @Override int precedence(S op) {
|
39 | if (eqOneOf(op, "*", "/")) ret 2; |
40 | if (eqOneOf(op, "+", "-")) ret 1; |
41 | ret 0; |
42 | } |
43 | |
44 | bool isSpacer(S t) {
|
45 | ret emptyAfterTrim(t); |
46 | } |
47 | |
48 | @Override bool isOperator(S t) {
|
49 | ret !isSpacer(t) |
50 | && !startsWithLetterOrDigit(t) && !eq(t, "."); |
51 | } |
52 | |
53 | void finishLiteral {
|
54 | if (iLiteralStart == 0) ret; |
55 | S s = joinSubList(tok, iLiteralStart, iTok-1); |
56 | if (!isSpacer(s)) |
57 | handleToken(s); |
58 | iLiteralStart = 0; |
59 | } |
60 | |
61 | // returns list that can be processed with CalcRPN |
62 | LS get() {
|
63 | run(); |
64 | ret outputQueue; |
65 | } |
66 | } |
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: | 589 / 707 |
| Version history: | 1 change(s) |
| Referenced in: | [show references] |