예제 #1
0
parser_state *
PyParser_New(grammar *g, int start)
{
    parser_state *ps;

    DBP("Attempting to create new PyParser\n");

    if (!g->g_accel)
        PyGrammar_AddAccelerators(g);

    DBP("Added grammar accelerators\n");

    ps = (parser_state *)PyMem_MALLOC(sizeof(parser_state));
    
    DBP("Created parser state\n");

    if (ps == NULL)
        return NULL;
    ps->p_grammar = g;
#ifdef PY_PARSER_REQUIRES_FUTURE_KEYWORD
    ps->p_flags = 0;
#endif
    ps->p_tree = PyNode_New(start);
    if (ps->p_tree == NULL) {
        PyMem_FREE(ps);
        return NULL;
    }
    s_reset(&ps->p_stack);
    (void) s_push(&ps->p_stack, PyGrammar_FindDFA(g, start), ps->p_tree);

    DBP("Created PyParser!!\n");

    return ps;
}
예제 #2
0
parser_state *
PyParser_New(grammar *g, int start)
{
	parser_state *ps;
	
	if (!g->g_accel)
		PyGrammar_AddAccelerators(g);
	ps = PyMem_NEW(parser_state, 1);
	if (ps == NULL)
		return NULL;
	ps->p_grammar = g;
	ps->p_generators = 0;
	ps->p_tree = PyNode_New(start);
	if (ps->p_tree == NULL) {
		PyMem_DEL(ps);
		return NULL;
	}
	s_reset(&ps->p_stack);
	(void) s_push(&ps->p_stack, PyGrammar_FindDFA(g, start), ps->p_tree);
	return ps;
}