HyperDbg/hyperdbg/script-engine/parse_table.c
2020-12-02 02:44:37 +03:30

306 lines
11 KiB
C

#include "parse_table.h"
#include "common.h"
const struct _TOKEN Lhs[RULES_COUNT]=
{
{NON_TERMINAL, "S"},
{NON_TERMINAL, "S'"},
{NON_TERMINAL, "S'"},
{NON_TERMINAL, "C"},
{NON_TERMINAL, "C"},
{NON_TERMINAL, "C'"},
{NON_TERMINAL, "E0"},
{NON_TERMINAL, "E0'"},
{NON_TERMINAL, "E0'"},
{NON_TERMINAL, "E1"},
{NON_TERMINAL, "E1'"},
{NON_TERMINAL, "E1'"},
{NON_TERMINAL, "E2"},
{NON_TERMINAL, "E2'"},
{NON_TERMINAL, "E2'"},
{NON_TERMINAL, "E3"},
{NON_TERMINAL, "E3'"},
{NON_TERMINAL, "E3'"},
{NON_TERMINAL, "E4"},
{NON_TERMINAL, "E4'"},
{NON_TERMINAL, "E4'"},
{NON_TERMINAL, "E5"},
{NON_TERMINAL, "E5'"},
{NON_TERMINAL, "E5'"},
{NON_TERMINAL, "E6"},
{NON_TERMINAL, "E6'"},
{NON_TERMINAL, "E6'"},
{NON_TERMINAL, "E7"},
{NON_TERMINAL, "E7'"},
{NON_TERMINAL, "E7'"},
{NON_TERMINAL, "E8"},
{NON_TERMINAL, "E8'"},
{NON_TERMINAL, "E8'"},
{NON_TERMINAL, "E9"},
{NON_TERMINAL, "E9'"},
{NON_TERMINAL, "E9'"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"},
{NON_TERMINAL, "E10"}
};
const struct _TOKEN Rhs[RULES_COUNT][MAX_RHS_LEN]=
{
{{NON_TERMINAL, "C"},{SPECIAL_TOKEN, ";"},{NON_TERMINAL, "S'"}},
{{NON_TERMINAL, "C"},{SPECIAL_TOKEN, ";"},{NON_TERMINAL, "S'"}},
{{EPSILON, "eps"}},
{{SEMANTIC_RULE, "@PUSH"},{ID, "_id"},{SPECIAL_TOKEN, "="},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@MOV"},{NON_TERMINAL, "C'"}},
{{KEYWORD, "print"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@PRINT"},{SPECIAL_TOKEN, ")"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E1"},{NON_TERMINAL, "E0'"}},
{{SPECIAL_TOKEN, "|"},{NON_TERMINAL, "E1"},{SEMANTIC_RULE, "@OR"},{NON_TERMINAL, "E0'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E2"},{NON_TERMINAL, "E1'"}},
{{SPECIAL_TOKEN, "^"},{NON_TERMINAL, "E2"},{SEMANTIC_RULE, "@XOR"},{NON_TERMINAL, "E1'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E3"},{NON_TERMINAL, "E2'"}},
{{SPECIAL_TOKEN, "&"},{NON_TERMINAL, "E3"},{SEMANTIC_RULE, "@AND"},{NON_TERMINAL, "E2'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E4"},{NON_TERMINAL, "E3'"}},
{{SPECIAL_TOKEN, ">>"},{NON_TERMINAL, "E4"},{SEMANTIC_RULE, "@ASR"},{NON_TERMINAL, "E3'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E5"},{NON_TERMINAL, "E4'"}},
{{SPECIAL_TOKEN, "<<"},{NON_TERMINAL, "E5"},{SEMANTIC_RULE, "@ASL"},{NON_TERMINAL, "E4'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E6"},{NON_TERMINAL, "E5'"}},
{{SPECIAL_TOKEN, "+"},{NON_TERMINAL, "E6"},{SEMANTIC_RULE, "@ADD"},{NON_TERMINAL, "E5'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E7"},{NON_TERMINAL, "E6'"}},
{{SPECIAL_TOKEN, "-"},{NON_TERMINAL, "E7"},{SEMANTIC_RULE, "@SUB"},{NON_TERMINAL, "E6'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E8"},{NON_TERMINAL, "E7'"}},
{{SPECIAL_TOKEN, "*"},{NON_TERMINAL, "E8"},{SEMANTIC_RULE, "@MUL"},{NON_TERMINAL, "E7'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E9"},{NON_TERMINAL, "E8'"}},
{{SPECIAL_TOKEN, "/"},{NON_TERMINAL, "E9"},{SEMANTIC_RULE, "@DIV"},{NON_TERMINAL, "E8'"}},
{{EPSILON, "eps"}},
{{NON_TERMINAL, "E10"},{NON_TERMINAL, "E9'"}},
{{SPECIAL_TOKEN, "%"},{NON_TERMINAL, "E10"},{SEMANTIC_RULE, "@MOD"},{NON_TERMINAL, "E9'"}},
{{EPSILON, "eps"}},
{{KEYWORD, "poi"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@POI"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "db"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@DB"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "dd"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@DD"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "dw"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@DW"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "dq"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@DQ"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "str"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@STR"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "wstr"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@WSTR"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "sizeof"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@SIZEOF"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "neg"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@NEG"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "hi"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@HI"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "low"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@LOW"},{SPECIAL_TOKEN, ")"}},
{{KEYWORD, "gg"},{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SEMANTIC_RULE, "@GG"},{SPECIAL_TOKEN, ")"}},
{{SPECIAL_TOKEN, "("},{NON_TERMINAL, "E0"},{SPECIAL_TOKEN, ")"}},
{{SEMANTIC_RULE, "@PUSH"},{REGISTER, "_register"}},
{{SEMANTIC_RULE, "@PUSH"},{HEX, "_hex"}},
{{SEMANTIC_RULE, "@PUSH"},{DECIMAL, "_decimal"}},
{{SEMANTIC_RULE, "@PUSH"},{OCTAL, "_octal"}},
{{SEMANTIC_RULE, "@PUSH"},{BINARY, "_binary"}},
{{SEMANTIC_RULE, "@PUSH"},{KEYWORD, "func"}},
{{SEMANTIC_RULE, "@PUSH"},{PSEUDO_REGISTER, "_pseudo_register"}}
};
const unsigned int RhsSize[RULES_COUNT]=
{
3,
3,
1,
6,
5,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
2,
4,
1,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
5,
3,
2,
2,
2,
2,
2,
2,
2
};
const char* NoneTerminalMap[NONETERMINAL_COUNT]=
{
"E1'",
"E5'",
"S'",
"E2",
"E0",
"E7",
"E5",
"E9",
"E2'",
"E3",
"C'",
"E4'",
"E8",
"E8'",
"E7'",
"C",
"E1",
"E3'",
"E4",
"E6",
"E10",
"S",
"E0'",
"E9'",
"E6'"
};
const char* TerminalMap[TERMINAL_COUNT]=
{
"_id",
"_register",
"_octal",
"%",
"gg",
"*",
"=",
"dd",
">>",
"+",
"sizeof",
"_pseudo_register",
"_binary",
"^",
"db",
"_hex",
"print",
"$",
"neg",
"str",
"-",
"&",
"func",
"wstr",
"poi",
"/",
"(",
"|",
";",
"<<",
"hi",
"_decimal",
")",
"dw",
"dq",
"low"
};
const int ParseTable[NONETERMINAL_COUNT][TERMINAL_COUNT]=
{
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,10 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,11 ,11 ,-1 ,-1 ,-1 ,11 ,-1 ,-1 ,-1 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,23 ,22 ,-1 ,-1 ,-1 ,23 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,23 ,-1 ,-1 ,-1 ,-1 ,-1 ,23 ,23 ,23 ,-1 ,-1 ,23 ,-1 ,-1 ,-1 },
{1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,1 ,2 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 },
{-1 ,12 ,12 ,-1 ,12 ,-1 ,-1 ,12 ,-1 ,-1 ,12 ,12 ,12 ,-1 ,12 ,12 ,-1 ,-1 ,12 ,12 ,-1 ,-1 ,12 ,12 ,12 ,-1 ,12 ,-1 ,-1 ,-1 ,12 ,12 ,-1 ,12 ,12 ,12 },
{-1 ,6 ,6 ,-1 ,6 ,-1 ,-1 ,6 ,-1 ,-1 ,6 ,6 ,6 ,-1 ,6 ,6 ,-1 ,-1 ,6 ,6 ,-1 ,-1 ,6 ,6 ,6 ,-1 ,6 ,-1 ,-1 ,-1 ,6 ,6 ,-1 ,6 ,6 ,6 },
{-1 ,27 ,27 ,-1 ,27 ,-1 ,-1 ,27 ,-1 ,-1 ,27 ,27 ,27 ,-1 ,27 ,27 ,-1 ,-1 ,27 ,27 ,-1 ,-1 ,27 ,27 ,27 ,-1 ,27 ,-1 ,-1 ,-1 ,27 ,27 ,-1 ,27 ,27 ,27 },
{-1 ,21 ,21 ,-1 ,21 ,-1 ,-1 ,21 ,-1 ,-1 ,21 ,21 ,21 ,-1 ,21 ,21 ,-1 ,-1 ,21 ,21 ,-1 ,-1 ,21 ,21 ,21 ,-1 ,21 ,-1 ,-1 ,-1 ,21 ,21 ,-1 ,21 ,21 ,21 },
{-1 ,33 ,33 ,-1 ,33 ,-1 ,-1 ,33 ,-1 ,-1 ,33 ,33 ,33 ,-1 ,33 ,33 ,-1 ,-1 ,33 ,33 ,-1 ,-1 ,33 ,33 ,33 ,-1 ,33 ,-1 ,-1 ,-1 ,33 ,33 ,-1 ,33 ,33 ,33 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,14 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,13 ,-1 ,-1 ,-1 ,-1 ,-1 ,14 ,14 ,-1 ,-1 ,-1 ,14 ,-1 ,-1 ,-1 },
{-1 ,15 ,15 ,-1 ,15 ,-1 ,-1 ,15 ,-1 ,-1 ,15 ,15 ,15 ,-1 ,15 ,15 ,-1 ,-1 ,15 ,15 ,-1 ,-1 ,15 ,15 ,15 ,-1 ,15 ,-1 ,-1 ,-1 ,15 ,15 ,-1 ,15 ,15 ,15 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,5 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,20 ,-1 ,-1 ,-1 ,-1 ,20 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,20 ,-1 ,-1 ,-1 ,-1 ,-1 ,20 ,20 ,19 ,-1 ,-1 ,20 ,-1 ,-1 ,-1 },
{-1 ,30 ,30 ,-1 ,30 ,-1 ,-1 ,30 ,-1 ,-1 ,30 ,30 ,30 ,-1 ,30 ,30 ,-1 ,-1 ,30 ,30 ,-1 ,-1 ,30 ,30 ,30 ,-1 ,30 ,-1 ,-1 ,-1 ,30 ,30 ,-1 ,30 ,30 ,30 },
{-1 ,-1 ,-1 ,-1 ,-1 ,32 ,-1 ,-1 ,32 ,32 ,-1 ,-1 ,-1 ,32 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,32 ,32 ,-1 ,-1 ,-1 ,31 ,-1 ,32 ,32 ,32 ,-1 ,-1 ,32 ,-1 ,-1 ,-1 },
{-1 ,-1 ,-1 ,-1 ,-1 ,28 ,-1 ,-1 ,29 ,29 ,-1 ,-1 ,-1 ,29 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,29 ,29 ,-1 ,-1 ,-1 ,-1 ,-1 ,29 ,29 ,29 ,-1 ,-1 ,29 ,-1 ,-1 ,-1 },
{3 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,4 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 },
{-1 ,9 ,9 ,-1 ,9 ,-1 ,-1 ,9 ,-1 ,-1 ,9 ,9 ,9 ,-1 ,9 ,9 ,-1 ,-1 ,9 ,9 ,-1 ,-1 ,9 ,9 ,9 ,-1 ,9 ,-1 ,-1 ,-1 ,9 ,9 ,-1 ,9 ,9 ,9 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,16 ,-1 ,-1 ,-1 ,-1 ,17 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,17 ,-1 ,-1 ,-1 ,-1 ,-1 ,17 ,17 ,-1 ,-1 ,-1 ,17 ,-1 ,-1 ,-1 },
{-1 ,18 ,18 ,-1 ,18 ,-1 ,-1 ,18 ,-1 ,-1 ,18 ,18 ,18 ,-1 ,18 ,18 ,-1 ,-1 ,18 ,18 ,-1 ,-1 ,18 ,18 ,18 ,-1 ,18 ,-1 ,-1 ,-1 ,18 ,18 ,-1 ,18 ,18 ,18 },
{-1 ,24 ,24 ,-1 ,24 ,-1 ,-1 ,24 ,-1 ,-1 ,24 ,24 ,24 ,-1 ,24 ,24 ,-1 ,-1 ,24 ,24 ,-1 ,-1 ,24 ,24 ,24 ,-1 ,24 ,-1 ,-1 ,-1 ,24 ,24 ,-1 ,24 ,24 ,24 },
{-1 ,49 ,52 ,-1 ,47 ,-1 ,-1 ,38 ,-1 ,-1 ,43 ,55 ,53 ,-1 ,37 ,50 ,-1 ,-1 ,44 ,41 ,-1 ,-1 ,54 ,42 ,36 ,-1 ,48 ,-1 ,-1 ,-1 ,45 ,51 ,-1 ,39 ,40 ,46 },
{0 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,0 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,7 ,8 ,-1 ,-1 ,-1 ,8 ,-1 ,-1 ,-1 },
{-1 ,-1 ,-1 ,34 ,-1 ,35 ,-1 ,-1 ,35 ,35 ,-1 ,-1 ,-1 ,35 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,35 ,35 ,-1 ,-1 ,-1 ,35 ,-1 ,35 ,35 ,35 ,-1 ,-1 ,35 ,-1 ,-1 ,-1 },
{-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,26 ,26 ,-1 ,-1 ,-1 ,26 ,-1 ,-1 ,-1 ,-1 ,-1 ,-1 ,25 ,26 ,-1 ,-1 ,-1 ,-1 ,-1 ,26 ,26 ,26 ,-1 ,-1 ,26 ,-1 ,-1 ,-1 }
};
const char* KeywordList[]= {
"print",
"poi",
"db",
"dd",
"dw",
"dq",
"str",
"wstr",
"sizeof",
"neg",
"hi",
"low",
"gg"
};
const char* OneOpFunc1[] = {
"@POI",
"@DB",
"@DD",
"@DW",
"@DQ",
"@STR",
"@WSTR",
"@SIZEOF",
"@NEG",
"@HI",
"@LOW",
"@GG",
};
const char* OneOpFunc2[] = {
"@PRINT"
};