int LG::Main (int na, char** arg) /* Display program information. */ { if (Start (na, arg)) { if (Parse()) { if (CheckGrammar()) { if (BuildStates()) { int rc; rc = AddExtra(); rc += ComputeLA(); PrintStates (1); if (rc == 2) { if (OptimizeStates()) { PrintStates (2); if (!optn[LG_ANALYZEONLY]) { CreateTables(); LG::Terminate (1); return 1; } } } } } } } LG::Terminate (0); return 0; }
int PG::Main (int na, char** arg) { if (Start (na, arg)) { PGParser::initialize (optn[MAX_SYM]); if (PGParser::parse (input_start) > 0) { PrintGrammar(); PrintHtml(); if (CheckGrammar()) { OutputLexicalSymbols(); if (BuildLR1()) { if (ComputeLA()) { if (OptimizeStates()) { PrintStates(); CreateTables(); PG::Terminate (0); return 1; } } } } } } return 0; }
void Forest::PrintStates(level k, node_idx p, int *stateArray) { arc_idx i; Node *nodeP; if (p == 0) return; else if (k == 0) { stateArray[k] = p; (*(*states)[counter]) = new int[K + 1]; for (level k = K; k >= 0; k--) (*(*states)[counter])[k] = stateArray[k]; counter++; } else { nodeP = &FDDL_NODE(k, p); if (nodeP->flags & FLAG_SPARSE) { for (i = 0; i < nodeP->size; i++) { stateArray[k] = FULL_ARC(k, nodeP, i * 2); PrintStates(k - 1, FULL_ARC(k, nodeP, i * 2 + 1), stateArray); } } else { for (i = 0; i < nodeP->size; i++) { int arc; if (FDDL_ARC(k, nodeP, i) != arc) { break; } arc = FDDL_ARC(k, nodeP, i); } if (i == nodeP->size) { stateArray[k] = (-1); PrintStates(k - 1, FDDL_ARC(k, nodeP, i), stateArray); } else { for (i = 0; i < nodeP->size; i++) { stateArray[k] = i; PrintStates(k - 1, FULL_ARC(k, nodeP, i), stateArray); } } } } }
void Forest::PrintStates(node_idx root) { states = new DynArray < int *>; counter = 0; tempStates = new int[K + 1]; PrintStates(K, root, tempStates); printf("%d reachable states. Here they are: \n", counter); for (int i = 0; i < counter; i++) { printf("("); for (level k = K; k > 0; k--) { if ((*(*states)[i])[k] == -1) printf("* "); else printf("%d ", (*(*states)[i])[k]); } printf(")\n"); } }