Libraryless. Click here for Pure Java version (2848L/18K).
srecord javaTok_vstack(S s) implements VStack.Computable<LS> { new ArrayList<S> tok; int l, i; int label; // where are we at in routine void goTo(int label) { this.label = label; } public void step(VStack stack, O subComputationResult) { switch (label) { case 0: l = s == null ? 0 : s.length(); case 1: if (i >= l) ret with goTo(2); int j = i; char c, d; // scan for whitespace while (j < l) { c = s.charAt(j); d = j+1 >= l ? '\0' : s.charAt(j+1); if (c == ' ' || c == '\t' || c == '\r' || c == '\n') ++j; else if (c == '/' && d == '*') { do ++j; while (j < l && !regionMatches(s, j, "*/")); j = Math.min(j+2, l); } else if (c == '/' && d == '/') { do ++j; while (j < l && "\r\n".indexOf(s.charAt(j)) < 0); } else break; } tok.add(javaTok_substringN(s, i, j)); i = j; if (i >= l) break; c = s.charAt(i); d = i+1 >= l ? '\0' : s.charAt(i+1); // scan for non-whitespace // Special JavaX syntax: 'identifier if (c == '\'' && Character.isJavaIdentifierStart(d) && i+2 < l && "'\\".indexOf(s.charAt(i+2)) < 0) { j += 2; while (j < l && Character.isJavaIdentifierPart(s.charAt(j))) ++j; } else if (c == '\'' || c == '"') { char opener = c; ++j; while (j < l) { int c2 = s.charAt(j); if (c2 == opener || c2 == '\n' && opener == '\'') { // allow multi-line strings, but not for ' ++j; break; } else if (c2 == '\\' && j+1 < l) j += 2; else ++j; } } else if (Character.isJavaIdentifierStart(c)) do ++j; while (j < l && (Character.isJavaIdentifierPart(s.charAt(j)) || s.charAt(j) == '\'')); // for stuff like "don't" else if (Character.isDigit(c)) { do ++j; while (j < l && Character.isDigit(s.charAt(j))); if (j < l && s.charAt(j) == 'L') ++j; // Long constants like 1L } else if (c == '[' && d == '[') { do ++j; while (j < l && !regionMatches(s, j, "]]")); j = Math.min(j+2, l); } else if (c == '[' && d == '=' && i+2 < l && s.charAt(i+2) == '[') { do ++j; while (j+2 < l && !regionMatches(s, j, "]=]")); j = Math.min(j+3, l); } else ++j; tok.add(javaTok_substringC(s, i, j)); i = j; ret with goTo(1); case 2: if ((tok.size() & 1) == 0) tok.add(""); stack._return(tok); } } }
Began life as a copy of #1000688
download show line numbers debug dex old transpilations
Travelled to 4 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, vouqrxazstgt
No comments. add comment
Snippet ID: | #1030392 |
Snippet name: | javaTok_vstack - javaTok for VStack [OK, only outer loop virtualized] |
Eternal ID of this version: | #1030392/8 |
Text MD5: | 3a23d597e756eb8d149fa4857b2a1f09 |
Transpilation MD5: | 9721255d062ff1f5a8a7742217d71f1f |
Author: | stefan |
Category: | javax / tokenizing |
Type: | JavaX fragment (include) |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2020-12-11 01:35:15 |
Source code size: | 2842 bytes / 83 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 208 / 453 |
Version history: | 7 change(s) |
Referenced in: | [show references] |