From 9d1756ad2b3586730d6b981739cb49837bf69210 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Mon, 17 Apr 2017 19:34:54 -0400 Subject: [PATCH] new handling for strings in lexer --- 4cpp/4cpp_lexer.h | 758 +++++++++++++++----------- 4cpp/4cpp_lexer_tables.c | 992 +++++++++++++++++++++++------------ 4cpp/4cpp_lexer_types.h | 134 ++--- 4ed_site.ctm | Bin 1428 -> 1444 bytes meta/fsm_table_generator.cpp | 774 +++++++++++++++++---------- 5 files changed, 1666 insertions(+), 992 deletions(-) diff --git a/4cpp/4cpp_lexer.h b/4cpp/4cpp_lexer.h index 07d28e3e..ba202d46 100644 --- a/4cpp/4cpp_lexer.h +++ b/4cpp/4cpp_lexer.h @@ -340,6 +340,8 @@ cpp__table_match(String_And_Flag *table, i32_4tech count, char *s, i32_4tech len return(result); } +#define LEXER_TB(n) ((n) & (sizeof(S.tb)-1)) + FCPP_LINK Cpp_Lex_Result cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech size, Cpp_Token_Array *token_array_out){ Cpp_Lex_Data S = *S_ptr; @@ -359,7 +361,11 @@ cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech s DfrCase(3); DfrCase(4); DfrCase(5); + DfrCase(6); DfrCase(7); + DfrCase(8); + DfrCase(9); + DfrCase(10); } for (;;){ @@ -401,11 +407,10 @@ cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech s for (; S.fsm.state < LS_count && S.pos < end_pos;){ c = chunk[S.pos++]; - S.tb[(S.tb_pos++) & (sizeof(S.tb)-1)] = c; + S.tb[LEXER_TB(S.tb_pos++)] = c; i32_4tech i = S.fsm.state + eq_classes[c]; S.fsm.state = fsm_table[i]; - S.fsm.multi_line |= multiline_state_table[S.fsm.state]; } S.fsm.emit_token = (S.fsm.state >= LS_count); } @@ -432,65 +437,68 @@ cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech s switch (S.fsm.state){ case LS_default: - switch (c){ - case 0: S.fsm.emit_token = 0; break; - + { + switch (c){ + case 0: S.fsm.emit_token = 0; break; + #define OperCase(op,t) case op: S.token.type = t; break; - OperCase('{', CPP_TOKEN_BRACE_OPEN); - OperCase('}', CPP_TOKEN_BRACE_CLOSE); - - OperCase('[', CPP_TOKEN_BRACKET_OPEN); - OperCase(']', CPP_TOKEN_BRACKET_CLOSE); - - OperCase('(', CPP_TOKEN_PARENTHESE_OPEN); - OperCase(')', CPP_TOKEN_PARENTHESE_CLOSE); - - OperCase('~', CPP_TOKEN_TILDE); - OperCase(',', CPP_TOKEN_COMMA); - OperCase(';', CPP_TOKEN_SEMICOLON); - OperCase('?', CPP_TOKEN_TERNARY_QMARK); - - OperCase('@', CPP_TOKEN_JUNK); + OperCase('{', CPP_TOKEN_BRACE_OPEN); + OperCase('}', CPP_TOKEN_BRACE_CLOSE); + + OperCase('[', CPP_TOKEN_BRACKET_OPEN); + OperCase(']', CPP_TOKEN_BRACKET_CLOSE); + + OperCase('(', CPP_TOKEN_PARENTHESE_OPEN); + OperCase(')', CPP_TOKEN_PARENTHESE_CLOSE); + + OperCase('~', CPP_TOKEN_TILDE); + OperCase(',', CPP_TOKEN_COMMA); + OperCase(';', CPP_TOKEN_SEMICOLON); + OperCase('?', CPP_TOKEN_TERNARY_QMARK); + + OperCase('@', CPP_TOKEN_JUNK); #undef OperCase - - case '\\': - if (S.pp_state == LSPP_default || S.pp_state == LSPP_no_strings){ - S.token.type = CPP_TOKEN_JUNK; - } - else{ - S.pos_overide = S.pos; - S.white_done = 0; - for (;;){ - for (; S.white_done == 0 && S.pos < end_pos;){ - c = chunk[S.pos++]; - if (!(c == ' ' || c == '\t' || c == '\r' || c == '\v' || c == '\f')){ - S.white_done = 1; + + case '\\': + if (S.pp_state == LSPP_default || S.pp_state == LSPP_no_strings){ + S.token.type = CPP_TOKEN_JUNK; + } + else{ + S.pos_overide = S.pos; + S.white_done = false; + for (;;){ + for (; !S.white_done && S.pos < end_pos;){ + c = chunk[S.pos++]; + if (!(c == ' ' || c == '\t' || c == '\r' || c == '\v' || c == '\f')){ + S.white_done = true; + } + } + + if (!S.white_done){ + S.chunk_pos += size; + token_array_out->count = token_i; + DfrYield(1, LexResult_NeedChunk); + } + else{ + break; } } - if (S.white_done == 0){ - S.chunk_pos += size; - token_array_out->count = token_i; - DfrYield(1, LexResult_NeedChunk); + if (c == '\n'){ + S.fsm.emit_token = 0; + S.pos_overide = 0; + } + else{ + S.token.type = CPP_TOKEN_JUNK; } - else break; - } - - if (c == '\n'){ - S.fsm.emit_token = 0; - S.pos_overide = 0; - } - else{ - S.token.type = CPP_TOKEN_JUNK; } + break; } - break; - } - - if (c != '@' && c != '\\'){ - S.token.flags = CPP_TFLAG_IS_OPERATOR; - } - break; + + if (c != '@' && c != '\\'){ + S.token.flags = CPP_TFLAG_IS_OPERATOR; + } + }break; case LS_identifier: { @@ -523,15 +531,16 @@ cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech s }break; case LS_pound: - S.token.flags = 0; - switch (c){ - case '#': S.token.type = CPP_PP_CONCAT; break; - default: - S.token.type = CPP_PP_STRINGIFY; - --S.pos; - break; - } - break; + { + S.token.flags = 0; + switch (c){ + case '#': S.token.type = CPP_PP_CONCAT; break; + default: + S.token.type = CPP_PP_STRINGIFY; + --S.pos; + break; + } + }break; case LS_pp: { @@ -572,307 +581,423 @@ cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech s case LS_number: case LS_number0: case LS_hex: - S.fsm.int_state = LSINT_default; - S.fsm.emit_token = 0; - --S.pos; - for (;;){ - for (; S.fsm.int_state < LSINT_count && S.pos < end_pos;){ - c = chunk[S.pos++]; - S.fsm.int_state = int_fsm_table[S.fsm.int_state + int_fsm_eq_classes[c]]; + { + S.fsm.state = LSINT_default; + S.fsm.emit_token = 0; + --S.pos; + for (;;){ + for (; S.fsm.state < LSINT_count && S.pos < end_pos;){ + c = chunk[S.pos++]; + S.fsm.state = int_fsm_table[S.fsm.state + int_fsm_eq_classes[c]]; + } + S.fsm.emit_token = (S.fsm.state >= LSINT_count); + + if (S.fsm.emit_token == 0){ + S.chunk_pos += size; + token_array_out->count = token_i; + DfrYield(5, LexResult_NeedChunk); + } + else{ + break; + } } - S.fsm.emit_token = (S.fsm.int_state >= LSINT_count); + --S.pos; - if (S.fsm.emit_token == 0){ - S.chunk_pos += size; - token_array_out->count = token_i; - DfrYield(5, LexResult_NeedChunk); - } - else break; - } - --S.pos; - - S.token.type = CPP_TOKEN_INTEGER_CONSTANT; - S.token.flags = 0; - break; + S.token.type = CPP_TOKEN_INTEGER_CONSTANT; + S.token.flags = 0; + }break; case LS_float: case LS_crazy_float0: case LS_crazy_float1: - S.token.type = CPP_TOKEN_FLOATING_CONSTANT; - S.token.flags = 0; - switch (c){ - case 'f': case 'F': - case 'l': case 'L':break; - default: - --S.pos; - break; - } - break; + { + S.token.type = CPP_TOKEN_FLOATING_CONSTANT; + S.token.flags = 0; + switch (c){ + case 'f': case 'F': case 'l': case 'L': break; + default: --S.pos; break; + } + }break; - case LS_char: - case LS_char_slashed: - S.token.type = CPP_TOKEN_JUNK; - if (c == '\''){ - S.token.type = CPP_TOKEN_CHARACTER_CONSTANT; - } - S.token.flags = 0; - break; + case LS_string_raw: + { + S.tb_pos = 0; + S.delim_length = 0; + + S.token.type = CPP_TOKEN_STRING_CONSTANT; + + S.fsm.state = LSSTR_default; + S.fsm.flags = 0; + for (;;){ + for (; S.fsm.state < LSSTR_count && S.pos < end_pos;){ + c = chunk[S.pos++]; + S.tb[LEXER_TB(S.tb_pos++)] = c; + S.fsm.state = raw_str_table[S.fsm.state + raw_str_eq_classes[c]]; + S.fsm.flags |= raw_str_flags[S.fsm.state]; + } + S.fsm.emit_token = (S.fsm.state >= LSSTR_count); + + if (S.fsm.emit_token == 0){ + S.chunk_pos += size; + token_array_out->count = token_i; + DfrYield(7, LexResult_NeedChunk); + } + else{ + u8_4tech emit_state = S.fsm.state - LSSTR_count; + switch (emit_state){ + case LSSTR_default: + { + S.token.type = CPP_TOKEN_JUNK; + goto doublebreak; + }break; + + case LSSTR_get_delim: + { + if (S.tb_pos <= 17){ + S.delim_length = S.tb_pos-1; + for (i32_4tech n = 0; n < S.delim_length; ++n){ + S.raw_delim[n] = S.tb[n]; + } + S.tb_pos = 0; + } + else{ + S.token.type = CPP_TOKEN_JUNK; + --S.pos; + goto doublebreak; + } + }break; + + case LSSTR_check_delim: + { + if (c == 0){ + goto doublebreak; + } + else if (S.tb_pos >= S.delim_length){ + u32_4tech m = S.tb_pos - S.delim_length - 2; + if (S.tb[LEXER_TB(m)] == ')'){ + b32_4tech is_match = true; + ++m; + for (i32_4tech n = 0; n < S.delim_length; ++n, ++m){ + if (S.tb[LEXER_TB(m)] != S.raw_delim[n]){ + is_match = false; + break; + } + } + + if (is_match){ + goto doublebreak; + } + } + } + }break; + } + S.fsm.state = LSSTR_get_delim; + } + } + doublebreak:; + + S.token.flags = (S.fsm.flags)?(CPP_TFLAG_MULTILINE):(0); + }break; - case LS_char_multiline: - S.token.type = CPP_TOKEN_JUNK; - if (c == '\''){ - S.token.type = CPP_TOKEN_CHARACTER_CONSTANT; - } - S.token.flags = CPP_TFLAG_MULTILINE; - break; + case LS_string_normal: + { + S.fsm.state = LSSTR_default; + S.fsm.flags = 0; + for (;;){ + for (; S.fsm.state < LSSTR_count && S.pos < end_pos;){ + c = chunk[S.pos++]; + S.fsm.state = normal_str_table[S.fsm.state + normal_str_eq_classes[c]]; + S.fsm.flags |= normal_str_flags[S.fsm.state]; + } + S.fsm.emit_token = (S.fsm.state >= LSSTR_count); + + if (S.fsm.emit_token == 0){ + S.chunk_pos += size; + token_array_out->count = token_i; + DfrYield(8, LexResult_NeedChunk); + } + else{ + break; + } + } + + S.token.type = CPP_TOKEN_STRING_CONSTANT; + S.token.flags = (S.fsm.flags)?(CPP_TFLAG_MULTILINE):(0); + + if (c == '\n'){ + --S.pos; + } + }break; - case LS_string: - case LS_string_slashed: - S.token.type = CPP_TOKEN_JUNK; - if (S.pp_state == LSPP_include){ - if (c == '>' || c == '"'){ + case LS_string_include: + { + S.fsm.state = LSSTR_default; + for (;;){ + for (; S.fsm.state < LSSTR_include_count && S.pos < end_pos;){ + c = chunk[S.pos++]; + S.fsm.state = include_str_table[S.fsm.state + include_str_eq_classes[c]]; + } + S.fsm.emit_token = (S.fsm.state >= LSSTR_include_count); + + if (S.fsm.emit_token == 0){ + S.chunk_pos += size; + token_array_out->count = token_i; + DfrYield(6, LexResult_NeedChunk); + } + else{ + break; + } + } + + S.fsm.state -= LSSTR_include_count; + + if (S.fsm.state == LSSTR_default){ S.token.type = CPP_PP_INCLUDE_FILE; } - } - else{ - if (c == '"'){ - S.token.type = CPP_TOKEN_STRING_CONSTANT; + else{ + S.token.type = CPP_TOKEN_JUNK; } - } - S.token.flags = 0; - break; + S.token.flags = 0; + + if (c == '\n'){ + --S.pos; + } + }break; - case LS_string_multiline: - S.token.type = CPP_TOKEN_JUNK; - if (c == '"'){ - S.token.type = CPP_TOKEN_STRING_CONSTANT; - } - S.token.flags = CPP_TFLAG_MULTILINE; - break; + case LS_char: + { + S.fsm.state = LSSTR_default; + S.fsm.flags = 0; + for (;;){ + for (; S.fsm.state < LSSTR_count && S.pos < end_pos;){ + c = chunk[S.pos++]; + S.fsm.state = normal_char_table[S.fsm.state + normal_char_eq_classes[c]]; + S.fsm.flags |= normal_char_flags[S.fsm.state]; + } + S.fsm.emit_token = (S.fsm.state >= LSSTR_count); + + if (S.fsm.emit_token == 0){ + S.chunk_pos += size; + token_array_out->count = token_i; + DfrYield(9, LexResult_NeedChunk); + } + else{ + break; + } + } + + S.token.type = CPP_TOKEN_CHARACTER_CONSTANT; + S.token.flags = (S.fsm.flags)?(CPP_TFLAG_MULTILINE):(0); + + if (c == '\n'){ + --S.pos; + } + }break; case LS_comment_pre: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_DIVEQ; break; - default: - S.token.type = CPP_TOKEN_DIV; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '=': S.token.type = CPP_TOKEN_DIVEQ; break; + default: + S.token.type = CPP_TOKEN_DIV; + --S.pos; + break; + } + }break; case LS_comment: case LS_comment_slashed: - S.token.type = CPP_TOKEN_COMMENT; - S.token.flags = 0; - --S.pos; - break; + { + S.token.type = CPP_TOKEN_COMMENT; + S.token.flags = 0; + --S.pos; + }break; case LS_comment_block: case LS_comment_block_ending: - S.token.type = CPP_TOKEN_COMMENT; - S.token.flags = 0; - break; + { + S.token.type = CPP_TOKEN_COMMENT; + S.token.flags = 0; + }break; case LS_error_message: - S.token.type = CPP_PP_ERROR_MESSAGE; - S.token.flags = 0; - --S.pos; - break; + { + S.token.type = CPP_PP_ERROR_MESSAGE; + S.token.flags = 0; + --S.pos; + }break; case LS_dot: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '*': S.token.type = CPP_TOKEN_PTRDOT; break; - default: - S.token.type = CPP_TOKEN_DOT; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '*': S.token.type = CPP_TOKEN_PTRDOT; break; + default: + S.token.type = CPP_TOKEN_DOT; + --S.pos; + break; + } + }break; case LS_ellipsis: - switch (c){ - case '.': - S.token.flags = CPP_TFLAG_IS_OPERATOR; - S.token.type = CPP_TOKEN_ELLIPSIS; - break; - - default: - S.token.type = CPP_TOKEN_JUNK; - --S.pos; - break; - } - break; + { + switch (c){ + case '.': + S.token.flags = CPP_TFLAG_IS_OPERATOR; + S.token.type = CPP_TOKEN_ELLIPSIS; + break; + + default: + S.token.type = CPP_TOKEN_JUNK; + --S.pos; + break; + } + }break; case LS_less: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_LESSEQ; break; - default: - S.token.type = CPP_TOKEN_LESS; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '=': S.token.type = CPP_TOKEN_LESSEQ; break; + default: + S.token.type = CPP_TOKEN_LESS; + --S.pos; + break; + } + }break; case LS_less_less: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_LSHIFTEQ; break; - default: - S.token.type = CPP_TOKEN_LSHIFT; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '=': S.token.type = CPP_TOKEN_LSHIFTEQ; break; + default: + S.token.type = CPP_TOKEN_LSHIFT; + --S.pos; + break; + } + }break; case LS_more: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_GRTREQ; break; - default: - S.token.type = CPP_TOKEN_GRTR; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '=': S.token.type = CPP_TOKEN_GRTREQ; break; + default: + S.token.type = CPP_TOKEN_GRTR; + --S.pos; + break; + } + }break; case LS_more_more: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_RSHIFTEQ; break; - default: - S.token.type = CPP_TOKEN_RSHIFT; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '=': S.token.type = CPP_TOKEN_RSHIFTEQ; break; + default: + S.token.type = CPP_TOKEN_RSHIFT; + --S.pos; + break; + } + }break; case LS_minus: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '-': S.token.type = CPP_TOKEN_DECREMENT; break; - case '=': S.token.type = CPP_TOKEN_SUBEQ; break; - default: - S.token.type = CPP_TOKEN_MINUS; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '-': S.token.type = CPP_TOKEN_DECREMENT; break; + case '=': S.token.type = CPP_TOKEN_SUBEQ; break; + default: + S.token.type = CPP_TOKEN_MINUS; + --S.pos; + break; + } + }break; case LS_arrow: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '*': S.token.type = CPP_TOKEN_PTRARROW; break; - default: - S.token.type = CPP_TOKEN_ARROW; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '*': S.token.type = CPP_TOKEN_PTRARROW; break; + default: + S.token.type = CPP_TOKEN_ARROW; + --S.pos; + break; + } + }break; case LS_and: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '&': S.token.type = CPP_TOKEN_AND; break; - case '=': S.token.type = CPP_TOKEN_ANDEQ; break; - default: - S.token.type = CPP_TOKEN_AMPERSAND; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '&': S.token.type = CPP_TOKEN_AND; break; + case '=': S.token.type = CPP_TOKEN_ANDEQ; break; + default: + S.token.type = CPP_TOKEN_AMPERSAND; + --S.pos; + break; + } + }break; case LS_or: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '|': S.token.type = CPP_TOKEN_OR; break; - case '=': S.token.type = CPP_TOKEN_OREQ; break; - default: - S.token.type = CPP_TOKEN_BIT_OR; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '|': S.token.type = CPP_TOKEN_OR; break; + case '=': S.token.type = CPP_TOKEN_OREQ; break; + default: + S.token.type = CPP_TOKEN_BIT_OR; + --S.pos; + break; + } + }break; case LS_plus: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '+': S.token.type = CPP_TOKEN_INCREMENT; break; - case '=': S.token.type = CPP_TOKEN_ADDEQ; break; - default: - S.token.type = CPP_TOKEN_PLUS; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case '+': S.token.type = CPP_TOKEN_INCREMENT; break; + case '=': S.token.type = CPP_TOKEN_ADDEQ; break; + default: + S.token.type = CPP_TOKEN_PLUS; + --S.pos; + break; + } + }break; case LS_colon: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case ':': S.token.type = CPP_TOKEN_SCOPE; break; - default: - S.token.type = CPP_TOKEN_COLON; - --S.pos; - break; - } - break; + { + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (c){ + case ':': S.token.type = CPP_TOKEN_SCOPE; break; + default: + S.token.type = CPP_TOKEN_COLON; + --S.pos; + break; + } + }break; - case LS_star: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_MULEQ; break; - default: - S.token.type = CPP_TOKEN_STAR; - --S.pos; - break; - } - break; - - case LS_modulo: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_MODEQ; break; - default: - S.token.type = CPP_TOKEN_MOD; - --S.pos; - break; - } - break; - - case LS_caret: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_XOREQ; break; - default: - S.token.type = CPP_TOKEN_BIT_XOR; - --S.pos; - break; - } - break; - - case LS_eq: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_EQEQ; break; - default: - S.token.type = CPP_TOKEN_EQ; - --S.pos; - break; - } - break; - - case LS_bang: - S.token.flags = CPP_TFLAG_IS_OPERATOR; - switch (c){ - case '=': S.token.type = CPP_TOKEN_NOTEQ; break; - default: - S.token.type = CPP_TOKEN_NOT; - --S.pos; - break; - } - break; + case LS_single_op: + { + u32_4tech plain_version = 0; + u32_4tech eq_version = 0; + S.token.flags = CPP_TFLAG_IS_OPERATOR; + switch (S.tb[0]){ + case '*': plain_version = CPP_TOKEN_STAR; eq_version = CPP_TOKEN_MULEQ; break; + case '%': plain_version = CPP_TOKEN_MOD; eq_version = CPP_TOKEN_MODEQ; break; + case '^': plain_version = CPP_TOKEN_BIT_XOR; eq_version = CPP_TOKEN_XOREQ; break; + case '=': plain_version = CPP_TOKEN_EQ; eq_version = CPP_TOKEN_EQEQ; break; + case '!': plain_version = CPP_TOKEN_NOT; eq_version = CPP_TOKEN_NOTEQ; break; + } + + S.token.type = eq_version; + if (c != '='){ + S.token.type = plain_version; + --S.pos; + } + }break; } if (S.pos > S.chunk_pos && chunk[S.pos-1] == 0){ @@ -940,7 +1065,7 @@ cpp_lex_nonalloc_null_end_no_limit(Cpp_Lex_Data *S_ptr, char *chunk, i32_4tech s if (S.pos == end_pos){ S.chunk_pos += size; token_array_out->count = token_i; - DfrYield(7, LexResult_NeedChunk); + DfrYield(10, LexResult_NeedChunk); } token_array_out->count = token_i; DfrYield(2, LexResult_NeedTokenMemory); @@ -1182,6 +1307,7 @@ The start and end points are based on the edited region of the file before the e if (end_pos > array->tokens[range.end_token_index].start){ ++range.end_token_index; } + ++range.end_token_index; if (range.end_token_index < 0){ range.end_token_index = 0; } diff --git a/4cpp/4cpp_lexer_tables.c b/4cpp/4cpp_lexer_tables.c index 6270c54d..0622154b 100644 --- a/4cpp/4cpp_lexer_tables.c +++ b/4cpp/4cpp_lexer_tables.c @@ -1,400 +1,710 @@ -uint16_t whitespace_fsm_eq_classes[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0,10,20,10,10,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +u16_4tech whitespace_fsm_eq_classes[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 20, 10, 10, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -const int32_t num_whitespace_fsm_eq_classes = 3; +const i32_4tech num_whitespace_fsm_eq_classes = 3; -uint8_t whitespace_fsm_table[] = { -10,11,12,13,14,15,16,17,18,19, - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +u8_4tech whitespace_fsm_table[] = { + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -uint16_t int_fsm_eq_classes[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,24, 0, 0, 0, 0, 0, 0, 0, 0,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +u16_4tech int_fsm_eq_classes[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; -const int32_t num_int_fsm_eq_classes = 4; +const i32_4tech num_int_fsm_eq_classes = 4; -uint8_t int_fsm_table[] = { - 8, 9,10,11,12,13,14,15, - 3, 5,10, 6,12, 7,14,15, - 1, 9, 7, 7,12,13, 7,15, - 2, 4, 6,11, 7,13,14,15, +u8_4tech int_fsm_table[] = { + 8, 9, 10, 11, 12, 13, 14, 15, + 3, 5, 10, 6, 12, 7, 14, 15, + 1, 9, 7, 7, 12, 13, 7, 15, + 2, 4, 6, 11, 7, 13, 14, 15, }; -uint8_t multiline_state_table[] = { - 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +u16_4tech raw_str_eq_classes[] = { + 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 9, 3, 0, 3, 3, 3, 3, 3, 12, 9, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 9, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, }; -uint16_t main_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +const i32_4tech num_raw_str_eq_classes = 5; + +u8_4tech raw_str_table[] = { + 0, 6, 6, + 0, 1, 2, + 3, 2, 2, + 3, 1, 2, + 4, 1, 2, }; -const int32_t num_main_fsm_eq_classes = 31; - -uint8_t main_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 3,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech raw_str_flags[] = { +0x00,0x00,0x01, }; -uint16_t pp_include_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +u16_4tech normal_str_eq_classes[] = { + 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, }; -const int32_t num_pp_include_fsm_eq_classes = 31; +const i32_4tech num_normal_str_eq_classes = 5; -uint8_t pp_include_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech normal_str_table[] = { + 4, 0, 4, + 0, 0, 2, + 4, 2, 4, + 3, 0, 5, + 1, 0, 1, }; -uint16_t pp_macro_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +u8_4tech normal_str_flags[] = { +0x00,0x00,0x01, }; -const int32_t num_pp_macro_fsm_eq_classes = 31; - -uint8_t pp_macro_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u16_4tech include_str_eq_classes[] = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, }; -uint16_t pp_identifier_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +const i32_4tech num_include_str_eq_classes = 3; + +u8_4tech include_str_table[] = { + 2, + 0, + 1, }; -const int32_t num_pp_identifier_fsm_eq_classes = 31; - -uint8_t pp_identifier_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u16_4tech normal_char_eq_classes[] = { + 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 9, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 12, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, }; -uint16_t pp_body_if_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +const i32_4tech num_normal_char_eq_classes = 5; + +u8_4tech normal_char_table[] = { + 4, 0, 4, + 0, 0, 2, + 4, 2, 4, + 3, 0, 5, + 1, 0, 1, }; -const int32_t num_pp_body_if_fsm_eq_classes = 31; - -uint8_t pp_body_if_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech normal_char_flags[] = { +0x00,0x00,0x01, }; -uint16_t pp_body_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +u16_4tech main_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, }; -const int32_t num_pp_body_fsm_eq_classes = 31; +const i32_4tech num_main_fsm_eq_classes = 32; -uint8_t pp_body_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech main_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 3, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, }; -uint16_t pp_number_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +u16_4tech pp_include_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, }; -const int32_t num_pp_number_fsm_eq_classes = 31; +const i32_4tech num_pp_include_fsm_eq_classes = 32; -uint8_t pp_number_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech pp_include_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 40, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, }; -uint16_t pp_error_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40, +u16_4tech pp_macro_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, }; -const int32_t num_pp_error_fsm_eq_classes = 3; +const i32_4tech num_pp_macro_fsm_eq_classes = 32; -uint8_t pp_error_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, -39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39, -79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79, +u8_4tech pp_macro_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, }; -uint16_t pp_junk_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,440,480,480,520,560,480,600,640,680,720,760,760,760,760,760,760,760,760,760,800,480,840,880,920,480,480,960,960,960,960,960,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,480,1040,480,1080,320,40,960,960,960,960,1120,960,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1160,1000,1000,480,1200,480,480,40,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960,960, +u16_4tech pp_identifier_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, }; -const int32_t num_pp_junk_fsm_eq_classes = 31; +const i32_4tech num_pp_identifier_fsm_eq_classes = 32; -uint8_t pp_junk_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,45,46, 6,48,49, 9,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 7, 8, 9,10,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 8,41,42,43,44, 5, 6, 5,48,49, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 2,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 5,41,42,43,44,45,46, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44, 5, 6, 5, 8, 9, 8,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44, 5, 6, 5, 8, 9, 8,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44, 7, 7, 5,10,10, 8,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4, 5, 6, 5, 8, 9, 8,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44, 5, 6, 5, 8, 9, 8,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech pp_identifier_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, }; -uint16_t no_string_fsm_eq_classes[] = { - 0,40,40,40,40,40,40,40,40,40,80,120,120,120,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,160,200,240,280,320,360,400,240,440,440,480,520,440,560,600,640,680,720,720,720,720,720,720,720,720,720,760,440,800,840,880,440,440,920,920,920,920,920,920,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,440,960,440,1000,320,40,920,920,920,920,1040,920,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,1080,240,240,440,1120,440,440,40,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920, +u16_4tech pp_body_if_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, }; -const int32_t num_no_string_fsm_eq_classes = 29; +const i32_4tech num_pp_body_if_fsm_eq_classes = 32; -uint8_t no_string_fsm_table[] = { -40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 0,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,58,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,19,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 0,41,42, 3,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -38,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 3,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -35,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -30,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -34,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,20,18,18,21,21,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -32,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -28,41,42,43,44,48,48,48,48,48,48,51,52,53,15,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -22,41,42,43,44,48,48,48,48,48,48,13,13,53,54,55,56,57,18,18,20,20,23,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -17,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,18,18,18,20,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -12, 1,42,43,44,48,48,48,48,48,48,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -11, 1,42,43,44,48,48,48,48,48,48,11,11,13,15,15,16,57,18,18,20,20,13,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -33,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -24,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,25,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -37,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -26,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,27,67,29,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4,48,48,48,48,48,48,51,52,53,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -40,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,19,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -36,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4,48,48,48,48,48,48,51,52,14,54,55,16,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, - 1, 1,42, 4, 4,48,48,48,48,48,48,51,16,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, -31,41,42,43,44,48,48,48,48,48,48,51,52,53,54,55,56,57,18,18,20,20,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,39, +u8_4tech pp_body_if_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, +}; + +u16_4tech pp_body_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +}; + +const i32_4tech num_pp_body_fsm_eq_classes = 32; + +u8_4tech pp_body_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, +}; + +u16_4tech pp_number_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +}; + +const i32_4tech num_pp_number_fsm_eq_classes = 32; + +u8_4tech pp_number_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, +}; + +u16_4tech pp_error_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +}; + +const i32_4tech num_pp_error_fsm_eq_classes = 3; + +u8_4tech pp_error_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, +}; + +u16_4tech pp_junk_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,330,363,363,396,429,363,462,495,528, +561,594,594,594,594,594,594,594,627,594,660,363,693,165,726,363, +363,759,759,759,759,759,759,792,792,792,792,792,825,792,792,792, +792,792,858,792,792,825,792,792,792,792,792,363,891,363,165,264, + 33,759,759,759,759,924,759,792,792,792,792,792,792,792,792,792, +792,792,792,792,792,957,792,792,990,792,792,363,1023,363,363, 33, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759, +}; + +const i32_4tech num_pp_junk_fsm_eq_classes = 32; + +u8_4tech pp_junk_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 39, 34, 35, 36, 37, 38, 39, 39, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 2, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 67, 34, 35, 36, 37, 34, 67, 67, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 34, 34, 34, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 1, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 1, 1, 6, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 1, 5, 5, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 1, 1, 1, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 1, 1, 1, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 34, 34, 34, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, +}; + +u16_4tech no_string_fsm_eq_classes[] = { + 0, 33, 33, 33, 33, 33, 33, 33, 33, 33, 66, 99, 99, 99, 33, 33, + 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, +132,165,198,231,264,165,297,198,330,330,363,396,330,429,462,495, +528,561,561,561,561,561,561,561,561,561,594,330,627,165,660,330, +330,693,693,693,693,693,693,198,198,198,198,198,726,198,198,198, +198,198,759,198,198,726,198,198,198,198,198,330,792,330,165,264, + 33,693,693,693,693,825,693,198,198,198,198,198,198,198,198,198, +198,198,198,198,198,858,198,198,891,198,198,330,924,330,330, 33, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693, +}; + +const i32_4tech num_no_string_fsm_eq_classes = 29; + +u8_4tech no_string_fsm_table[] = { + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 0, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 48, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 16, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 0, 34, 35, 3, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 3, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 27, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 31, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 17, 15, 15, 18, 18, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 29, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 25, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 12, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 19, 34, 35, 36, 37, 66, 66, 66, 10, 10, 43, 44, 45, 46, 47, 15, 15, 17, 17, 20, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 14, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 15, 15, 15, 17, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 9, 1, 35, 36, 37, 66, 66, 66, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 8, 1, 35, 36, 37, 66, 66, 66, 8, 8, 10, 12, 12, 13, 47, 15, 15, 17, 17, 10, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 30, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 21, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 22, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 23, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 24, 57, 26, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 66, 66, 66, 41, 42, 43, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 6, 1, 35, 4, 4, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 5, 1, 35, 4, 4, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 33, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 16, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 66, 66, 66, 41, 42, 11, 44, 45, 13, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 7, 1, 35, 4, 4, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 1, 1, 35, 4, 4, 66, 66, 66, 41, 13, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, + 28, 34, 35, 36, 37, 66, 66, 66, 41, 42, 43, 44, 45, 46, 47, 15, 15, 17, 17, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 32, }; uint16_t * get_eq_classes[] = { diff --git a/4cpp/4cpp_lexer_types.h b/4cpp/4cpp_lexer_types.h index 80ffbeaf..2c47557f 100644 --- a/4cpp/4cpp_lexer_types.h +++ b/4cpp/4cpp_lexer_types.h @@ -75,32 +75,25 @@ ENUM(uint32_t, Cpp_Token_Type){ CPP_TOKEN_SEMICOLON = 46, CPP_TOKEN_ELLIPSIS = 47, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_STAR = 48, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_AMPERSAND = 49, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_TILDE = 50, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_PLUS = 51, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_MINUS = 52, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_INCREMENT = 53, - /* DOC(This is an 'ambiguous' token type because it requires - parsing to determine the full nature of the token.) */ + /* DOC(This is an 'ambiguous' token type because it requires parsing to determine the full nature of the token.) */ CPP_TOKEN_DECREMENT = 54, // NOTE(allen): Precedence 1, LtoR @@ -309,9 +302,8 @@ STRUCT Cpp_Relex_Range{ struct Cpp_Lex_FSM{ uint8_t state; - uint8_t int_state; uint8_t emit_token; - uint8_t multi_line; + uint8_t flags; }; static Cpp_Lex_FSM null_lex_fsm = {0}; @@ -322,23 +314,29 @@ DOC_SEE(cpp_lex_data_init) HIDE_MEMBERS() */ STRUCT Cpp_Lex_Data{ char tb[32]; - int32_t tb_pos; - int32_t token_start; + i32_4tech tb_pos; + i32_4tech token_start; - int32_t pos; - int32_t pos_overide; - int32_t chunk_pos; + i32_4tech pos; + i32_4tech pos_overide; + i32_4tech chunk_pos; Cpp_Lex_FSM fsm; - uint8_t white_done; - uint8_t pp_state; - uint8_t completed; + u8_4tech white_done; + u8_4tech pp_state; + u8_4tech completed; Cpp_Token token; - int32_t ignore_string_delims; + char raw_delim[16]; + i32_4tech delim_length; - int32_t __pc__; + b8_4tech str_raw; + b8_4tech str_include; + + i32_4tech ignore_string_delims; + + i32_4tech __pc__; }; /* DOC(Cpp_Lex_Result is returned from the lexing engine to indicate why it stopped lexing.) */ @@ -395,45 +393,44 @@ ENUM_INTERNAL(uint8_t, Cpp_Lex_State){ LS_pound = 2, LS_pp = 3, LS_ppdef = 4, - LS_char = 5, - LS_char_multiline = 6, - LS_char_slashed = 7, - LS_string = 8, - LS_string_multiline = 9, - LS_string_slashed = 10, - LS_number = 11, - LS_number0 = 12, - LS_float = 13, - LS_crazy_float0 = 14, - LS_crazy_float1 = 15, - LS_hex = 16, - LS_comment_pre = 17, - LS_comment = 18, - LS_comment_slashed = 19, - LS_comment_block = 20, - LS_comment_block_ending = 21, - LS_dot = 22, - LS_ellipsis = 23, - LS_less = 24, - LS_less_less = 25, - LS_more = 26, - LS_more_more = 27, - LS_minus = 28, - LS_arrow = 29, - LS_and = 30, - LS_or = 31, - LS_plus = 32, - LS_colon = 33, - LS_star = 34, - LS_modulo = 35, - LS_caret = 36, - LS_eq = 37, - LS_bang = 38, - LS_error_message = 39, + LS_string_R = 5, + LS_string_LUu8 = 6, + LS_string_u = 7, + LS_number = 8, + LS_number0 = 9, + LS_float = 10, + LS_crazy_float0 = 11, + LS_crazy_float1 = 12, + LS_hex = 13, + LS_comment_pre = 14, + LS_comment = 15, + LS_comment_slashed = 16, + LS_comment_block = 17, + LS_comment_block_ending = 18, + LS_dot = 19, + LS_ellipsis = 20, + LS_less = 21, + LS_less_less = 22, + LS_more = 23, + LS_more_more = 24, + LS_minus = 25, + LS_arrow = 26, + LS_and = 27, + LS_or = 28, + LS_plus = 29, + LS_colon = 30, + LS_single_op = 31, + LS_error_message = 32, // - LS_count = 40 + LS_count = 33, + LS_char = 34, }; +// NOTE(allen): These provide names that match the overloaded meanings of string states. +#define LS_string_raw LS_string_R +#define LS_string_normal LS_string_LUu8 +#define LS_string_include LS_string_u + ENUM_INTERNAL(uint8_t, Cpp_Lex_Int_State){ LSINT_default, LSINT_u, @@ -447,6 +444,19 @@ ENUM_INTERNAL(uint8_t, Cpp_Lex_Int_State){ LSINT_count }; +ENUM_INTERNAL(uint8_t, Cpp_Lex_Str_State){ + LSSTR_default, + LSSTR_escape, + LSSTR_multiline, + // + LSSTR_count +}; + +#define LSSTR_include_count 1 +#define LSSTR_error LSSTR_escape +#define LSSTR_get_delim LSSTR_escape +#define LSSTR_check_delim LSSTR_count + ENUM_INTERNAL(uint8_t, Cpp_Lex_PP_State){ LSPP_default, LSPP_include, diff --git a/4ed_site.ctm b/4ed_site.ctm index 1462a540b5918a0ce0780d3533b76c4e862ddb7e..7ff96cd42d69fd4289355863258551ca5be4e52e 100644 GIT binary patch delta 24 gcmbQjy@Y$i6jp&F4mS>L*?x(UnSp^}6E_0`0C_bCLI3~& delta 7 OcmZ3&J%xM26jlHW5(1b2 diff --git a/meta/fsm_table_generator.cpp b/meta/fsm_table_generator.cpp index 9b1f54ec..528b8114 100644 --- a/meta/fsm_table_generator.cpp +++ b/meta/fsm_table_generator.cpp @@ -7,13 +7,42 @@ // TOP +// 4tech_standard_preamble.h +#if !defined(FTECH_INTEGERS) +#define FTECH_INTEGERS +#include +typedef int8_t i8_4tech; +typedef int16_t i16_4tech; +typedef int32_t i32_4tech; +typedef int64_t i64_4tech; + +typedef uint8_t u8_4tech; +typedef uint16_t u16_4tech; +typedef uint32_t u32_4tech; +typedef uint64_t u64_4tech; + +typedef float f32_4tech; +typedef double f64_4tech; + +typedef int8_t b8_4tech; +typedef int32_t b32_4tech; +#endif + +#if !defined(Assert) +# define Assert(n) do{ if (!(n)) *(int*)0 = 0xA11E; }while(0) +#endif + +#if !defined(API_EXPORT) +# define API_EXPORT +#endif +// standard preamble end + +#include #include #include -#include typedef int32_t bool32; -#define Assert(n) do{ if (!(n)) { *(int*)0 = 0xA11E; } }while(0) #define ArrayCount(a) (sizeof(a)/sizeof(*a)) #define LEXER_TABLE_FILE "4cpp/4cpp_lexer_tables.c" @@ -37,86 +66,247 @@ whitespace_skip_fsm(Whitespace_FSM wfsm, char c){ return(wfsm); } -Cpp_Lex_FSM -int_fsm(Cpp_Lex_FSM fsm, char c){ - switch (fsm.int_state){ +#define FSM_SIG(n) Cpp_Lex_FSM n(Cpp_Lex_FSM fsm, char c, b32_4tech get_flags) +typedef FSM_SIG(FSM_Function); + +FSM_SIG(int_fsm){ + switch (fsm.state){ case LSINT_default: - switch (c){ - case 'u': case 'U': fsm.int_state = LSINT_u; break; - case 'l': fsm.int_state = LSINT_l; break; - case 'L': fsm.int_state = LSINT_L; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'u': case 'U': fsm.state = LSINT_u; break; + case 'l': fsm.state = LSINT_l; break; + case 'L': fsm.state = LSINT_L; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_u: - switch (c){ - case 'l': fsm.int_state = LSINT_ul; break; - case 'L': fsm.int_state = LSINT_uL; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'l': fsm.state = LSINT_ul; break; + case 'L': fsm.state = LSINT_uL; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_l: - switch (c){ - case 'l': fsm.int_state = LSINT_ll; break; - case 'U': case 'u': fsm.int_state = LSINT_extra; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'l': fsm.state = LSINT_ll; break; + case 'U': case 'u': fsm.state = LSINT_extra; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_L: - switch (c){ - case 'L': fsm.int_state = LSINT_ll; break; - case 'U': case 'u': fsm.int_state = LSINT_extra; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'L': fsm.state = LSINT_ll; break; + case 'U': case 'u': fsm.state = LSINT_extra; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_ul: - switch (c){ - case 'l': fsm.int_state = LSINT_extra; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'l': fsm.state = LSINT_extra; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_uL: - switch (c){ - case 'L': fsm.int_state = LSINT_extra; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'L': fsm.state = LSINT_extra; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_ll: - switch (c){ - case 'u': case 'U': fsm.int_state = LSINT_extra; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case 'u': case 'U': fsm.state = LSINT_extra; break; + default: fsm.emit_token = true; break; + } + }break; case LSINT_extra: - fsm.emit_token = 1; + fsm.emit_token = true; break; } return(fsm); } +FSM_SIG(normal_str_fsm){ + + if (!get_flags){ + switch (fsm.state){ + case LSSTR_default: + case LSSTR_multiline: + { + switch (c){ + case '\n': case 0: fsm.state = LSSTR_error; fsm.emit_token = true; break; + case '\\': fsm.state = LSSTR_escape; break; + case '"': fsm.emit_token = true; break; + default: break; + } + }break; + + case LSSTR_escape: + { + switch (c){ + case '\n': fsm.state = LSSTR_multiline; break; + default: fsm.state = LSSTR_default; break; + } + }break; + } + } + else{ + switch (fsm.state){ + case LSSTR_multiline: + { + fsm.flags = 1; + }break; + } + } + + return(fsm); +} + +FSM_SIG(normal_char_fsm){ + + if (!get_flags){ + switch (fsm.state){ + case LSSTR_default: + case LSSTR_multiline: + { + switch (c){ + case '\n': case 0: fsm.state = LSSTR_error; fsm.emit_token = true; break; + case '\\': fsm.state = LSSTR_escape; break; + case '\'': fsm.emit_token = true; break; + default: break; + } + }break; + + case LSSTR_escape: + { + switch (c){ + case '\n': fsm.state = LSSTR_multiline; break; + default: fsm.state = LSSTR_default; break; + } + }break; + } + } + else{ + switch (fsm.state){ + case LSSTR_multiline: + { + fsm.flags = 1; + }break; + } + } + + return(fsm); +} + +FSM_SIG(raw_str_fsm){ + + if (!get_flags){ + switch (fsm.state){ + case LSSTR_default: + { + switch (c){ + case ')': case '\\': case ' ': case '\n': fsm.emit_token = true; break; + case '(': fsm.state = LSSTR_get_delim; fsm.emit_token = true; break; + default: break; + } + }break; + + case LSSTR_get_delim: + case LSSTR_multiline: + { + switch (c){ + case '\n': fsm.state = LSSTR_multiline; break; + case 0: case '"': fsm.state = LSSTR_check_delim; fsm.emit_token = true; break; + default: break; + } + }break; + } + } + else{ + switch (fsm.state){ + case LSSTR_multiline: + { + fsm.flags = 1; + }break; + } + } + + return(fsm); +} + +FSM_SIG(include_str_fsm){ + switch (fsm.state){ + case LSSTR_default: + { + switch (c){ + case '\n': case 0: fsm.state = LSSTR_error; fsm.emit_token = true; break; + case '>': fsm.emit_token = true; break; + default: break; + } + }break; + } + return(fsm); +} + +b32_4tech +is_identifier_char(u8_4tech c, b32_4tech ignore_string_delims){ + b32_4tech result = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c >= 128 || (ignore_string_delims && (c == '\'' || c == '"')); + return(result); +} + +b32_4tech +is_identifier_char_restricted(u8_4tech c, b32_4tech ignore_string_delims){ + b32_4tech result = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c >= 128 || (ignore_string_delims && (c == '\'' || c == '"')); + return(result); +} + +b32_4tech +is_identifier_char_non_numeric(u8_4tech c, b32_4tech ignore_string_delims){ + b32_4tech result = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c >= 128 || (ignore_string_delims && (c == '\'' || c == '"')); + return(result); +} + Cpp_Lex_FSM main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_delims){ if (c == 0){ - fsm.emit_token = 1; + fsm.emit_token = true; } else{ switch (pp_state){ case LSPP_error: - fsm.state = LS_error_message; - if (c == '\n') fsm.emit_token = 1; - break; + { + fsm.state = LS_error_message; + if (c == '\n'){ + fsm.emit_token = true; + } + }break; default: switch (fsm.state){ case LS_default: - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c >= 128){ + if (c == 'R'){ + fsm.state = LS_string_R; + } + else if (c == 'U' || c == 'L'){ + fsm.state = LS_string_LUu8; + } + else if (c == 'u'){ + fsm.state = LS_string_u; + } + else if (is_identifier_char_non_numeric(c, ignore_string_delims)){ fsm.state = LS_identifier; } else if (c >= '1' && c <= '9'){ @@ -134,6 +324,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli } else{ fsm.state = LS_char; + fsm.emit_token = true; } }break; @@ -143,7 +334,8 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli fsm.state = LS_identifier; } else{ - fsm.state = LS_string; + fsm.state = LS_string_normal; + fsm.emit_token = true; } }break; @@ -153,7 +345,8 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli case '<': if (pp_state == LSPP_include && !ignore_string_delims){ - fsm.state = LS_string; + fsm.state = LS_string_include; + fsm.emit_token = true; } else{ fsm.state = LS_less; @@ -171,13 +364,8 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli case ':': fsm.state = LS_colon; break; - case '*': fsm.state = LS_star; break; - - case '%': fsm.state = LS_modulo; break; - case '^': fsm.state = LS_caret; break; - - case '=': fsm.state = LS_eq; break; - case '!': fsm.state = LS_bang; break; + case '*': case '%': case '^': case '=': + case '!': fsm.state = LS_single_op; break; case '#': if (pp_state == LSPP_default){ @@ -188,7 +376,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli } break; -#define OperCase(op,type) case op: fsm.emit_token = 1; break; +#define OperCase(op,type) case op: fsm.emit_token = true; break; OperCase('{', CPP_TOKEN_BRACE_OPEN); OperCase('}', CPP_TOKEN_BRACE_CLOSE); @@ -212,17 +400,16 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli case LS_identifier: { - int is_ident = (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_' || c == '$' || c >= 128 || (ignore_string_delims && (c == '\'' || c == '"')); - + b32_4tech is_ident = is_identifier_char(c, ignore_string_delims); if (!is_ident){ - fsm.emit_token = 1; + fsm.emit_token = true; } } break; case LS_pound: { - fsm.emit_token = 1; + fsm.emit_token = true; }break; case LS_pp: @@ -230,82 +417,86 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli if (c == ' ' || c == '\r' || c == '\v' || c == '\f'){ // NOTE(allen): do nothing } - else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c >= 128 || (ignore_string_delims && (c == '\'' || c == '"'))){ + else if (is_identifier_char_restricted(c, ignore_string_delims)){ fsm.state = LS_ppdef; } else{ - fsm.emit_token = 1; + fsm.emit_token = true; } }break; case LS_ppdef: { - int is_ident = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c >= 128 || (ignore_string_delims && (c == '\'' || c == '"')); + int is_ident = is_identifier_char_restricted(c, ignore_string_delims); if (!is_ident){ - fsm.emit_token = 1; + fsm.emit_token = true; } }break; - case LS_char: case LS_char_multiline: + case LS_string_R: { if (ignore_string_delims){ - fsm.state = LS_string; - fsm.emit_token = 1; - } - else{ - switch(c){ - case '\n': case '\'': fsm.emit_token = 1; break; - case '\\': fsm.state = LS_char_slashed; break; - } - } - }break; - - case LS_char_slashed: - { - if (ignore_string_delims){ - fsm.state = LS_string; - fsm.emit_token = 1; + fsm.state = LS_count; + fsm.emit_token = true; } else{ switch (c){ - case '\r': case '\f': case '\v': break; - case '\n': fsm.state = LS_char_multiline; break; - default: fsm.state = LS_char; break; + case '"': fsm.state = LS_string_raw; fsm.emit_token = true; break; + default: + { + fsm.state = LS_identifier; + b32_4tech is_ident = is_identifier_char(c, ignore_string_delims); + if (!is_ident){ + fsm.emit_token = true; + } + }break; } } }break; - case LS_string: - case LS_string_multiline: + case LS_string_LUu8: { if (ignore_string_delims){ - fsm.state = LS_string; - fsm.emit_token = 1; - } - else{ - switch(c){ - case '\n': case '"': fsm.emit_token = 1; break; - case '>': - if (pp_state == LSPP_include){ - fsm.emit_token = 1; - } - break; - case '\\': fsm.state = LS_string_slashed; break; - } - } - }break; - - case LS_string_slashed: - { - if (ignore_string_delims){ - fsm.state = LS_string; - fsm.emit_token = 1; + fsm.state = LS_count; + fsm.emit_token = true; } else{ switch (c){ - case '\r': case '\f': case '\v': break; - case '\n': fsm.state = LS_string_multiline; break; - default: fsm.state = LS_string; break; + case '"': fsm.state = LS_string_normal; fsm.emit_token = true; break; + case '\'': fsm.state = LS_char; fsm.emit_token = true; break; + case 'R': fsm.state = LS_string_R; break; + default: + { + fsm.state = LS_identifier; + b32_4tech is_ident = is_identifier_char(c, ignore_string_delims); + if (!is_ident){ + fsm.emit_token = true; + } + }break; + } + } + }break; + + case LS_string_u: + { + if (ignore_string_delims){ + fsm.state = LS_count; + fsm.emit_token = true; + } + else{ + switch (c){ + case '"': fsm.state = LS_string_normal; fsm.emit_token = true; break; + case '\'': fsm.state = LS_char; fsm.emit_token = true; break; + case '8': fsm.state = LS_string_LUu8; break; + case 'R': fsm.state = LS_string_R; break; + default: + { + fsm.state = LS_identifier; + b32_4tech is_ident = is_identifier_char(c, ignore_string_delims); + if (!is_ident){ + fsm.emit_token = true; + } + }break; } } }break; @@ -317,7 +508,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli else{ switch (c){ case '.': fsm.state = LS_float; break; - default: fsm.emit_token = 1; break; + default: fsm.emit_token = true; break; } } break; @@ -333,7 +524,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli fsm.state = LS_float; } else{ - fsm.emit_token = 1; + fsm.emit_token = true; } break; @@ -341,7 +532,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli if (!(c >= '0' && c <= '9')){ switch (c){ case 'e': fsm.state = LS_crazy_float0; break; - default: fsm.emit_token = 1; break; + default: fsm.emit_token = true; break; } } break; @@ -352,7 +543,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli fsm.state = LS_crazy_float1; } else{ - fsm.emit_token = 1; + fsm.emit_token = true; } } break; @@ -360,7 +551,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli case LS_crazy_float1: { if (!(c >= '0' && c <= '9')){ - fsm.emit_token = 1; + fsm.emit_token = true; } } break; @@ -369,7 +560,7 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli { int is_hex = c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= 128; if (!is_hex){ - fsm.emit_token = 1; + fsm.emit_token = true; } }break; @@ -381,162 +572,149 @@ main_fsm(Cpp_Lex_FSM fsm, uint8_t pp_state, uint8_t c, bool32 ignore_string_deli else{ switch (c){ case '.': fsm.state = LS_ellipsis; break; - case '*': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; + case '*': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; } } }break; - case LS_ellipsis: fsm.emit_token = 1; break; + case LS_ellipsis: fsm.emit_token = true; break; case LS_less: - switch (c){ - case '<': fsm.state = LS_less_less; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '<': fsm.state = LS_less_less; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_less_less: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_more: - switch (c){ - case '>': fsm.state = LS_more_more; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '>': fsm.state = LS_more_more; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_more_more: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_comment_pre: - switch (c){ - case '/': fsm.state = LS_comment; break; - case '*': fsm.state = LS_comment_block; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '/': fsm.state = LS_comment; break; + case '*': fsm.state = LS_comment_block; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_comment: - switch (c){ - case '\\': fsm.state = LS_comment_slashed; break; - case '\n': fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '\\': fsm.state = LS_comment_slashed; break; + case '\n': fsm.emit_token = true; break; + } + }break; case LS_comment_slashed: - switch (c){ - case '\r': case '\f': case '\v': break; - default: fsm.state = LS_comment; break; - } - break; + { + switch (c){ + case '\r': case '\f': case '\v': break; + default: fsm.state = LS_comment; break; + } + }break; case LS_comment_block: - switch (c){ - case '*': fsm.state = LS_comment_block_ending; break; - } - break; + { + switch (c){ + case '*': fsm.state = LS_comment_block_ending; break; + } + }break; case LS_comment_block_ending: - switch (c){ - case '*': fsm.state = LS_comment_block_ending; break; - case '/': fsm.emit_token = 1; break; - default: fsm.state = LS_comment_block; break; - } - break; + { + switch (c){ + case '*': fsm.state = LS_comment_block_ending; break; + case '/': fsm.emit_token = true; break; + default: fsm.state = LS_comment_block; break; + } + }break; case LS_minus: - switch (c){ - case '>': fsm.state = LS_arrow; break; - case '-': fsm.emit_token = 1; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '>': fsm.state = LS_arrow; break; + case '-': fsm.emit_token = true; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_arrow: - switch (c){ - case '*': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '*': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_and: switch (c){ - case '&': fsm.emit_token = 1; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; + case '&': fsm.emit_token = true; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; } break; case LS_or: - switch (c){ - case '|': fsm.emit_token = 1; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '|': fsm.emit_token = true; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_plus: - switch (c){ - case '+': fsm.emit_token = 1; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case '+': fsm.emit_token = true; break; + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; case LS_colon: - switch (c){ - case ':': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + { + switch (c){ + case ':': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; - case LS_star: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_modulo: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_caret: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_eq: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_bang: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; + case LS_single_op: + { + switch (c){ + case '=': fsm.emit_token = true; break; + default: fsm.emit_token = true; break; + } + }break; } break; } @@ -561,7 +739,17 @@ begin_ptr_table(FILE *file, char *type, char *table_name){ static void do_table_item(FILE *file, uint16_t item){ - fprintf(file, "%2d,", (int32_t)item); + fprintf(file, "%3d,", (int32_t)item); +} + +static void +do_table_item_binary(FILE *file, uint16_t item){ + if (item == 0){ + fprintf(file, "0x00,"); + } + else{ + fprintf(file, "%#04x,", item); + } } static void @@ -580,14 +768,15 @@ end_table(FILE *file){ } typedef struct FSM_Tables{ - uint8_t *full_transition_table; - uint8_t *marks; - uint8_t *eq_class; - uint8_t *eq_class_rep; - uint8_t *reduced_transition_table; + u8_4tech *full_transition_table; + u8_4tech *marks; + u8_4tech *eq_class; + u8_4tech *eq_class_rep; + u8_4tech *reduced_transition_table; + u8_4tech *flags; - uint8_t eq_class_counter; - uint16_t state_count; + u8_4tech eq_class_counter; + u16_4tech state_count; } FSM_Tables; static void @@ -637,7 +826,7 @@ do_table_reduction(FSM_Tables *table, uint16_t state_count){ static FSM_Tables generate_whitespace_skip_table(){ uint8_t state_count = LSPP_count; - FSM_Tables table; + FSM_Tables table = {0}; allocate_full_tables(&table, state_count); int32_t i = 0; @@ -658,20 +847,33 @@ generate_whitespace_skip_table(){ } static FSM_Tables -generate_int_table(){ - uint8_t state_count = LSINT_count; - FSM_Tables table; +generate_table(u8_4tech state_count, FSM_Function *fsm_call){ + FSM_Tables table = {0}; allocate_full_tables(&table, state_count); - int32_t i = 0; + i32_4tech i = 0; Cpp_Lex_FSM fsm = {0}; Cpp_Lex_FSM new_fsm = {0}; for (uint16_t c = 0; c < 256; ++c){ - for (uint8_t state = 0; state < state_count; ++state){ - fsm.int_state = state; - fsm.emit_token = 0; - new_fsm = int_fsm(fsm, (uint8_t)c); - table.full_transition_table[i++] = new_fsm.int_state + state_count*new_fsm.emit_token; + for (u8_4tech state = 0; state < state_count; ++state){ + fsm.state = state; + fsm.emit_token = false; + new_fsm = fsm_call(fsm, (u8_4tech)c, false); + table.full_transition_table[i++] = new_fsm.state + state_count*new_fsm.emit_token; + } + } + + for (u8_4tech state = 0; state < state_count; ++state){ + fsm.state = state; + fsm.emit_token = false; + fsm.flags = 0; + new_fsm = fsm_call(fsm, 0, true); + if (new_fsm.flags != 0){ + if (table.flags == 0){ + table.flags = (u8_4tech*)malloc(state_count); + memset(table.flags, 0, state_count); + } + table.flags[state] = new_fsm.flags; } } @@ -683,7 +885,7 @@ generate_int_table(){ static FSM_Tables generate_fsm_table(uint8_t pp_state, bool32 ignore_string_delims){ uint8_t state_count = LS_count; - FSM_Tables table; + FSM_Tables table = {0}; allocate_full_tables(&table, state_count); int32_t i = 0; @@ -692,7 +894,7 @@ generate_fsm_table(uint8_t pp_state, bool32 ignore_string_delims){ for (uint16_t c = 0; c < 256; ++c){ for (uint8_t state = 0; state < state_count; ++state){ fsm.state = state; - fsm.emit_token = 0; + fsm.emit_token = false; new_fsm = main_fsm(fsm, pp_state, (uint8_t)c, ignore_string_delims); table.full_transition_table[i++] = new_fsm.state + state_count*new_fsm.emit_token; } @@ -705,24 +907,39 @@ generate_fsm_table(uint8_t pp_state, bool32 ignore_string_delims){ static void render_fsm_table(FILE *file, FSM_Tables tables, char *group_name){ - begin_table(file, "uint16_t", group_name, "eq_classes"); - for (uint16_t c = 0; c < 256; ++c){ + begin_table(file, "u16_4tech", group_name, "eq_classes"); + for (u16_4tech c = 0; c < 256; ++c){ + if ((c % 16) == 0 && c > 0){ + end_row(file); + } do_table_item(file, tables.eq_class[c]*tables.state_count); } end_row(file); end_table(file); - fprintf(file, "const int32_t num_%s_eq_classes = %d;\n\n", group_name, tables.eq_class_counter); + fprintf(file, "const i32_4tech num_%s_eq_classes = %d;\n\n", group_name, tables.eq_class_counter); - int32_t i = 0; - begin_table(file, "uint8_t", group_name, "table"); - for (uint16_t c = 0; c < tables.eq_class_counter; ++c){ - for (uint8_t state = 0; state < tables.state_count; ++state){ + i32_4tech i = 0; + begin_table(file, "u8_4tech", group_name, "table"); + for (u16_4tech c = 0; c < tables.eq_class_counter; ++c){ + for (u8_4tech state = 0; state < tables.state_count; ++state){ do_table_item(file, tables.reduced_transition_table[i++]); } end_row(file); } end_table(file); + + if (tables.flags != 0){ + begin_table(file, "u8_4tech", group_name, "flags"); + for (u8_4tech state = 0; state < tables.state_count; ++state){ + if ((state % 4) == 0 && state > 0){ + end_row(file); + } + do_table_item_binary(file, tables.flags[state]); + } + end_row(file); + end_table(file); + } } static void @@ -751,7 +968,7 @@ static PP_Names pp_names[] = { {LSPP_number, "pp_number_fsm", false}, {LSPP_error, "pp_error_fsm", false}, {LSPP_junk, "pp_junk_fsm", false}, - {LSPP_default, "no_string_fsm", true}, + {LSPP_default, "no_string_fsm", true }, }; int @@ -761,15 +978,26 @@ main(){ FSM_Tables wtables = generate_whitespace_skip_table(); render_fsm_table(file, wtables, "whitespace_fsm"); - FSM_Tables itables = generate_int_table(); + FSM_Tables itables = generate_table(LSINT_count, int_fsm); render_fsm_table(file, itables, "int_fsm"); - begin_table(file, "uint8_t", "multiline_state_table"); - for (uint8_t state = 0; state < LS_count*2; ++state){ - do_table_item(file, (state == LS_string_multiline || state == LS_char_multiline)); + { + struct{ + char *name; + uint8_t count; + FSM_Function *fsm_call; + } static tables[] = { + {"raw_str", LSSTR_count, raw_str_fsm }, + {"normal_str", LSSTR_count, normal_str_fsm }, + {"include_str", LSSTR_include_count, include_str_fsm }, + {"normal_char", LSSTR_count, normal_char_fsm } + }; + + for (u32_4tech i = 0; i < ArrayCount(tables); ++i){ + FSM_Tables str_tables = generate_table(tables[i].count, tables[i].fsm_call); + render_fsm_table(file, str_tables, tables[i].name); + } } - end_row(file); - end_table(file); for (int32_t i = 0; i < ArrayCount(pp_names); ++i){ FSM_Tables tables = generate_fsm_table(pp_names[i].pp_state, pp_names[i].ignore_string_delims);