| 66 | } |
| 67 | |
| 68 | string |
| 69 | extractFirstToken(string &s, int (*fp)(int)) |
| 70 | { |
| 71 | int startTok{-1}, endTok{-1}, idx{0}; |
| 72 | |
| 73 | for (;; ++idx) { |
| 74 | if (idx == int(s.length())) { |
| 75 | if (endTok < 0) { |
| 76 | endTok = idx; |
| 77 | } |
| 78 | break; |
| 79 | } else if (fp(s[idx])) { |
| 80 | if ((startTok >= 0) and (endTok < 0)) { |
| 81 | endTok = idx; |
| 82 | } |
| 83 | } else if (endTok > 0) { |
| 84 | break; |
| 85 | } else if (startTok < 0) { |
| 86 | startTok = idx; |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | string tmp; |
| 91 | if (startTok >= 0) { |
| 92 | tmp = string(s, startTok, endTok - startTok); |
| 93 | } |
| 94 | |
| 95 | if (idx > 0) { |
| 96 | s = string(s, idx, s.length() - idx); |
| 97 | } |
| 98 | |
| 99 | return tmp; |
| 100 | } |
| 101 | |
| 102 | enum ParserState { |
| 103 | kParseStart, |
no test coverage detected