From 9d2384b3b9d30d492fe9194a09a573b6dc0174c6 Mon Sep 17 00:00:00 2001 From: Allen Webster Date: Tue, 30 Aug 2016 15:30:41 -0400 Subject: [PATCH] improvements to the lexer --- 4coder_custom.h | 4 + 4coder_custom_api.h | 116 ++- 4coder_jump_parsing.cpp | 4 +- 4coder_mem.h | 24 +- 4coder_os_custom_api.h | 7 + 4cpp_lexer.h | 147 ++-- 4cpp_lexer_fsms.h | 6 +- 4cpp_lexer_tables.c | 514 ++++++------- 4ed.h | 1 - 4ed_app_target.cpp | 7 +- 4ed_meta.h => 4ed_defines.h | 4 +- 4ed_metagen.cpp | 151 ++-- 4ed_os_custom_api.h | 14 + build.c | 2 + fsm_table_generator.cpp | 1349 ++++++++++------------------------- internal_4coder_string.cpp | 2 +- win32_4ed.cpp | 86 +-- 17 files changed, 946 insertions(+), 1492 deletions(-) create mode 100644 4coder_os_custom_api.h rename 4ed_meta.h => 4ed_defines.h (98%) create mode 100644 4ed_os_custom_api.h diff --git a/4coder_custom.h b/4coder_custom.h index e917d8f4..209ca0fa 100644 --- a/4coder_custom.h +++ b/4coder_custom.h @@ -3,6 +3,10 @@ #define FCODER_CUSTOM_H #include +// TODO(allen): We need to eliminate our dependence on this +// in the custom side. +#include + #include "4coder_version.h" #include "4coder_keycodes.h" diff --git a/4coder_custom_api.h b/4coder_custom_api.h index 6ed7e63d..670f84e0 100644 --- a/4coder_custom_api.h +++ b/4coder_custom_api.h @@ -55,65 +55,63 @@ #define DIRECTORY_CD_SIG(n) bool32 n(Application_Links *app, char *dir, int32_t *len, int32_t capacity, char *rel_path, int32_t rel_len) #define GET_4ED_PATH_SIG(n) bool32 n(Application_Links *app, char *out, int32_t capacity) #define SHOW_MOUSE_CURSOR_SIG(n) void n(Application_Links *app, Mouse_Cursor_Show_Type show) -extern "C"{ - typedef EXEC_COMMAND_SIG(Exec_Command_Function); - typedef EXEC_SYSTEM_COMMAND_SIG(Exec_System_Command_Function); - typedef CLIPBOARD_POST_SIG(Clipboard_Post_Function); - typedef CLIPBOARD_COUNT_SIG(Clipboard_Count_Function); - typedef CLIPBOARD_INDEX_SIG(Clipboard_Index_Function); - typedef GET_BUFFER_COUNT_SIG(Get_Buffer_Count_Function); - typedef GET_BUFFER_FIRST_SIG(Get_Buffer_First_Function); - typedef GET_BUFFER_NEXT_SIG(Get_Buffer_Next_Function); - typedef GET_BUFFER_SIG(Get_Buffer_Function); - typedef GET_BUFFER_BY_NAME_SIG(Get_Buffer_By_Name_Function); - typedef BUFFER_BOUNDARY_SEEK_SIG(Buffer_Boundary_Seek_Function); - typedef BUFFER_READ_RANGE_SIG(Buffer_Read_Range_Function); - typedef BUFFER_REPLACE_RANGE_SIG(Buffer_Replace_Range_Function); - typedef BUFFER_COMPUTE_CURSOR_SIG(Buffer_Compute_Cursor_Function); - typedef BUFFER_BATCH_EDIT_SIG(Buffer_Batch_Edit_Function); - typedef BUFFER_SET_SETTING_SIG(Buffer_Set_Setting_Function); - typedef BUFFER_AUTO_INDENT_SIG(Buffer_Auto_Indent_Function); - typedef CREATE_BUFFER_SIG(Create_Buffer_Function); - typedef SAVE_BUFFER_SIG(Save_Buffer_Function); - typedef KILL_BUFFER_SIG(Kill_Buffer_Function); - typedef GET_VIEW_FIRST_SIG(Get_View_First_Function); - typedef GET_VIEW_NEXT_SIG(Get_View_Next_Function); - typedef GET_VIEW_SIG(Get_View_Function); - typedef GET_ACTIVE_VIEW_SIG(Get_Active_View_Function); - typedef OPEN_VIEW_SIG(Open_View_Function); - typedef CLOSE_VIEW_SIG(Close_View_Function); - typedef SET_ACTIVE_VIEW_SIG(Set_Active_View_Function); - typedef VIEW_SET_SETTING_SIG(View_Set_Setting_Function); - typedef VIEW_SET_SPLIT_PROPORTION_SIG(View_Set_Split_Proportion_Function); - typedef VIEW_COMPUTE_CURSOR_SIG(View_Compute_Cursor_Function); - typedef VIEW_SET_CURSOR_SIG(View_Set_Cursor_Function); - typedef VIEW_SET_SCROLL_SIG(View_Set_Scroll_Function); - typedef VIEW_SET_MARK_SIG(View_Set_Mark_Function); - typedef VIEW_SET_HIGHLIGHT_SIG(View_Set_Highlight_Function); - typedef VIEW_SET_BUFFER_SIG(View_Set_Buffer_Function); - typedef VIEW_POST_FADE_SIG(View_Post_Fade_Function); - typedef GET_USER_INPUT_SIG(Get_User_Input_Function); - typedef GET_COMMAND_INPUT_SIG(Get_Command_Input_Function); - typedef GET_MOUSE_STATE_SIG(Get_Mouse_State_Function); - typedef START_QUERY_BAR_SIG(Start_Query_Bar_Function); - typedef END_QUERY_BAR_SIG(End_Query_Bar_Function); - typedef PRINT_MESSAGE_SIG(Print_Message_Function); - typedef CHANGE_THEME_SIG(Change_Theme_Function); - typedef CHANGE_FONT_SIG(Change_Font_Function); - typedef BUFFER_SET_FONT_SIG(Buffer_Set_Font_Function); - typedef SET_THEME_COLORS_SIG(Set_Theme_Colors_Function); - typedef GET_THEME_COLORS_SIG(Get_Theme_Colors_Function); - typedef DIRECTORY_GET_HOT_SIG(Directory_Get_Hot_Function); - typedef GET_FILE_LIST_SIG(Get_File_List_Function); - typedef FREE_FILE_LIST_SIG(Free_File_List_Function); - typedef MEMORY_ALLOCATE_SIG(Memory_Allocate_Function); - typedef MEMORY_SET_PROTECTION_SIG(Memory_Set_Protection_Function); - typedef MEMORY_FREE_SIG(Memory_Free_Function); - typedef FILE_EXISTS_SIG(File_Exists_Function); - typedef DIRECTORY_CD_SIG(Directory_CD_Function); - typedef GET_4ED_PATH_SIG(Get_4ed_Path_Function); - typedef SHOW_MOUSE_CURSOR_SIG(Show_Mouse_Cursor_Function); -} +typedef EXEC_COMMAND_SIG(Exec_Command_Function); +typedef EXEC_SYSTEM_COMMAND_SIG(Exec_System_Command_Function); +typedef CLIPBOARD_POST_SIG(Clipboard_Post_Function); +typedef CLIPBOARD_COUNT_SIG(Clipboard_Count_Function); +typedef CLIPBOARD_INDEX_SIG(Clipboard_Index_Function); +typedef GET_BUFFER_COUNT_SIG(Get_Buffer_Count_Function); +typedef GET_BUFFER_FIRST_SIG(Get_Buffer_First_Function); +typedef GET_BUFFER_NEXT_SIG(Get_Buffer_Next_Function); +typedef GET_BUFFER_SIG(Get_Buffer_Function); +typedef GET_BUFFER_BY_NAME_SIG(Get_Buffer_By_Name_Function); +typedef BUFFER_BOUNDARY_SEEK_SIG(Buffer_Boundary_Seek_Function); +typedef BUFFER_READ_RANGE_SIG(Buffer_Read_Range_Function); +typedef BUFFER_REPLACE_RANGE_SIG(Buffer_Replace_Range_Function); +typedef BUFFER_COMPUTE_CURSOR_SIG(Buffer_Compute_Cursor_Function); +typedef BUFFER_BATCH_EDIT_SIG(Buffer_Batch_Edit_Function); +typedef BUFFER_SET_SETTING_SIG(Buffer_Set_Setting_Function); +typedef BUFFER_AUTO_INDENT_SIG(Buffer_Auto_Indent_Function); +typedef CREATE_BUFFER_SIG(Create_Buffer_Function); +typedef SAVE_BUFFER_SIG(Save_Buffer_Function); +typedef KILL_BUFFER_SIG(Kill_Buffer_Function); +typedef GET_VIEW_FIRST_SIG(Get_View_First_Function); +typedef GET_VIEW_NEXT_SIG(Get_View_Next_Function); +typedef GET_VIEW_SIG(Get_View_Function); +typedef GET_ACTIVE_VIEW_SIG(Get_Active_View_Function); +typedef OPEN_VIEW_SIG(Open_View_Function); +typedef CLOSE_VIEW_SIG(Close_View_Function); +typedef SET_ACTIVE_VIEW_SIG(Set_Active_View_Function); +typedef VIEW_SET_SETTING_SIG(View_Set_Setting_Function); +typedef VIEW_SET_SPLIT_PROPORTION_SIG(View_Set_Split_Proportion_Function); +typedef VIEW_COMPUTE_CURSOR_SIG(View_Compute_Cursor_Function); +typedef VIEW_SET_CURSOR_SIG(View_Set_Cursor_Function); +typedef VIEW_SET_SCROLL_SIG(View_Set_Scroll_Function); +typedef VIEW_SET_MARK_SIG(View_Set_Mark_Function); +typedef VIEW_SET_HIGHLIGHT_SIG(View_Set_Highlight_Function); +typedef VIEW_SET_BUFFER_SIG(View_Set_Buffer_Function); +typedef VIEW_POST_FADE_SIG(View_Post_Fade_Function); +typedef GET_USER_INPUT_SIG(Get_User_Input_Function); +typedef GET_COMMAND_INPUT_SIG(Get_Command_Input_Function); +typedef GET_MOUSE_STATE_SIG(Get_Mouse_State_Function); +typedef START_QUERY_BAR_SIG(Start_Query_Bar_Function); +typedef END_QUERY_BAR_SIG(End_Query_Bar_Function); +typedef PRINT_MESSAGE_SIG(Print_Message_Function); +typedef CHANGE_THEME_SIG(Change_Theme_Function); +typedef CHANGE_FONT_SIG(Change_Font_Function); +typedef BUFFER_SET_FONT_SIG(Buffer_Set_Font_Function); +typedef SET_THEME_COLORS_SIG(Set_Theme_Colors_Function); +typedef GET_THEME_COLORS_SIG(Get_Theme_Colors_Function); +typedef DIRECTORY_GET_HOT_SIG(Directory_Get_Hot_Function); +typedef GET_FILE_LIST_SIG(Get_File_List_Function); +typedef FREE_FILE_LIST_SIG(Free_File_List_Function); +typedef MEMORY_ALLOCATE_SIG(Memory_Allocate_Function); +typedef MEMORY_SET_PROTECTION_SIG(Memory_Set_Protection_Function); +typedef MEMORY_FREE_SIG(Memory_Free_Function); +typedef FILE_EXISTS_SIG(File_Exists_Function); +typedef DIRECTORY_CD_SIG(Directory_CD_Function); +typedef GET_4ED_PATH_SIG(Get_4ed_Path_Function); +typedef SHOW_MOUSE_CURSOR_SIG(Show_Mouse_Cursor_Function); struct Application_Links{ void *memory; int32_t memory_size; diff --git a/4coder_jump_parsing.cpp b/4coder_jump_parsing.cpp index 8230b67c..ef777140 100644 --- a/4coder_jump_parsing.cpp +++ b/4coder_jump_parsing.cpp @@ -95,7 +95,7 @@ parse_error(String line, Jump_Location *location, int32_t colon_pos2 = find_s_char(line, colon_pos1+1, ':'); int32_t colon_pos3 = find_s_char(line, colon_pos2+1, ':'); - if (colon_pos3 < line.size){ + if (colon_pos3+1 < line.size && line.str[colon_pos3+1] == ' '){ String filename = substr(line, 0, colon_pos1); String line_number = substr(line, colon_pos1+1, colon_pos2 - colon_pos1 - 1); String column_number = substr(line, colon_pos2+1, colon_pos3 - colon_pos2 - 1); @@ -120,7 +120,7 @@ parse_error(String line, Jump_Location *location, colon_pos2 = find_s_char(line, colon_pos1+1, ':'); - if (colon_pos2 < line.size){ + if (colon_pos2+1 < line.size && line.str[colon_pos2+1] == ' '){ String filename = substr(line, 0, colon_pos1); String line_number = substr(line, colon_pos1+1, colon_pos2 - colon_pos1 - 1); diff --git a/4coder_mem.h b/4coder_mem.h index 35f98b3c..057e40d4 100644 --- a/4coder_mem.h +++ b/4coder_mem.h @@ -78,9 +78,9 @@ This is a very week general purpose allocator system. It should only be used for infrequent large allocations (4K+). */ -#include -#include -#include +//#include +//#include +//#include enum{ MEM_BUBBLE_FLAG_INIT = 0x0, @@ -159,29 +159,34 @@ general_memory_open(General_Memory *general, void *memory, int32_t size){ insert_bubble2(&general->free_sentinel, first); } +#ifdef Assert static int32_t general_memory_check(General_Memory *general){ Bubble *sentinel = &general->sentinel; for (Bubble *bubble = sentinel->next; bubble != sentinel; bubble = bubble->next){ - assert(bubble); + Assert(bubble); Bubble *next = bubble->next; - assert(bubble == next->prev); + Assert(bubble == next->prev); if (next != sentinel && bubble->prev != sentinel){ - assert(bubble->next > bubble); - assert(bubble > bubble->prev); + Assert(bubble->next > bubble); + Assert(bubble > bubble->prev); char *end_ptr = (char*)(bubble + 1) + bubble->size; char *next_ptr = (char*)next; (void)(end_ptr); (void)(next_ptr); - assert(end_ptr == next_ptr); + Assert(end_ptr == next_ptr); } } return(1); } +#else +static int32_t +general_memory_check(General_Memory *general){} +#endif #define BUBBLE_MIN_SIZE 1024 @@ -221,8 +226,6 @@ general_memory_allocate(General_Memory *general, int32_t size){ inline void general_memory_do_merge(Bubble *left, Bubble *right){ - assert(left->next == right); - assert(right->prev == left); left->size += sizeof(Bubble) + right->size; remove_bubble(right); remove_bubble2(right); @@ -238,7 +241,6 @@ general_memory_attempt_merge(Bubble *left, Bubble *right){ static void general_memory_free(General_Memory *general, void *memory){ Bubble *bubble = ((Bubble*)memory) - 1; - assert(bubble->flags == MEM_BUBBLE_USED); bubble->flags = 0; remove_bubble2(bubble); diff --git a/4coder_os_custom_api.h b/4coder_os_custom_api.h new file mode 100644 index 00000000..ffd4bd92 --- /dev/null +++ b/4coder_os_custom_api.h @@ -0,0 +1,7 @@ +#define MEMORY_ALLOCATE_SIG(n) void* n(Application_Links *app, int32_t size) +#define MEMORY_SET_PROTECTION_SIG(n) bool32 n(Application_Links *app, void *ptr, int32_t size, Memory_Protect_Flags flags) +#define MEMORY_FREE_SIG(n) void n(Application_Links *app, void *mem, int32_t size) +#define FILE_EXISTS_SIG(n) bool32 n(Application_Links *app, char *filename, int32_t len) +#define DIRECTORY_CD_SIG(n) bool32 n(Application_Links *app, char *dir, int32_t *len, int32_t capacity, char *rel_path, int32_t rel_len) +#define GET_4ED_PATH_SIG(n) bool32 n(Application_Links *app, char *out, int32_t capacity) +#define SHOW_MOUSE_CURSOR_SIG(n) void n(Application_Links *app, Mouse_Cursor_Show_Type show) diff --git a/4cpp_lexer.h b/4cpp_lexer.h index 784f0ac9..69575d0e 100644 --- a/4cpp_lexer.h +++ b/4cpp_lexer.h @@ -4,6 +4,10 @@ #ifndef FCPP_NEW_LEXER_INC #define FCPP_NEW_LEXER_INC +#ifndef Assert +# define Assert(n) do{ if (!(n)) *(int*)0 = 0xA11E; }while(0) +#endif + #ifndef FCPP_LINK # define FCPP_LINK static #endif @@ -23,13 +27,40 @@ struct String_List{ int32_t count; }; -struct Sub_Match_List_Result{ - int32_t index; - int32_t new_pos; -}; - #define lexer_string_list(x) {x, (sizeof(x)/sizeof(*(x)))} +static String_And_Flag preprop_strings[] = { + {"include", CPP_PP_INCLUDE}, + {"INCLUDE", CPP_PP_INCLUDE}, + {"ifndef", CPP_PP_IFNDEF}, + {"IFNDEF", CPP_PP_IFNDEF}, + {"define", CPP_PP_DEFINE}, + {"DEFINE", CPP_PP_DEFINE}, + {"import", CPP_PP_IMPORT}, + {"IMPORT", CPP_PP_IMPORT}, + {"pragma", CPP_PP_PRAGMA}, + {"PRAGMA", CPP_PP_PRAGMA}, + {"undef", CPP_PP_UNDEF}, + {"UNDEF", CPP_PP_UNDEF}, + {"endif", CPP_PP_ENDIF}, + {"ENDIF", CPP_PP_ENDIF}, + {"error", CPP_PP_ERROR}, + {"ERROR", CPP_PP_ERROR}, + {"ifdef", CPP_PP_IFDEF}, + {"IFDEF", CPP_PP_IFDEF}, + {"using", CPP_PP_USING}, + {"USING", CPP_PP_USING}, + {"else", CPP_PP_ELSE}, + {"ELSE", CPP_PP_ELSE}, + {"elif", CPP_PP_ELIF}, + {"ELIF", CPP_PP_ELIF}, + {"line", CPP_PP_LINE}, + {"LINE", CPP_PP_LINE}, + {"if", CPP_PP_IF}, + {"IF", CPP_PP_IF}, +}; +static String_List preprops = lexer_string_list(preprop_strings); + static String_And_Flag keyword_strings[] = { {"true", CPP_TOKEN_BOOLEAN_CONSTANT}, {"false", CPP_TOKEN_BOOLEAN_CONSTANT}, @@ -121,23 +152,21 @@ static String_And_Flag keyword_strings[] = { }; static String_List keywords = lexer_string_list(keyword_strings); -FCPP_LINK Sub_Match_List_Result -sub_match_list(char *chunk, int32_t size, int32_t pos, String_List list, int32_t sub_size){ - Sub_Match_List_Result result; - String str_main; - char *str_check; - int32_t i,l; +FCPP_LINK int32_t +sub_match_list(char *chunk, int32_t size, String_List list, int32_t sub_size){ + int32_t result = 0; + String str_main = {0}; + char *str_check = 0; + int32_t i = 0, l = 0; - result.index = -1; - result.new_pos = pos; - str_main = make_string(chunk + pos, size - pos); + result = -1; + str_main = make_string(chunk, size); if (sub_size > 0){ str_main = substr(str_main, 0, sub_size); for (i = 0; i < list.count; ++i){ str_check = list.data[i].str; if (match_sc(str_main, str_check)){ - result.index = i; - result.new_pos = pos + sub_size; + result = i; break; } } @@ -146,13 +175,13 @@ sub_match_list(char *chunk, int32_t size, int32_t pos, String_List list, int32_t for (i = 0; i < list.count; ++i){ str_check = list.data[i].str; if (match_part_scl(str_main, str_check, &l)){ - result.index = i; - result.new_pos = pos + l; + result = i; break; } } } - return result; + + return(result); } @@ -332,7 +361,7 @@ struct Lex_Data{ int32_t chunk_pos; Lex_FSM fsm; - Whitespace_FSM wfsm; + unsigned char white_done; unsigned char pp_state; unsigned char completed; @@ -351,12 +380,12 @@ lex_data_init(char *tb){ #define DrCase(PC) case PC: goto resumespot_##PC -#define DrYield(PC, n) {\ - token_stack_out->count = token_i;\ +#define DrYield(PC, n) { \ + token_stack_out->count = token_i; \ *S_ptr = S; S_ptr->__pc__ = PC; return(n); resumespot_##PC:; } -#define DrReturn(n) {\ - token_stack_out->count = token_i;\ +#define DrReturn(n) { \ + token_stack_out->count = token_i; \ *S_ptr = S; S_ptr->__pc__ = -1; return(n); } enum Lex_Result{ @@ -389,29 +418,26 @@ cpp_lex_nonalloc(Lex_Data *S_ptr, DrCase(3); DrCase(4); DrCase(5); - DrCase(6); DrCase(7); } for (;;){ - S.wfsm.white_done = 0; - S.wfsm.pp_state = S.pp_state; + S.white_done = 0; for(;;){ - for (; S.wfsm.pp_state < LSPP_count && S.pos < end_pos;){ + for (; S.pp_state < LSPP_count && S.pos < end_pos;){ c = chunk[S.pos++]; - int32_t i = S.wfsm.pp_state + whitespace_fsm_eq_classes[c]; - S.wfsm.pp_state = whitespace_fsm_table[i]; + int32_t i = S.pp_state + whitespace_fsm_eq_classes[c]; + S.pp_state = whitespace_fsm_table[i]; } - S.wfsm.white_done = (S.wfsm.pp_state >= LSPP_count); + S.white_done = (S.pp_state >= LSPP_count); - if (S.wfsm.white_done == 0){ + if (S.white_done == 0){ S.chunk_pos += size; DrYield(4, LexNeedChunk); } else break; } --S.pos; - S.pp_state = S.wfsm.pp_state; if (S.pp_state >= LSPP_count){ S.pp_state -= LSPP_count; } @@ -500,14 +526,16 @@ cpp_lex_nonalloc(Lex_Data *S_ptr, } else{ S.pos_overide = S.pos; - S.wfsm.white_done = 0; + S.white_done = 0; for (;;){ - for (; S.wfsm.white_done == 0 && S.pos < end_pos;){ + for (; S.white_done == 0 && S.pos < end_pos;){ c = chunk[S.pos++]; - if (!(c == ' ' || c == '\t' || c == '\r' || c == '\v' || c == '\f')) S.wfsm.white_done = 1; + if (!(c == ' ' || c == '\t' || c == '\r' || c == '\v' || c == '\f')){ + S.white_done = 1; + } } - if (S.wfsm.white_done == 0){ + if (S.white_done == 0){ S.chunk_pos += size; DrYield(1, LexNeedChunk); } @@ -543,11 +571,10 @@ cpp_lex_nonalloc(Lex_Data *S_ptr, } } - Sub_Match_List_Result sub_match; - sub_match = sub_match_list(S.tb, S.tb_pos, 0, keywords, word_size); + int32_t sub_match = sub_match_list(S.tb, S.tb_pos, keywords, word_size); - if (sub_match.index != -1){ - String_And_Flag data = keywords.data[sub_match.index]; + if (sub_match != -1){ + String_And_Flag data = keywords.data[sub_match]; S.token.type = (Cpp_Token_Type)data.flags; S.token.flags = CPP_TFLAG_IS_KEYWORD; } @@ -568,34 +595,32 @@ cpp_lex_nonalloc(Lex_Data *S_ptr, } break; + case LS_ppdef: case LS_pp: { - S.fsm.directive_state = LSDIR_default; - S.fsm.emit_token = 0; - for (;;){ - for (; S.fsm.directive_state < LSDIR_count && S.pos < end_pos;){ - c = chunk[S.pos++]; - S.fsm.directive_state = pp_directive_table[S.fsm.directive_state + pp_directive_eq_classes[c]]; - } - S.fsm.emit_token = (S.fsm.int_state >= LSDIR_count); - - if (S.fsm.emit_token == 0){ - S.chunk_pos += size; - DrYield(6, LexNeedChunk); - } - else break; - } --S.pos; - Cpp_Token_Type type = (Cpp_Token_Type)(S.fsm.directive_state - pp_directive_terminal_base); - S.token.type = type; - if (type == CPP_TOKEN_JUNK){ - S.token.flags = 0; + int32_t word_size = S.pos - S.token_start; + int32_t pos = S.tb_pos-1; + int32_t i = 1; + for (;i < pos; ++i){ + if (S.tb[i] != ' '){ + break; + } } - else{ + + int32_t sub_match = sub_match_list(S.tb+i, pos-i, preprops, word_size); + + if (sub_match != -1){ + String_And_Flag data = preprops.data[sub_match]; + S.token.type = (Cpp_Token_Type)data.flags; S.token.flags = CPP_TFLAG_PP_DIRECTIVE; S.pp_state = (unsigned char)cpp_pp_directive_to_state(S.token.type); } + else{ + S.token.type = CPP_TOKEN_JUNK; + S.token.flags = 0; + } }break; case LS_number: diff --git a/4cpp_lexer_fsms.h b/4cpp_lexer_fsms.h index e4ea2d0b..7847edbe 100644 --- a/4cpp_lexer_fsms.h +++ b/4cpp_lexer_fsms.h @@ -15,6 +15,7 @@ enum Lex_State{ LS_identifier, LS_pound, LS_pp, + LS_ppdef, LS_char, LS_char_multiline, LS_char_slashed, @@ -88,11 +89,6 @@ enum Lex_PP_State{ LSPP_count }; -struct Whitespace_FSM{ - uint8_t pp_state; - uint8_t white_done; -}; - struct Lex_FSM{ uint8_t state; union{ diff --git a/4cpp_lexer_tables.c b/4cpp_lexer_tables.c index e178ae8a..d4ffe2de 100644 --- a/4cpp_lexer_tables.c +++ b/4cpp_lexer_tables.c @@ -24,300 +24,307 @@ uint8_t int_fsm_table[] = { }; uint8_t multiline_state_table[] = { - 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, 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, }; uint16_t main_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_main_fsm_eq_classes = 29; +const int32_t num_main_fsm_eq_classes = 30; uint8_t main_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -42,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t pp_include_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,117,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,156,39,195,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,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,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,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,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, + 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,120,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,160,40,200,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, }; const int32_t num_pp_include_fsm_eq_classes = 6; uint8_t pp_include_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 3, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, - 3,42,42,42, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, - 1,40, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, - 2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, - 3, 1,41, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38, +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, + 3, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 3,43,43,43, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 1,41, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 2, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, + 3, 1,42, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39, }; uint16_t pp_macro_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_pp_macro_fsm_eq_classes = 29; +const int32_t num_pp_macro_fsm_eq_classes = 30; uint8_t pp_macro_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t pp_identifier_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_pp_identifier_fsm_eq_classes = 29; +const int32_t num_pp_identifier_fsm_eq_classes = 30; uint8_t pp_identifier_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t pp_body_if_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_pp_body_if_fsm_eq_classes = 29; +const int32_t num_pp_body_if_fsm_eq_classes = 30; uint8_t pp_body_if_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t pp_body_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_pp_body_fsm_eq_classes = 29; +const int32_t num_pp_body_fsm_eq_classes = 30; uint8_t pp_body_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t pp_number_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_pp_number_fsm_eq_classes = 29; +const int32_t num_pp_number_fsm_eq_classes = 30; uint8_t pp_number_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t pp_error_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,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,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,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,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,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,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,39,39,39,39,39, + 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, }; const int32_t num_pp_error_fsm_eq_classes = 3; uint8_t pp_error_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, -38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, -77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77, +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, }; uint16_t pp_junk_fsm_eq_classes[] = { - 0,39,39,39,39,39,39,39,39,39,78,117,117,117,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,39,156,195,234,273,312,351,390,273,273,429,468,273,507,546,585,624,663,663,663,663,663,663,663,663,663,702,273,741,780,819,273,273,858,858,858,858,858,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,273,936,273,975,897,39,858,858,858,858,1014,858,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,897,1053,897,897,273,1092,273,273,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,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,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,39,39,39,39,39,39,39,39,39, + 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,40,160,200,240,280,320,360,400,280,280,440,480,280,520,560,600,640,680,680,680,680,680,680,680,680,680,720,280,760,800,840,280,280,880,880,880,880,880,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,280,960,280,1000,1040,40,880,880,880,880,1080,880,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,920,1120,920,920,280,1160,280,280,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, }; -const int32_t num_pp_junk_fsm_eq_classes = 29; +const int32_t num_pp_junk_fsm_eq_classes = 30; uint8_t pp_junk_fsm_table[] = { -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,66,67,68,69,70,71,72,73,74,75,76,77, - 0,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3,43,44, 5,46,47, 8,49,50,51,52,53,54,55,56,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 0,40,41, 3, 4, 5, 6, 7, 8, 9,49,50,51,52,53,54,55,17,18,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -37,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 7,40,41, 3, 4, 5, 4,46,47, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 2,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -34,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -29,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 4,40,41, 3,43,44, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -33,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,19,17,17,20,20,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -31,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -27,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,14,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -21,40,41, 3, 4, 5, 4, 7, 8, 7,12,12,51,52,53,54,55,17,17,19,19,22,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -16,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,17,17,17,19,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -11, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -10, 1,41, 3, 4, 5, 4, 7, 8, 7,10,10,12,14,14,15,55,17,17,19,19,12,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -32,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -23,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,24,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -36,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -25,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,26,65,28,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -39,40,41, 3, 6, 6, 4, 9, 9, 7,49,50,51,52,53,54,55,18,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -35,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,50,13,52,53,15,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, - 1, 1,41, 3, 4, 5, 4, 7, 8, 7,49,15,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, -30,40,41, 3, 4, 5, 4, 7, 8, 7,49,50,51,52,53,54,55,17,17,19,19,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,38, +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, 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, + 0,41,42, 3,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, +38,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, + 8,41,42, 3,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, 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, +40,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, +35,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, +30,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, + 5,41,42, 3,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, +34,41,42, 3,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, 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, +28,41,42, 3,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, 3,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, 3,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, 3,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, 3,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, 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, +24,41,42, 3,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, 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, +26,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,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, 3,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, 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, + 1, 1,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, + 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, 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, }; uint16_t * get_eq_classes[] = { @@ -344,52 +351,3 @@ pp_error_fsm_table, pp_junk_fsm_table, }; -uint16_t pp_directive_eq_classes[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 0,119,119,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,238, 0,357,476,595,714,833, 0,952, 0, 0,1071,1190,1309,1428,1547, 0,1666,1785,1904,2023, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,2142, 0,2261,2380,2499,2618,2737, 0,2856, 0, 0,2975,3094,3213,3332,3451, 0,3570,3689,3808,3927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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_pp_directive_eq_classes = 34; - -uint8_t pp_directive_table[] = { -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 0,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,67,200,200,70,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,35,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 4,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,41,200,200,200,38,200,202,42,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,81,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,103,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -10,200,200,200,56,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,39,202,200,45,43,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,60,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,82,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,111,200,208,209,200,200,214,200,118,214, -200,200,33,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,44,207,46,206,200,200,200,212,200,200,200,200,203,57,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,83,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,105,210,200,200,211,200,112,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,68,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,86,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 2,200,200,200,200,200,200,200,200,200,200,200,116,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,58,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,84,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,110,104,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -12,200,200,200,200,200,200,200,200,200,102,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,36,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,34,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,69,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,32,200,200,200,200,200,79,200,100,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,40,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,59,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,85,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,117,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,48,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,107,200,211,200,200,208,209,200,200,214,200,200,214, - 6,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,47,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,66,200,200,200,101,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,49,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,106,200,200,200,210,200,108,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,80,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,109,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,50,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 8,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,37,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,62,200,200,65,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,16,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 3,200,200,200,200,200,200,200,200,200,200,200,200,200,22,200,200,200,19,200,202,23,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,73,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,90,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 9,200,200,51,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,20,202,200,26,24,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,55,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,74,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,98,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,115,214,200,200,214, -200,14,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,25,207,27,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,52,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,75,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,92,210,200,200,211,200,99,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,63,200,200,215,200,200,200,200,215,200,200,200,200,204,200,78,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 1,200,200,200,200,200,200,200,200,200,200,113,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,53,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,76,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,97,91,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -11,200,200,200,200,200,200,200,200,89,200,200,200,200,205,200,17,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,15,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,64,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,13,200,200,200,200,200,71,200,87,200,200,200,200,21,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,54,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,77,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,114,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,29,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,94,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 5,200,200,200,200,200,200,200,200,200,200,200,200,200,205,28,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,61,200,200,200,88,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,30,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,93,200,200,200,210,200,95,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,72,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,96,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -200,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,31,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, - 7,200,200,200,200,200,200,200,200,200,200,200,200,200,205,200,200,18,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,205,200,200,200,200,200,202,200,200,200,200,207,200,206,200,200,200,212,200,200,200,200,203,200,200,200,200,203,200,200,200,200,215,200,200,200,200,215,200,200,200,200,204,200,200,213,200,200,200,200,204,200,200,213,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,200,200,200,210,200,200,211,200,200,208,209,200,200,214,200,200,214, -}; - -uint8_t LSDIR_default = 0; - -uint8_t LSDIR_count = 119; - -uint8_t pp_directive_terminal_base = 200; - diff --git a/4ed.h b/4ed.h index ef8402a2..dbbf673a 100644 --- a/4ed.h +++ b/4ed.h @@ -47,7 +47,6 @@ struct Key_Summary{ inline Key_Event_Data get_single_key(Key_Summary *summary, i32 index){ - Assert(index >= 0 && index < summary->count); Key_Event_Data key; key = summary->keys[index]; return key; diff --git a/4ed_app_target.cpp b/4ed_app_target.cpp index 48506258..15193d12 100644 --- a/4ed_app_target.cpp +++ b/4ed_app_target.cpp @@ -17,14 +17,19 @@ #define BUFFER_EXPERIMENT_SCALPEL 0 -#include "4ed_meta.h" +#include "4ed_defines.h" #include "4ed_math.h" #include "4ed_system.h" #include "4ed_rendering.h" + #include "4ed.h" +// TODO(allen): can I get away from this one? +#include + +#define FCPP_FORBID_MALLOC #include "4cpp_lexer.h" #include "4coder_table.cpp" diff --git a/4ed_meta.h b/4ed_defines.h similarity index 98% rename from 4ed_meta.h rename to 4ed_defines.h index db339646..60680774 100644 --- a/4ed_meta.h +++ b/4ed_defines.h @@ -7,8 +7,8 @@ * */ -#ifndef FRED_META_H -#define FRED_META_H +#ifndef FRED_DEFINES_H +#define FRED_DEFINES_H #include #include diff --git a/4ed_metagen.cpp b/4ed_metagen.cpp index 3a7e1ad7..d2b9eb6d 100644 --- a/4ed_metagen.cpp +++ b/4ed_metagen.cpp @@ -1,23 +1,25 @@ /* -* Mr. 4th Dimention - Allen Webster -* -* 25.02.2016 -* -* File editing view for 4coder -* -*/ + * Mr. 4th Dimention - Allen Webster + * + * 25.02.2016 + * + * File editing view for 4coder + * + */ // TOP -#include "4ed_meta.h" -#include "internal_4coder_string.cpp" +#include "4coder_version.h" -#include "4cpp_lexer_types.h" +#include "internal_4coder_string.cpp" #define FCPP_LEXER_IMPLEMENTATION #include "4cpp_lexer.h" -#include "4coder_version.h" +#include +#include +#include +#include #include "4coder_mem.h" @@ -84,11 +86,6 @@ void to_camel(char *src, char *dst){ *dst = 0; } -#include -#include -#include -#include - void struct_begin(FILE *file, char *name){ fprintf(file, "struct %s{\n", name); } @@ -146,13 +143,14 @@ char *keys_that_need_codes[] = { "f16", }; -char* generate_keycode_enum(){ +void +generate_keycode_enum(){ FILE *file; - char *filename = "4coder_keycodes.h"; + char *filename_keycodes = "4coder_keycodes.h"; int32_t i, count; unsigned char code = 1; - file = fopen(filename, "wb"); + file = fopen(filename_keycodes, "wb"); fprintf(file, "enum Key_Code_Names{\n"); count = ArrayCount(keys_that_need_codes); for (i = 0; i < count; i){ @@ -191,7 +189,6 @@ char* generate_keycode_enum(){ ); fclose(file); - return(filename); } ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -258,8 +255,8 @@ char style_index_function_end[] = char style_case[] = " case Stag_%s: result = &s->%s_color; break;\n"; char style_info_case[] = " case Stag_%s: result = &s->file_info_style.%s_color; break;\n"; -char* generate_style(){ - char *filename = "4coder_style.h & 4ed_style.h"; +void +generate_style(){ char filename_4coder[] = "4coder_style.h"; char filename_4ed[] = "4ed_style.h"; FILE *file; @@ -325,10 +322,9 @@ char* generate_style(){ } fclose(file); - - return(filename); } +#if 1 ////////////////////////////////////////////////////////////////////////////////////////////////// typedef struct Argument_Breakdown{ int32_t count; @@ -346,12 +342,12 @@ typedef struct Documentation{ String *see_also; } Documentation; -struct App_API{ +typedef struct App_API{ String *macros; String *public_name; -}; +} App_API; -struct Function_Set{ +typedef struct Function_Set{ String *name; String *ret; String *args; @@ -361,45 +357,45 @@ struct Function_Set{ String *doc_string; - int32_t *is_macro; - int32_t *valid; + int32_t *is_macro; + int32_t *valid; Argument_Breakdown *breakdown; Documentation *doc; -}; +} Function_Set; -struct Typedef_Set{ +typedef struct Typedef_Set{ String *type; String *name; String *doc_string; -}; +} Typedef_Set; -struct Struct_Member{ +typedef struct Struct_Member{ String name; String type; String type_postfix; String doc_string; Struct_Member *first_child; Struct_Member *next_sibling; -}; +} Struct_Member; -struct Struct_Set{ +typedef struct Struct_Set{ Struct_Member *structs; -}; +} Struct_Set; -struct Enum_Member{ +typedef struct Enum_Member{ String name; String value; String doc_string; Enum_Member *next; -}; +} Enum_Member; -struct Enum_Set{ +typedef struct Enum_Set{ String *name; String *type; Enum_Member **first_member; String *doc_string; -}; +} Enum_Set; void zero_index(Function_Set fnc_set, int32_t sig_count){ @@ -435,9 +431,7 @@ String get_first_line(String source){ String line = {0}; int32_t pos = find_s_char(source, 0, '\n'); - line = substr(source, 0, pos); - return(line); } @@ -472,9 +466,9 @@ is_comment(String str){ return(result); } -struct Parse{ +typedef struct Parse{ Cpp_Token_Stack tokens; -}; +} Parse; static int32_t check_and_fix_docs(String *lexeme){ @@ -1762,21 +1756,20 @@ print_function_docs(FILE *file, Partition *part, String name, String doc_string) print_see_also(file, doc); } -char* +void generate_custom_headers(){ #define API_H "4coder_custom_api.h" +#define OS_API_H "4ed_os_custom_api.h" #define API_DOC "4coder_API.html" #define STRING_H "4coder_string.h" - int32_t size = Mbytes(512); + int32_t size = (512 << 20); void *mem = malloc(size); memset(mem, 0, size); Partition part_ = make_part(mem, size); Partition *part = &part_; - char *filename = API_H " & " API_DOC " & " STRING_H; - String string_code = file_dump("internal_4coder_string.cpp"); Cpp_Token_Stack string_tokens = {0}; @@ -1914,6 +1907,7 @@ generate_custom_headers(){ Function_Set function_set = allocate_function_set(line_count); App_API app_function_set = allocate_app_api(line_count); int32_t sig_count = 0; + int32_t sig_count_per_file[2]; for (int32_t J = 0; J < 2; ++J){ String *code = &code_data[J]; @@ -1942,6 +1936,8 @@ generate_custom_headers(){ } } } + + ++sig_count_per_file[J] = sig_count; } for (int32_t i = 0; i < sig_count; ++i){ @@ -1967,7 +1963,32 @@ generate_custom_headers(){ } // NOTE(allen): Header - FILE *file = fopen(API_H, "wb"); + FILE *file = fopen(OS_API_H, "wb"); + + int32_t main_api_count = sig_count_per_file[0]; + for (int32_t i = main_api_count; i < sig_count; ++i){ + String ret_string = function_set.ret[i]; + String args_string = function_set.args[i]; + String macro_string = app_function_set.macros[i]; + + fprintf(file, "#define %.*s(n) %.*s n%.*s\n", + macro_string.size, macro_string.str, + ret_string.size, ret_string.str, + args_string.size, args_string.str); + } + + for (int32_t i = main_api_count; i < sig_count; ++i){ + String name_string = function_set.name[i]; + String macro_string = app_function_set.macros[i]; + + fprintf(file, "typedef %.*s(%.*s_Function);\n", + macro_string.size, macro_string.str, + name_string.size, name_string.str); + } + + fclose(file); + + file = fopen(API_H, "wb"); for (int32_t i = 0; i < sig_count; ++i){ String ret_string = function_set.ret[i]; @@ -1977,20 +1998,17 @@ generate_custom_headers(){ fprintf(file, "#define %.*s(n) %.*s n%.*s\n", macro_string.size, macro_string.str, ret_string.size, ret_string.str, - args_string.size, args_string.str - ); + args_string.size, args_string.str); } - fprintf(file, "extern \"C\"{\n"); for (int32_t i = 0; i < sig_count; ++i){ String name_string = function_set.name[i]; String macro_string = app_function_set.macros[i]; - fprintf(file, " typedef %.*s(%.*s_Function);\n", + fprintf(file, "typedef %.*s(%.*s_Function);\n", macro_string.size, macro_string.str, name_string.size, name_string.str); } - fprintf(file, "}\n"); fprintf(file, "struct Application_Links{\n"); fprintf(file, @@ -2131,7 +2149,7 @@ generate_custom_headers(){ Cpp_Token *token = tokens; for (int32_t i = 0; i < count; ++i, ++token){ - Assert(i == (i32)(token - tokens)); + Assert(i == (int32_t)(token - tokens)); if (!(token->flags & CPP_TFLAG_PP_BODY) && (token->type == CPP_TOKEN_KEY_TYPE_DECLARATION || token->type == CPP_TOKEN_IDENTIFIER)){ @@ -2209,7 +2227,7 @@ generate_custom_headers(){ enum_set.doc_string[enum_index] = doc_string; ++enum_index; } - i = (i32)(token - tokens); + i = (int32_t)(token - tokens); }break; case 4: //FLAGENUM @@ -2232,7 +2250,7 @@ generate_custom_headers(){ flag_set.doc_string[flag_index] = doc_string; ++flag_index; } - i = (i32)(token - tokens); + i = (int32_t)(token - tokens); }break; } } @@ -2244,7 +2262,7 @@ generate_custom_headers(){ enum_count = enum_index; flag_count = flag_index; } - + // // Output 4coder_string.h // @@ -2641,9 +2659,9 @@ generate_custom_headers(){ { fprintf(file, - "
\n" - "Coming Soon" - "
\n"); + "
\n" + "Coming Soon" + "
\n"); } #undef MAJOR_SECTION @@ -3081,16 +3099,13 @@ generate_custom_headers(){ fclose(file); } - - return(filename); } +#endif int main(int argc, char **argv){ - char *filename = 0; - - filename = generate_keycode_enum(); - filename = generate_style(); - filename = generate_custom_headers(); + generate_keycode_enum(); + generate_style(); + generate_custom_headers(); } // BOTTOM diff --git a/4ed_os_custom_api.h b/4ed_os_custom_api.h new file mode 100644 index 00000000..a1aa6c0b --- /dev/null +++ b/4ed_os_custom_api.h @@ -0,0 +1,14 @@ +#define MEMORY_ALLOCATE_SIG(n) void* n(Application_Links *app, int32_t size) +#define MEMORY_SET_PROTECTION_SIG(n) bool32 n(Application_Links *app, void *ptr, int32_t size, Memory_Protect_Flags flags) +#define MEMORY_FREE_SIG(n) void n(Application_Links *app, void *mem, int32_t size) +#define FILE_EXISTS_SIG(n) bool32 n(Application_Links *app, char *filename, int32_t len) +#define DIRECTORY_CD_SIG(n) bool32 n(Application_Links *app, char *dir, int32_t *len, int32_t capacity, char *rel_path, int32_t rel_len) +#define GET_4ED_PATH_SIG(n) bool32 n(Application_Links *app, char *out, int32_t capacity) +#define SHOW_MOUSE_CURSOR_SIG(n) void n(Application_Links *app, Mouse_Cursor_Show_Type show) +typedef MEMORY_ALLOCATE_SIG(Memory_Allocate_Function); +typedef MEMORY_SET_PROTECTION_SIG(Memory_Set_Protection_Function); +typedef MEMORY_FREE_SIG(Memory_Free_Function); +typedef FILE_EXISTS_SIG(File_Exists_Function); +typedef DIRECTORY_CD_SIG(Directory_CD_Function); +typedef GET_4ED_PATH_SIG(Get_4ed_Path_Function); +typedef SHOW_MOUSE_CURSOR_SIG(Show_Mouse_Cursor_Function); diff --git a/build.c b/build.c index 3a3facd2..9fe173f7 100644 --- a/build.c +++ b/build.c @@ -283,6 +283,7 @@ int main(int argc, char **argv){ } #endif +#if 1 { BEGIN_TIME_SECTION(); build(OPTS | DEBUG_INFO, cdir, "4ed_metagen.cpp", @@ -320,6 +321,7 @@ int main(int argc, char **argv){ BUILD_DIR, "4ed", 0); END_TIME_SECTION("build 4ed"); } +#endif return(error_state); } diff --git a/fsm_table_generator.cpp b/fsm_table_generator.cpp index 0a02481b..02d55fe6 100644 --- a/fsm_table_generator.cpp +++ b/fsm_table_generator.cpp @@ -7,13 +7,6 @@ // TOP -/* TODO(allen): - -1. Eliminate the complicated preprocessor directive parsing tables -2. Establish a clean systematic way of maintaining whatever is left - -*/ - #include #include #include @@ -25,560 +18,11 @@ #include "4cpp_lexer_types.h" #include "4cpp_lexer_fsms.h" -struct String_And_Flag{ - char *str; - uint32_t flags; +struct Whitespace_FSM{ + unsigned char pp_state; + unsigned char white_done; }; -static String_And_Flag preprop_strings[] = { - {"include", CPP_PP_INCLUDE}, - {"INCLUDE", CPP_PP_INCLUDE}, - {"ifndef", CPP_PP_IFNDEF}, - {"IFNDEF", CPP_PP_IFNDEF}, - {"define", CPP_PP_DEFINE}, - {"DEFINE", CPP_PP_DEFINE}, - {"import", CPP_PP_IMPORT}, - {"IMPORT", CPP_PP_IMPORT}, - {"pragma", CPP_PP_PRAGMA}, - {"PRAGMA", CPP_PP_PRAGMA}, - {"undef", CPP_PP_UNDEF}, - {"UNDEF", CPP_PP_UNDEF}, - {"endif", CPP_PP_ENDIF}, - {"ENDIF", CPP_PP_ENDIF}, - {"error", CPP_PP_ERROR}, - {"ERROR", CPP_PP_ERROR}, - {"ifdef", CPP_PP_IFDEF}, - {"IFDEF", CPP_PP_IFDEF}, - {"using", CPP_PP_USING}, - {"USING", CPP_PP_USING}, - {"else", CPP_PP_ELSE}, - {"ELSE", CPP_PP_ELSE}, - {"elif", CPP_PP_ELIF}, - {"ELIF", CPP_PP_ELIF}, - {"line", CPP_PP_LINE}, - {"LINE", CPP_PP_LINE}, - {"if", CPP_PP_IF}, - {"IF", CPP_PP_IF}, -}; -static String_And_Flag keyword_strings[] = { - {"true", CPP_TOKEN_BOOLEAN_CONSTANT}, - {"false", CPP_TOKEN_BOOLEAN_CONSTANT}, - - {"and", CPP_TOKEN_AND}, - {"and_eq", CPP_TOKEN_ANDEQ}, - {"bitand", CPP_TOKEN_BIT_AND}, - {"bitor", CPP_TOKEN_BIT_OR}, - {"or", CPP_TOKEN_OR}, - {"or_eq", CPP_TOKEN_OREQ}, - {"sizeof", CPP_TOKEN_SIZEOF}, - {"alignof", CPP_TOKEN_ALIGNOF}, - {"decltype", CPP_TOKEN_DECLTYPE}, - {"throw", CPP_TOKEN_THROW}, - {"new", CPP_TOKEN_NEW}, - {"delete", CPP_TOKEN_DELETE}, - {"xor", CPP_TOKEN_BIT_XOR}, - {"xor_eq", CPP_TOKEN_XOREQ}, - {"not", CPP_TOKEN_NOT}, - {"not_eq", CPP_TOKEN_NOTEQ}, - {"typeid", CPP_TOKEN_TYPEID}, - {"compl", CPP_TOKEN_BIT_NOT}, - - {"void", CPP_TOKEN_KEY_TYPE}, - {"bool", CPP_TOKEN_KEY_TYPE}, - {"char", CPP_TOKEN_KEY_TYPE}, - {"int", CPP_TOKEN_KEY_TYPE}, - {"float", CPP_TOKEN_KEY_TYPE}, - {"double", CPP_TOKEN_KEY_TYPE}, - - {"long", CPP_TOKEN_KEY_MODIFIER}, - {"short", CPP_TOKEN_KEY_MODIFIER}, - {"unsigned", CPP_TOKEN_KEY_MODIFIER}, - - {"const", CPP_TOKEN_KEY_QUALIFIER}, - {"volatile", CPP_TOKEN_KEY_QUALIFIER}, - - {"asm", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"break", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"case", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"catch", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"continue", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"default", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"do", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"else", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"for", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"goto", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"if", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"return", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"switch", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"try", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"while", CPP_TOKEN_KEY_CONTROL_FLOW}, - {"static_assert", CPP_TOKEN_KEY_CONTROL_FLOW}, - - {"const_cast", CPP_TOKEN_KEY_CAST}, - {"dynamic_cast", CPP_TOKEN_KEY_CAST}, - {"reinterpret_cast", CPP_TOKEN_KEY_CAST}, - {"static_cast", CPP_TOKEN_KEY_CAST}, - - {"class", CPP_TOKEN_KEY_TYPE_DECLARATION}, - {"enum", CPP_TOKEN_KEY_TYPE_DECLARATION}, - {"struct", CPP_TOKEN_KEY_TYPE_DECLARATION}, - {"typedef", CPP_TOKEN_KEY_TYPE_DECLARATION}, - {"union", CPP_TOKEN_KEY_TYPE_DECLARATION}, - {"template", CPP_TOKEN_KEY_TYPE_DECLARATION}, - {"typename", CPP_TOKEN_KEY_TYPE_DECLARATION}, - - {"friend", CPP_TOKEN_KEY_ACCESS}, - {"namespace", CPP_TOKEN_KEY_ACCESS}, - {"private", CPP_TOKEN_KEY_ACCESS}, - {"protected", CPP_TOKEN_KEY_ACCESS}, - {"public", CPP_TOKEN_KEY_ACCESS}, - {"using", CPP_TOKEN_KEY_ACCESS}, - - {"extern", CPP_TOKEN_KEY_LINKAGE}, - {"export", CPP_TOKEN_KEY_LINKAGE}, - {"inline", CPP_TOKEN_KEY_LINKAGE}, - {"static", CPP_TOKEN_KEY_LINKAGE}, - {"virtual", CPP_TOKEN_KEY_LINKAGE}, - - {"alignas", CPP_TOKEN_KEY_OTHER}, - {"explicit", CPP_TOKEN_KEY_OTHER}, - {"noexcept", CPP_TOKEN_KEY_OTHER}, - {"nullptr", CPP_TOKEN_KEY_OTHER}, - {"operator", CPP_TOKEN_KEY_OTHER}, - {"register", CPP_TOKEN_KEY_OTHER}, - {"this", CPP_TOKEN_KEY_OTHER}, - {"thread_local", CPP_TOKEN_KEY_OTHER}, -}; - -typedef struct FSM_State{ - uint32_t transition_rule[256]; - uint8_t override; -} FSM_State; - -typedef struct FSM{ - FSM_State *states; - unsigned short count, max; - - FSM_State *term_states; - unsigned short term_count, term_max; - - unsigned char terminal_base; - - char *comment; -} FSM; - -typedef struct FSM_Stack{ - FSM *fsms; - int32_t count, max; - - uint8_t table_transition_state; - uint8_t final_state; -} FSM_Stack; - -typedef struct Match_Node{ - Match_Node *first_child; - Match_Node *next_sibling; - - int32_t *words; - int32_t count, max; - int32_t index; - - FSM_State *state; -} Match_Node; - -typedef struct Match_Tree{ - Match_Node *nodes; - int32_t count, max; -} Match_Tree; - -typedef struct Match_Tree_Stack{ - Match_Tree *trees; - int32_t count, max; -} Match_Tree_Stack; - -typedef struct Future_FSM{ - Match_Node *source; -} Future_FSM; - -typedef struct Future_FSM_Stack{ - Future_FSM *futures; - int32_t count, max; -} Future_FSM_Stack; - -static FSM* -get_fsm(FSM_Stack *stack){ - FSM* result = 0; - assert(stack->count < stack->max); - result = &stack->fsms[stack->count]; - ++stack->count; - return(result); -} - -static Match_Tree* -get_tree(Match_Tree_Stack *stack){ - Match_Tree* result = 0; - assert(stack->count < stack->max); - result = &stack->trees[stack->count++]; - return(result); -} - -static FSM -fsm_init(uint16_t max, uint8_t terminal_base){ - FSM fsm; - int32_t memsize; - fsm.max = max; - fsm.count = 0; - memsize = sizeof(FSM_State)*fsm.max; - fsm.states = (FSM_State*)malloc(memsize); - - fsm.term_max = max; - fsm.term_count = 0; - memsize = sizeof(FSM_State)*fsm.term_max; - fsm.term_states = (FSM_State*)malloc(memsize); - - fsm.comment = 0; - fsm.terminal_base = terminal_base; - return(fsm); -} - -static void -fsm_add_comment(FSM *fsm, char *str){ - int32_t comment_len; - int32_t str_len; - char *new_comment; - - str_len = (int32_t)strlen(str); - - if (fsm->comment != 0){ - comment_len = (int32_t)strlen(fsm->comment); - new_comment = (char*)malloc(str_len + comment_len + 1); - - memcpy(new_comment, fsm->comment, comment_len); - memcpy(new_comment + comment_len, str, str_len); - new_comment[comment_len + str_len] = 0; - - free(fsm->comment); - fsm->comment = new_comment; - } - else{ - fsm->comment = (char*)malloc(str_len + 1); - memcpy(fsm->comment, str, str_len); - fsm->comment[str_len] = 0; - } -} - -static Match_Tree -tree_init(uint16_t max){ - Match_Tree tree; - int32_t memsize; - tree.max = max; - tree.count = 0; - memsize = sizeof(Match_Node)*tree.max; - tree.nodes = (Match_Node*)malloc(memsize); - return(tree); -} - -static uint8_t -push_future_fsm(Future_FSM_Stack *stack, Match_Node *node){ - uint8_t index = 0; - Future_FSM *future = 0; - assert(stack->count < stack->max); - assert(stack->max < 256); - index = (uint8_t)(stack->count++); - future = &stack->futures[index]; - future->source = node; - return(index); -} - -static Match_Node* -match_get_node(Match_Tree *tree){ - Match_Node *result; - assert(tree->count < tree->max); - result = &tree->nodes[tree->count++]; - return(result); -} - -static void -match_init_node(Match_Node *node, int32_t match_count){ - *node = {}; - node->words = (int32_t*)malloc(sizeof(int32_t)*match_count); - node->max = match_count; -} - -static void -match_copy_init_node(Match_Node *node, Match_Node *source){ - *node = {}; - node->max = source->count; - node->count = source->count; - node->words = (int32_t*)malloc(sizeof(int32_t)*source->count); - node->index = source->index; - memcpy(node->words, source->words, sizeof(int32_t)*source->count); -} - -static void -match_add_word(Match_Node *node, int32_t word){ - assert(node->count < node->max); - node->words[node->count++] = word; -} - -static FSM_State* -fsm_get_state(FSM *fsm, uint32_t terminal_base){ - FSM_State *result; - uint16_t i; - assert(fsm->count < fsm->max); - result = &fsm->states[fsm->count++]; - for (i = 0; i < 256; ++i){ - result->transition_rule[i] = terminal_base; - } - result->override = 0; - return(result); -} - -static FSM_State* -fsm_get_state(FSM *fsm){ - FSM_State *result = fsm_get_state(fsm, fsm->terminal_base); - return(result); -} - -static FSM_State* -fsm_get_term_state(FSM *fsm, unsigned char override){ - FSM_State *result; - assert(fsm->term_count < fsm->term_max); - result = &fsm->term_states[fsm->term_count++]; - result->override = override; - return(result); -} - -static uint8_t -fsm_index(FSM *fsm, FSM_State *s){ - uint8_t result; - result = (uint8_t)(uint64_t)(s - fsm->states); - if (s->override){ - result = fsm->terminal_base + s->override; - } - return(result); -} - -static void -fsm_add_transition(FSM_State *state, char c, unsigned char dest){ - state->transition_rule[c] = dest; -} - -struct Terminal_Lookup_Table{ - uint32_t state_to_type[60]; - uint8_t type_to_state[CPP_TOKEN_TYPE_COUNT]; - uint8_t state_count; -}; - -static void -process_match_node(String_And_Flag *input, Match_Node *node, Match_Tree *tree, FSM *fsm){ - int32_t next_index = node->index + 1; - int32_t match_count = node->count; - FSM_State *this_state = node->state; - uint8_t terminal_base = fsm->terminal_base; - - int32_t i, j, *words = node->words; - - String_And_Flag saf; - int32_t l; - - char c; - Match_Node *next_nodes[256]; - Match_Node *newest_child = 0; - Match_Node *n; - - uint8_t unjunkify = 0; - - memset(next_nodes, 0, sizeof(next_nodes)); - - for (i = 0; i < match_count; ++i){ - j = words[i]; - saf = input[j]; - l = (int32_t)strlen(saf.str); - - if (next_index < l){ - c = saf.str[next_index]; - - if (next_nodes[c] == 0){ - next_nodes[c] = match_get_node(tree); - match_init_node(next_nodes[c], match_count); - - next_nodes[c]->index = next_index; - next_nodes[c]->state = fsm_get_state(fsm); - - if (newest_child == 0){ - assert(node->first_child == 0); - node->first_child = next_nodes[c]; - } - else{ - assert(newest_child->next_sibling == 0); - newest_child->next_sibling = next_nodes[c]; - } - newest_child = next_nodes[c]; - } - - match_add_word(next_nodes[c], j); - fsm_add_transition(this_state, c, fsm_index(fsm, next_nodes[c]->state)); - } - else if (next_index == l){ - assert(unjunkify == 0); - unjunkify = (unsigned char)saf.flags; - } - } - - if (unjunkify){ - for (i = 0; i < 256; ++i){ - if (this_state->transition_rule[i] == terminal_base){ - this_state->transition_rule[i] = terminal_base + unjunkify; - } - } - } - - for (n = node->first_child; n; n = n->next_sibling){ - process_match_node(input, n, tree, fsm); - } -} - -static FSM -generate_pp_directive_fsm(){ - Match_Tree tree; - FSM fsm; - Match_Node *root_node; - FSM_State *root_state; - int32_t i; - - fsm = fsm_init(200, 200); - tree = tree_init(200); - - root_state = fsm_get_state(&fsm); - - root_node = match_get_node(&tree); - match_init_node(root_node, ArrayCount(preprop_strings)); - for (i = 0; i < ArrayCount(preprop_strings); ++i){ - root_node->words[i] = i; - } - root_node->count = ArrayCount(preprop_strings); - root_node->state = root_state; - root_node->index = -1; - process_match_node(preprop_strings, root_node, &tree, &fsm); - - root_state->transition_rule[' '] = 0; - root_state->transition_rule['\t'] = 0; - root_state->transition_rule['\r'] = 0; - root_state->transition_rule['\v'] = 0; - root_state->transition_rule['\f'] = 0; - - return(fsm); -} - -/* - -Each state needs a full set of transition rules. Most transitions should go into a -"not-a-keyword-state". The exceptions are: -1. When we see an alphanumeric character that is the next character of an actual keyword - i. May need to transition to a new table at this point. -2. When we have just seen an entire valid keyword, and the next thing we see is not alphanumeric. - -*/ - -#define RealTerminateBase 65536 - -static int32_t -char_is_alphanumeric(char x){ - int32_t result = 0; - if ((x >= '0' && x <= '9') || - (x >= 'A' && x <= 'Z') || - (x >= 'a' && x <= 'z') || - x == '_'){ - result = 1; - } - return(result); -} - -static void -process_match_node(String_And_Flag *input, Match_Node *node, Match_Tree *tree, FSM *fsm, - Terminal_Lookup_Table *terminal_table, int32_t levels_to_go, - Future_FSM_Stack *unfinished_fsms){ - - int32_t next_index = node->index + 1; - int32_t match_count = node->count; - int32_t *words = node->words; - FSM_State *this_state = node->state; - - int32_t word_index = 0; - int32_t good_transition = 0; - int32_t len = 0; - int32_t i = 0; - - String_And_Flag saf = {0}; - - Match_Node *next_nodes[256]; - Match_Node *newest_child = 0; - Match_Node *n = 0; - char c = 0; - - uint8_t override = 0; - - memset(next_nodes, 0, sizeof(next_nodes)); - - for (i = 0; i < match_count; ++i){ - word_index = words[i]; - saf = input[word_index]; - - len = (int32_t)strlen(saf.str); - if (next_index < len){ - c = saf.str[next_index]; - - if (next_nodes[c] == 0){ - next_nodes[c] = match_get_node(tree); - match_init_node(next_nodes[c], match_count); - - next_nodes[c]->index = next_index; - - if (levels_to_go == 1){ - override = push_future_fsm(unfinished_fsms, next_nodes[c]); - next_nodes[c]->state = fsm_get_term_state(fsm, override); - } - else{ - next_nodes[c]->state = fsm_get_state(fsm, RealTerminateBase); - } - - if (newest_child == 0){ - assert(node->first_child == 0); - node->first_child = next_nodes[c]; - } - else{ - assert(newest_child->next_sibling == 0); - newest_child->next_sibling = next_nodes[c]; - } - newest_child = next_nodes[c]; - } - - match_add_word(next_nodes[c], word_index); - fsm_add_transition(this_state, c, fsm_index(fsm, next_nodes[c]->state)); - } - else{ - assert(next_index == len); - assert(good_transition == 0); - good_transition = terminal_table->type_to_state[saf.flags] + RealTerminateBase; - } - } - - if (good_transition){ - for (i = 0; i < 256; ++i){ - if (!char_is_alphanumeric((char)i)){ - this_state->transition_rule[i] = good_transition; - } - } - } - - if (levels_to_go != 1){ - for (n = node->first_child; n; n = n->next_sibling){ - process_match_node(input, n, tree, fsm, terminal_table, levels_to_go-1, unfinished_fsms); - } - } -} - Whitespace_FSM whitespace_skip_fsm(Whitespace_FSM wfsm, char c){ if (wfsm.pp_state != LSPP_default){ @@ -656,390 +100,405 @@ int_fsm(Lex_FSM fsm, char c){ Lex_FSM main_fsm(Lex_FSM fsm, unsigned char pp_state, unsigned char c){ - if (c == 0) fsm.emit_token = 1; - else + if (c == 0){ + fsm.emit_token = 1; + } + else{ switch (pp_state){ - case LSPP_error: - fsm.state = LS_error_message; - if (c == '\n') fsm.emit_token = 1; - break; - - case LSPP_include: - switch (fsm.state){ - case LSINC_default: - switch (c){ - case '"': fsm.state = LSINC_quotes; break; - case '<': fsm.state = LSINC_pointy; break; - default: fsm.state = LSINC_junk; break; - } - break; - - case LSINC_quotes: - if (c == '"') fsm.emit_token = 1; - else if (c == '\n'){ - fsm.emit_token = 1; - fsm.state = LSINC_junk; - } - break; - - case LSINC_pointy: - if (c == '>') fsm.emit_token = 1; - else if (c == '\n'){ - fsm.emit_token = 1; - fsm.state = LSINC_junk; - } - break; - - case LSINC_junk: + case LSPP_error: + fsm.state = LS_error_message; if (c == '\n') fsm.emit_token = 1; break; - } - break; - - default: - switch (fsm.state){ - case LS_default: - if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_'){ - fsm.state = LS_identifier; - } - else if (c >= '1' && c <= '9'){ - fsm.state = LS_number; - } - else if (c == '0'){ - fsm.state = LS_number0; - } - else switch (c){ - case '\'': fsm.state = LS_char; break; - case '"': fsm.state = LS_string; break; - - case '/': fsm.state = LS_comment_pre; break; - - case '.': fsm.state = LS_dot; break; - - case '<': fsm.state = LS_less; break; - case '>': fsm.state = LS_more; break; - - case '-': fsm.state = LS_minus; break; - - case '&': fsm.state = LS_and; break; - case '|': fsm.state = LS_or; break; - - case '+': fsm.state = LS_plus; break; - - 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 '#': - if (pp_state == LSPP_default){ - fsm.state = LS_pp; - fsm.emit_token = 1; - } - else{ - fsm.state = LS_pound; + + case LSPP_include: + switch (fsm.state){ + case LSINC_default: + switch (c){ + case '"': fsm.state = LSINC_quotes; break; + case '<': fsm.state = LSINC_pointy; break; + default: fsm.state = LSINC_junk; break; } break; + case LSINC_quotes: + if (c == '"') fsm.emit_token = 1; + else if (c == '\n'){ + fsm.emit_token = 1; + fsm.state = LSINC_junk; + } + break; + + case LSINC_pointy: + if (c == '>') fsm.emit_token = 1; + else if (c == '\n'){ + fsm.emit_token = 1; + fsm.state = LSINC_junk; + } + break; + + case LSINC_junk: + if (c == '\n') fsm.emit_token = 1; + break; + } + break; + + default: + switch (fsm.state){ + case LS_default: + if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_'){ + fsm.state = LS_identifier; + } + else if (c >= '1' && c <= '9'){ + fsm.state = LS_number; + } + else if (c == '0'){ + fsm.state = LS_number0; + } + else switch (c){ + case '\'': fsm.state = LS_char; break; + case '"': fsm.state = LS_string; break; + + case '/': fsm.state = LS_comment_pre; break; + + case '.': fsm.state = LS_dot; break; + + case '<': fsm.state = LS_less; break; + case '>': fsm.state = LS_more; break; + + case '-': fsm.state = LS_minus; break; + + case '&': fsm.state = LS_and; break; + case '|': fsm.state = LS_or; break; + + case '+': fsm.state = LS_plus; break; + + 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 '#': + if (pp_state == LSPP_default){ + fsm.state = LS_pp; + } + else{ + fsm.state = LS_pound; + } + break; + #define OperCase(op,type) case op: fsm.emit_token = 1; 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_JUNK); - 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); + OperCase('$', CPP_TOKEN_JUNK); + OperCase('\\', CPP_TOKEN_JUNK); #undef OperCase - } - break; - - case LS_identifier: - if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_')){ - fsm.emit_token = 1; - } - break; - - case LS_pound: - switch (c){ - case '#': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_pp:break; - - case LS_char: - case LS_char_multiline: - switch(c){ - case '\n': case '\'': fsm.emit_token = 1; break; - case '\\': fsm.state = LS_char_slashed; break; - } - break; - - case LS_char_slashed: - switch (c){ - case '\r': case '\f': case '\v': break; - case '\n': fsm.state = LS_char_multiline; break; - default: fsm.state = LS_char; break; - } - break; - - case LS_string: - case LS_string_multiline: - switch(c){ - case '\n': case '\"': fsm.emit_token = 1; break; - case '\\': fsm.state = LS_string_slashed; break; - } - break; - - case LS_string_slashed: - switch (c){ - case '\r': case '\f': case '\v': break; - case '\n': fsm.state = LS_string_multiline; break; - default: fsm.state = LS_string; break; - } - break; - - case LS_number: - if (c >= '0' && c <= '9'){ - fsm.state = LS_number; - } - else{ + } + break; + + case LS_identifier: + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_')){ + fsm.emit_token = 1; + } + break; + + case LS_pound: switch (c){ - case '.': fsm.state = LS_float; break; + case '#': fsm.emit_token = 1; break; default: fsm.emit_token = 1; break; } - } - break; - - case LS_number0: - if (c >= '0' && c <= '9'){ - fsm.state = LS_number; - } - else if (c == 'x'){ - fsm.state = LS_hex; - } - else if (c == '.'){ - fsm.state = LS_float; - } - else{ - fsm.emit_token = 1; - } - break; - - case LS_float: - if (!(c >= '0' && c <= '9')){ - switch (c){ - case 'e': fsm.state = LS_crazy_float0; break; - default: fsm.emit_token = 1; break; + break; + + case LS_pp: + if (c == ' ' || c == '\r' || c == '\v' || c == '\f'){ + // NOTE(allen): do nothing } - } - break; - - case LS_crazy_float0: - { - if ((c >= '0' && c <= '9') || c == '-'){ - fsm.state = LS_crazy_float1; + else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){ + fsm.state = LS_ppdef; + } + break; + + case LS_ppdef: + if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))){ + fsm.emit_token = 1; + } + break; + + case LS_char: + case LS_char_multiline: + switch(c){ + case '\n': case '\'': fsm.emit_token = 1; break; + case '\\': fsm.state = LS_char_slashed; break; + } + break; + + case LS_char_slashed: + switch (c){ + case '\r': case '\f': case '\v': break; + case '\n': fsm.state = LS_char_multiline; break; + default: fsm.state = LS_char; break; + } + break; + + case LS_string: + case LS_string_multiline: + switch(c){ + case '\n': case '\"': fsm.emit_token = 1; break; + case '\\': fsm.state = LS_string_slashed; break; + } + break; + + case LS_string_slashed: + switch (c){ + case '\r': case '\f': case '\v': break; + case '\n': fsm.state = LS_string_multiline; break; + default: fsm.state = LS_string; break; + } + break; + + case LS_number: + if (c >= '0' && c <= '9'){ + fsm.state = LS_number; + } + else{ + switch (c){ + case '.': fsm.state = LS_float; break; + default: fsm.emit_token = 1; break; + } + } + break; + + case LS_number0: + if (c >= '0' && c <= '9'){ + fsm.state = LS_number; + } + else if (c == 'x'){ + fsm.state = LS_hex; + } + else if (c == '.'){ + fsm.state = LS_float; } else{ fsm.emit_token = 1; } - } - break; - - case LS_crazy_float1: - { + break; + + case LS_float: if (!(c >= '0' && c <= '9')){ + switch (c){ + case 'e': fsm.state = LS_crazy_float0; break; + default: fsm.emit_token = 1; break; + } + } + break; + + case LS_crazy_float0: + { + if ((c >= '0' && c <= '9') || c == '-'){ + fsm.state = LS_crazy_float1; + } + else{ + fsm.emit_token = 1; + } + } + break; + + case LS_crazy_float1: + { + if (!(c >= '0' && c <= '9')){ + fsm.emit_token = 1; + } + } + break; + + case LS_hex: + if (!(c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')){ fsm.emit_token = 1; } - } - break; - - case LS_hex: - if (!(c >= '0' && c <= '9' || c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F')){ - fsm.emit_token = 1; - } - break; - - case LS_dot: - if (c >= '0' && c <= '9'){ - fsm.state = LS_float; - } - else + break; + + case LS_dot: + if (c >= '0' && c <= '9'){ + fsm.state = LS_float; + } + else + switch (c){ + case '.': fsm.state = LS_ellipsis; break; + case '*': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; break; + } + break; + + case LS_ellipsis: fsm.emit_token = 1; break; + + case LS_less: switch (c){ - case '.': fsm.state = LS_ellipsis; break; - case '*': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_ellipsis: fsm.emit_token = 1; 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; - - case LS_less_less: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; 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; - - case LS_more_more: - switch (c){ - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; 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; - - case LS_comment: - switch (c){ - case '\\': fsm.state = LS_comment_slashed; break; - case '\n': fsm.emit_token = 1; break; - } - break; - - case LS_comment_slashed: - 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; - - 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; - - 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; - - case LS_arrow: - switch (c){ - case '*': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; 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; - } - 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; - - case LS_plus: - switch (c){ - case '+': fsm.emit_token = 1; break; - case '=': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; break; - } - break; - - case LS_colon: - switch (c){ - case ':': fsm.emit_token = 1; break; - default: fsm.emit_token = 1; 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; + case '<': fsm.state = LS_less_less; break; + case '=': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; break; + } + break; + + case LS_less_less: + switch (c){ + case '=': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; 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; + + case LS_more_more: + switch (c){ + case '=': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; 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; + + case LS_comment: + switch (c){ + case '\\': fsm.state = LS_comment_slashed; break; + case '\n': fsm.emit_token = 1; break; + } + break; + + case LS_comment_slashed: + 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; + + 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; + + 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; + + case LS_arrow: + switch (c){ + case '*': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; 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; + } + 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; + + case LS_plus: + switch (c){ + case '+': fsm.emit_token = 1; break; + case '=': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; break; + } + break; + + case LS_colon: + switch (c){ + case ':': fsm.emit_token = 1; break; + default: fsm.emit_token = 1; 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; } break; } - break; } return(fsm); } @@ -1241,41 +700,17 @@ typedef struct PP_Names{ } PP_Names; static PP_Names pp_names[] = { - {LSPP_default, "main_fsm"}, - {LSPP_include, "pp_include_fsm"}, + {LSPP_default, "main_fsm"}, + {LSPP_include, "pp_include_fsm"}, {LSPP_macro_identifier, "pp_macro_fsm"}, - {LSPP_identifier, "pp_identifier_fsm"}, - {LSPP_body_if, "pp_body_if_fsm"}, - {LSPP_body, "pp_body_fsm"}, - {LSPP_number, "pp_number_fsm"}, - {LSPP_error, "pp_error_fsm"}, - {LSPP_junk, "pp_junk_fsm"}, + {LSPP_identifier, "pp_identifier_fsm"}, + {LSPP_body_if, "pp_body_if_fsm"}, + {LSPP_body, "pp_body_fsm"}, + {LSPP_number, "pp_number_fsm"}, + {LSPP_error, "pp_error_fsm"}, + {LSPP_junk, "pp_junk_fsm"}, }; -static FSM_Tables -generate_table_from_abstract_fsm(FSM fsm, uint8_t real_term_base){ - uint8_t state_count = (uint8_t )fsm.count; - FSM_Tables table; - - allocate_full_tables(&table, state_count); - - int32_t i = 0; - uint32_t new_state; - for (uint16_t c = 0; c < 256; ++c){ - for (uint8_t state = 0; state < state_count; ++state){ - new_state = fsm.states[state].transition_rule[c]; - if (new_state >= RealTerminateBase){ - new_state = new_state - RealTerminateBase + real_term_base; - } - table.full_transition_table[i++] = (uint8_t)new_state; - } - } - - do_table_reduction(&table, state_count); - - return(table); -} - int main(){ FILE *file; @@ -1288,7 +723,7 @@ main(){ render_fsm_table(file, itables, "int_fsm"); begin_table(file, "uint8_t", "multiline_state_table"); - for (uint8_t state = 0; state < LS_count; ++state){ + for (uint8_t state = 0; state < LS_count*2; ++state){ do_table_item(file, (state == LS_string_multiline || state == LS_char_multiline)); } end_row(file); @@ -1314,14 +749,6 @@ main(){ } end_table(file); - FSM pp_directive_fsm = generate_pp_directive_fsm(); - FSM_Tables pp_directive_tables = generate_table_from_abstract_fsm(pp_directive_fsm, 0); - - render_fsm_table(file, pp_directive_tables, "pp_directive"); - render_variable(file, "uint8_t", "LSDIR_default", 0); - render_variable(file, "uint8_t", "LSDIR_count", pp_directive_fsm.count); - render_variable(file, "uint8_t", "pp_directive_terminal_base", pp_directive_fsm.terminal_base); - fclose(file); return(0); } diff --git a/internal_4coder_string.cpp b/internal_4coder_string.cpp index dd3339b6..42e9beb4 100644 --- a/internal_4coder_string.cpp +++ b/internal_4coder_string.cpp @@ -16,7 +16,7 @@ FSTRING_BEGIN #endif #if defined(FSTRING_IMPLEMENTATION) && defined(FSTRING_GUARD) -#undef FSTRING_IMPLEMENTATION +# undef FSTRING_IMPLEMENTATION #endif #include diff --git a/win32_4ed.cpp b/win32_4ed.cpp index 9f84708e..2f3791f5 100644 --- a/win32_4ed.cpp +++ b/win32_4ed.cpp @@ -10,21 +10,54 @@ // TOP #if FRED_SUPER -# include "4coder_custom.h" + +# include "4ed_defines.h" + +# define FSTRING_IMPLEMENTATION +# define FSTRING_C +# include "4coder_string.h" + +#include "4coder_version.h" +# include "4coder_keycodes.h" +# include "4coder_style.h" +# include "4coder_rect.h" + +# include + +# include "4coder_mem.h" + +// TODO(allen): This is duplicated from 4coder_custom.h +// I need to work out a way to avoid this. +#define VIEW_ROUTINE_SIG(name) void name(struct Application_Links *app, int32_t view_id) +#define GET_BINDING_DATA(name) int32_t name(void *data, int32_t size) +#define _GET_VERSION_SIG(n) int32_t n(int32_t maj, int32_t min, int32_t patch) + +typedef VIEW_ROUTINE_SIG(View_Routine_Function); +typedef GET_BINDING_DATA(Get_Binding_Data_Function); +typedef _GET_VERSION_SIG(_Get_Version_Function); + +struct Custom_API{ + View_Routine_Function *view_routine; + Get_Binding_Data_Function *get_bindings; + _Get_Version_Function *get_alpha_4coder_version; +}; + + +typedef void Custom_Command_Function; +#include "4coder_types.h" +struct Application_Links; +# include "4ed_os_custom_api.h" + +//# include "4coder_custom.h" #else # include "4coder_default_bindings.cpp" + +# define FSTRING_IMPLEMENTATION +# define FSTRING_C +# include "4coder_string.h" + #endif -#define FSTRING_IMPLEMENTATION -#define FSTRING_C -#include "4coder_string.h" - -#include "4ed_meta.h" - -// -// Instead of including 4coder_custom.h -// - #include "4ed_math.h" #include "4ed_system.h" @@ -230,36 +263,6 @@ Win32Ptr(void *h){ return(result); } -// -// Rudimentary Timing -// - -#define WIN32_TIMING 0 - -#if FRED_INTERNAL && WIN32_TIMING - -inline void -show_debug_timing(char *function, DWORD64 total){ - char output[512]; - String out = make_fixed_width_string(output); - append(&out, function); - append(&out, ' '); - append_u64_to_str(&out, (u64)(total)); - append(&out, '\n'); - terminate_with_null(&out); - OutputDebugStringA(output); -} - -#define TEST_TIME_B() DWORD64 start = __rdtsc() -#define TEST_TIME_E() DWORD64 total = __rdtsc() - start; show_debug_timing(__FUNCTION__, total) - -#else - -#define TEST_TIME_B() -#define TEST_TIME_E() - -#endif - // // Memory (not exposed to application, but needed in system_shared.cpp) @@ -587,7 +590,6 @@ Sys_Cancel_Job_Sig(system_cancel_job){ i32 cancel_cv = group->cancel_cv0 + thread_index; Thread_Context *thread = group->threads + thread_index; - system_acquire_lock(cancel_lock); thread->cancel = 1;