Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
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);
		}
	    }
	}
    }
}
Exemplo n.º 4
0
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");
    }
}