Example #1
0
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;
}