#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" };