static PTBL_ParseTable generateParseTable() { int i; ATermList vertex; PTBL_State state; PTBL_States statelist = PTBL_makeStatesEmpty(); PTBL_Gotos gotos; PTBL_Choices actions; calc_first_table(); calc_follow_table(); createDFA(); for (i = PGEN_getNumberOfStates()-1; i >= 0; i--) { vertex = PGEN_getStateOfStateNumber(i); gotos = (PTBL_Gotos)PGEN_getGotosOfState(vertex); if (!gotos) { gotos = PTBL_makeGotosEmpty(); } else if (PGEN_getStatsFlag) { PGEN_STATS_increaseGotos(PTBL_getGotosLength(gotos)); } actions = PGEN_getActionsOfState(vertex); if (!actions) { actions = PTBL_makeChoicesEmpty(); } else if (PGEN_getStatsFlag) { PGEN_STATS_increaseActions(PTBL_getChoicesLength(actions)); } state = PTBL_makeStateDefault(i, gotos, actions); statelist = PTBL_makeStatesMany(state, statelist); } if (PGEN_getStatsFlag) { PGEN_STATS_print(); } return PTBL_makeParseTableParseTable(PTBL_makeVersionDefault(), PGEN_getInitialStateNumber(), PGEN_getLabelSection(), statelist, PGEN_getPrioSection()); }
//========================================================================================================== //========================================================================================================== Grammar::Grammar(string grammar_file) { read_grammar_file(grammar_file); calc_follow_table(); }