int main(int argc, char** argv) { if (argc!=2) { cerr << "Syntax: " << argv[0] << " EXP" << endl; return 1; } Parser p; p.DefToken("","[ \t\r\n][ \t\r\n]*",10); p.DefToken("id","[a-z][a-z0-9]*",10); p.DefKeywordToken("=>",2); p.DefKeywordToken("<=",2); p.DefKeywordToken("<=>",1); p.DefToken("AND","AND+and+&",1); p.DefToken("OR","OR+or+|",1); p.DefToken("NOT","NOT+not+~",1); p.DefToken("T","T+true",1); p.DefToken("F","F+false",1); p.DefKeywordToken("(",1); p.DefKeywordToken(")",1); p.DefType("exp ::= exp <=> exp2 | exp2"); p.DefType("exp2 ::= exp2 => exp3 | exp3"); p.DefType("exp3 ::= exp3 <= exp4 | exp4"); p.DefType("exp4 ::= exp4 AND exp5 | exp5"); p.DefType("exp5 ::= exp5 OR exp6 | exp6"); p.DefType("exp6 ::= NOT exp6 | exp7"); p.DefType("exp7 ::= T | F | id | ( exp )"); parsed_tree *tree=p.Parse(argv[1]); MpsExp *e = Create(tree); vector<const MpsExp*> hyps; // double lk_start=gettime(); // cout << "LK: " << e->ValidExp_LK(hyps) << endl; // double lk_end=gettime(); // cout << "LK-TIME: " << lk_end-lk_start << endl; double cflkf_start=gettime(); cout << "CFLKF: " << e->ValidExp_CFLKF(hyps) << endl; double cflkf_end=gettime(); cout << "CFLKF-TIME: " << cflkf_end-cflkf_start << endl; // cout << e->ToString() << endl; // MpsExp *cnf_e = e->MakeCNF(); delete e; // cout << cnf_e->ToString() << endl; // cout << "CNF: " << cnf_e->ValidCNF() << endl; // delete cnf_e; return 0; }