Improve scan
This commit is contained in:
389
src/parser3.h
389
src/parser3.h
@@ -16,120 +16,307 @@
|
|||||||
|
|
||||||
namespace parser3 {
|
namespace parser3 {
|
||||||
|
|
||||||
class NumDfa {
|
struct NumDfa {
|
||||||
constexpr static uint64_t num_dfa_table[256] = {
|
constexpr static uint64_t num_dfa_table[256] = {
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6d80db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6d86d80db6db6ull, 0xd8cdb6336db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb0a9edaa4927aaull, 0xdb0ab0daa492c2aull, 0xdb0ab0daa492c2aull,
|
0x0ull,
|
||||||
0xdb0ab0daa492c2aull, 0xdb0ab0daa492c2aull, 0xdb0ab0daa492c2aull,
|
0x0ull,
|
||||||
0xdb0ab0daa492c2aull, 0xdb0ab0daa492c2aull, 0xdb0ab0daa492c2aull,
|
0x0ull,
|
||||||
0xdb0ab0daa492c2aull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xd98db6636636db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xd98db6636636db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x36000ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x36600ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x12480000000000ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47b091ec00ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x780aa47aa91ea80ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0xc30c000000000ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull, 0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
0xdb6db6db6db6db6ull,
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0xc30c000000000ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
|
0x0ull,
|
||||||
};
|
};
|
||||||
uint8_t state = 36;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// Restore this dfa to its start state
|
// Restore this dfa to its start state
|
||||||
void reset() { state = 36; }
|
void reset() { state = 6; }
|
||||||
// Return true if this dfa is in an accept state. You probably want to call
|
// Return true if this dfa is in an accept state. You probably want to call
|
||||||
// scan until the match ends first.
|
// scan until the match ends first.
|
||||||
bool accept() const {
|
bool accept() const {
|
||||||
return (state & 63) == 18 || (state & 63) == 42 || (state & 63) == 48 ||
|
return (state & 63) == 30 || (state & 63) == 36 || (state & 63) == 48 ||
|
||||||
(state & 63) == 30;
|
(state & 63) == 42;
|
||||||
}
|
}
|
||||||
// return value either points to the first byte which does not match, or
|
// return value either points to the first byte which does not match, or
|
||||||
// bufEnd. Leaves the dfa in the last state of the match.
|
// bufEnd. Leaves the dfa in the last state of the match.
|
||||||
const char *scan(const char *buf, const char *bufEnd) {
|
const char *scan(const char *buf, const char *bufEnd) {
|
||||||
while (buf != bufEnd) {
|
auto state_ = state;
|
||||||
uint64_t row = num_dfa_table[uint8_t(*buf)];
|
for (;;) {
|
||||||
auto next = row >> (state & 63);
|
constexpr int kStride = 16;
|
||||||
if ((next & 63) == 54) {
|
if (bufEnd - buf < kStride) [[unlikely]] {
|
||||||
break;
|
while (buf != bufEnd) {
|
||||||
|
uint64_t row = num_dfa_table[uint8_t(*buf)];
|
||||||
|
auto next = row >> (state_ & 63);
|
||||||
|
if ((next & 63) == 0) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
state_ = next;
|
||||||
|
++buf;
|
||||||
|
}
|
||||||
|
state = state_;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < kStride; ++i) {
|
||||||
|
uint64_t row = num_dfa_table[uint8_t(*buf)];
|
||||||
|
auto next = row >> (state_ & 63);
|
||||||
|
if ((next & 63) == 0) {
|
||||||
|
state = state_;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
state_ = next;
|
||||||
|
++buf;
|
||||||
}
|
}
|
||||||
state = next;
|
|
||||||
++buf;
|
|
||||||
}
|
}
|
||||||
return buf;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
uint64_t state = 6;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef PRESERVE_NONE WeaselJsonStatus (*Continuation)(struct Parser3 *,
|
typedef PRESERVE_NONE WeaselJsonStatus (*Continuation)(struct Parser3 *,
|
||||||
|
|||||||
Reference in New Issue
Block a user