コード例 #1
0
/* grammar */

PEG_PARSE(parse_peg_grammar,        PEG_GRAMMAR_NODE,               L"PEG grammar",             SEQ(T(parse_peg_spacing),
                                                                                                    SEQ(PLUS(T(parse_peg_rule)),
                                                                                                        T(parse_peg_eof))));

PEG_PARSE(parse_peg_rule,           PEG_RULE_NODE,                  L"PEG rule",                SEQ(T(parse_peg_identifier),
                                                                                                    SEQ(QUES(T(parse_peg_literal)),
                                                                                                        SEQ(T(parse_peg_left_arrow),
                                                                                                            T(parse_peg_disjunction)))));

PEG_PARSE(parse_peg_disjunction,    PEG_DISJ_NODE,                  L"expression",              SEQ(T(parse_peg_conjunction), STAR(SEQ(T(parse_peg_slash), T(parse_peg_conjunction)))));

PEG_PARSE(parse_peg_conjunction,    PEG_CONJ_NODE,                  L"term",                    PLUS(T(parse_peg_prefix_exp)));

PEG_PARSE(parse_peg_prefix_exp,     PEG_PREFIX_EXP_NODE,            L"term",                    SEQ(QUES(DISJ(T(parse_peg_and), DISJ(T(parse_peg_not), T(parse_peg_hide)))), T(parse_peg_suffix_exp)));

PEG_PARSE(parse_peg_suffix_exp,     PEG_SUFFIX_EXP_NODE,            L"term",                    SEQ(T(parse_peg_term),
                                                                                                    QUES(DISJ(DISJ(T(parse_peg_question), 
                                                                                                                   T(parse_peg_star)),
                                                                                                                   T(parse_peg_plus)))));

PEG_PARSE(parse_peg_term, PEG_TERM_NODE, L"term", DISJ(SEQ(T(parse_peg_identifier), 
                                                           BANG(SEQ(QUES(T(parse_peg_literal)), 
                                                                    T(parse_peg_left_arrow)))),
                                                       DISJ(SEQ(T(parse_peg_open), 
                                                                SEQ(T(parse_peg_disjunction), 
                                                                    T(parse_peg_close))),
                                                            DISJ(T(parse_peg_literal),
                                                                 DISJ(T(parse_peg_class), 
                                                                      T(parse_peg_dot))))));
コード例 #2
0
/* Executa o programa */
int Mepa::exec(){

	int op;

    if(detalha)
	{
         p->imprime(); /* Imprime o programa */
    }

    op = p->next();
    while( op != PARA )
	{
        if(detalha) 
		{	
			debug();
		}
        switch(op)
		{
            /* Funcoes MEPA */
            case 0: { AMEM(); break; } 
            case 1: { ARMI(); break; } 
            case 2: { ARMP(); break; }
            case 3: { ARMZ(); break; } 
            case 4: { CHPP(); break; } 
            case 5: { CHPR(); break; }
            case 6: { CMAF(); break; } 
            case 7: { CMAG(); break; } 
            case 8: { CMDF(); break; }
            case 9: { CMDG(); break; } 
            case 10: { CMEF(); break; } 
            case 11: { CMEG(); break; }
            case 12: { CMIF(); break; } 
            case 13: { CMIG(); break; } 
            case 14: { CMMA(); break; } 
            case 15: { CMMF(); break; } 
            case 16: { CMME(); break; } 
            case 17: { CMNF(); break; } 
            case 18: { CONJ(); break; } 
            case 19: { CRCT(); break; } 
            case 20: { CRCF(); break; } 
            case 21: { CREG(); break; }
            case 22: { CREN(); break; }
            case 23: { CRVI(); break; } 
            case 24: { CRVL(); break; }
            case 25: { CRVP(); break; }
            case 26: { DISJ(); break; }
            case 27: { DIVF(); break; } 
            case 28: { DIVI(); break; }
            case 29: { DMEM(); break; } 
            case 30: { DSVF(); break; } 
            case 31: { DSVS(); break; } 
            case 32: { ENTR(); break; } 
            case 33: { IMPC(); break; }
            case 34: { IMPF(); break; }
            case 35: { IMPR(); break; }
            case 36: { INPP(); break; }
            case 37: { INVF(); break; } 
            case 38: { INVR(); break; }
            case 39: { LEIT(); break; }
            case 40: { LEIF(); break; }
            case 41: { MULF(); break; }
            case 42: { MULT(); break; }
            case 43: { NEGA(); break; }
            case 44: { RTPR(); break; }
            case 45: { SOMA(); break; }
            case 46: { SOMF(); break; }
            case 47: { SUBT(); break; }
            case 48: { SUBF(); break; }
            default:{
               cerr << "O programa executou uma operacao invalida." << endl;
               cerr << "i = " << p->getI() << endl; 
               abort();
            }
        }
        op = p->next();
    }
    return 0;
}