diff --git a/_oasis b/_oasis index 707258ad5d3999092020f6af8b711e11b5852a64..f68d16d6c46edb07cffdc13979539ca4637f7fb4 100644 --- a/_oasis +++ b/_oasis @@ -25,48 +25,9 @@ Library libcool ByteOpt: -cc g++ CCOpt: -std=c++98 -x c++ # TODO: activate glpk_stub.c again - CSources: gmlmip_stub.c, - minisat_stub.c, - GMLMIP-0.1/rules/sizefunctions.c, - GMLMIP-0.1/rules/setofconclusions.c, - GMLMIP-0.1/rules/PML_premise.c, - GMLMIP-0.1/rules/valuation.c, - GMLMIP-0.1/rules/node.c, - GMLMIP-0.1/rules/premise.c, - GMLMIP-0.1/rules/radixtree.c, - GMLMIP-0.1/rules/GML_premise.c, - GMLMIP-0.1/parser/mlf-parser.tab.c, - GMLMIP-0.1/parser/mlf-driver.c, - GMLMIP-0.1/parser/lex.yy.c, - GMLMIP-0.1/formulas/GML_formula.c, - GMLMIP-0.1/formulas/rational.c, - GMLMIP-0.1/formulas/formula.c, - GMLMIP-0.1/formulas/satisfyingassignment.c, - GMLMIP-0.1/formulas/PML_formula.c, - GMLMIP-0.1/onestep.c, - GMLMIP-0.1/onestep.h, - GMLMIP-0.1/rules/premise.h, - GMLMIP-0.1/rules/node.h, - GMLMIP-0.1/rules/radixtree.h, - GMLMIP-0.1/rules/setofconclusions.h, - GMLMIP-0.1/rules/valuation.h, - GMLMIP-0.1/rules/PML_premise.h, - GMLMIP-0.1/rules/sizefunctions.h, - GMLMIP-0.1/rules/GML_premise.h, - GMLMIP-0.1/parser/stack.h, - GMLMIP-0.1/parser/mlf-driver.h, - GMLMIP-0.1/parser/mlf-parser.tab.h, - GMLMIP-0.1/parser/lex.yy.h, - GMLMIP-0.1/parser/location.h, - GMLMIP-0.1/parser/position.h, - GMLMIP-0.1/formulas/satisfyingassignment.h, - GMLMIP-0.1/formulas/GML_formula.h, - GMLMIP-0.1/formulas/formula.h, - GMLMIP-0.1/formulas/PML_formula.h, - GMLMIP-0.1/formulas/rational.h, - GMLMIP-0.1/satisfyingstack.h + CSources: minisat_stub.c InternalModules: ALCFormula, ALCGraph, ALCMisc, CoAlgLogicUtils, - CoAlgLogics, HashConsing, MiscSolver, AltGenlex, Gmlmip, + CoAlgLogics, HashConsing, MiscSolver, AltGenlex, Minisat Modules: CoAlgMisc, CoAlgFormula, diff --git a/src/coalg/coalg.ml b/src/coalg/coalg.ml index 30f4ec3a0d94466609ec0b2834704f752422fae0..2bfbf206c16f339affdb9ead83fd1fa5522404e6 100644 --- a/src/coalg/coalg.ml +++ b/src/coalg/coalg.ml @@ -53,14 +53,12 @@ let printUsage () = print_endline " CoalitionLogic (or equivalently CL)"; print_endline " Const id1 ... idn (or equivalently Constant id1 ... idn)"; print_endline " Id (or equivalently Identity)"; - print_endline " PML"; - print_endline " GML"; print_endline " }"; print_endline " where you can compose functors by:"; print_endline " <functor> + <functor> (weakest precedence)"; print_endline " or <functor> * <functor>"; print_endline " or <functor> . <functor> (binds strongest)"; - print_endline " (so K+KD.CL*PML stand for (K + ((KD.CL) * PML)))"; + print_endline " (so K+KD.CL*Id stand for (K + ((KD.CL) * Id)))"; print_endline " <flags> = a list of the following items"; print_endline " --agents AGLIST"; print_endline " expects the next argument AGLIST to be a list of integers"; @@ -78,7 +76,6 @@ let printUsage () = print_endline " @ ident' (satisfaction operator)"; print_endline " [R], <R> (universal/existential restrictions along role R"; print_endline " [{ aglist }], <{ aglist }> (aglist can force / cannot avoid)"; - print_endline " {<= n}, {>= n}, {< n}, {> n} (number / probability of successors)"; print_endline " =ident (constant value)"; print_endline " O (identity operator)"; print_endline " _ + _ (choice)"; @@ -97,6 +94,9 @@ let verbose = ref false let choiceSat () = let verb = !verbose in let sorts = (FE.sortTableFromString Sys.argv.(2)) in + if Array.exists (fun (func,_) -> func == CM.GML || func == CM.PML) sorts then + raise (CF.CoAlgException "GML and PML are currently not supported") + else (); let printRes sat = if not verb then print_endline (if sat then "satisfiable\n" else "unsatisfiable\n") diff --git a/src/lib/CoAlgLogics.ml b/src/lib/CoAlgLogics.ml index fd46280ae2faeba53026db0dc5be8ff2cccccaf3..4b899652462f15b70b303de0f6de64c4d1f5450a 100644 --- a/src/lib/CoAlgLogics.ml +++ b/src/lib/CoAlgLogics.ml @@ -6,7 +6,6 @@ open CoAlgMisc open CoolUtils open CoAlgLogicUtils -open Gmlmip module S = MiscSolver @@ -463,99 +462,16 @@ let mkRule_CL sort bs defer sl : stateExpander = *) lazylistFromList rules +(* PML and GML are currently disabled, because they required GMLMIP, which + complicated the build process and had issues. + + The implementation can still be found in the git history. + *) let mkRule_GML sort bs defer sl : stateExpander = - assert (List.length sl = 1); - let defer1 = bsetMake () in (* TODO: track deferrals *) - let s1 = List.hd sl in (* [s1] = List.hd sl *) - let diamonds = bsetFilter bs (fun f -> lfGetType sort f = MoreThanF) in - let boxes = bsetFilter bs (fun f -> lfGetType sort f = MaxExceptF) in - let roles = S.makeBS () in - (* step 1: for each diamond/box add R *) - let addRole formula = - ignore (S.addBSNoChk roles (lfGetDest3 sort formula)) - in - bsetIter addRole boxes; - bsetIter addRole diamonds; - let addRule role acc = - let premise: (bool*int*int) list = - let modality isDiamond m acc = - if lfGetDest3 sort m = role - then (isDiamond,lfGetDestNum sort m,lfToInt (lfGetDest1 sort m))::acc - else acc - in - List.append - (bsetFold (modality true) diamonds []) - (bsetFold (modality false) boxes []) - in - let conclusion = gml_rules premise in - (* conclusion is a set of rules, *each* of the form \/ /\ lit *) - let handleRuleConcl rc acc = - let handleConjunction conj = - let res = bsetMake () in - List.iter (fun (f,positive) -> - let f = lfFromInt f in - let f = if positive then f else - match lfGetNeg sort f with - | Some nf -> nf - | None -> raise (CoAlgFormula.CoAlgException ("Negation of formula missing")) - in - bsetAdd res f) - conj; - (s1,res, defer1) - in - let rc = List.map handleConjunction rc in - ((fun bs1 -> bs),lazylistFromList rc)::acc - in List.fold_right handleRuleConcl conclusion acc - in - let rules = S.foldBS addRule roles [] in - lazylistFromList rules + raise (CoAlgFormula.CoAlgException "GML is currently not implemented.") let mkRule_PML sort bs defer sl : stateExpander = - assert (List.length sl = 1); - let defer1 = bsetMake () in (* TODO: track deferrals *) - let s1 = List.hd sl in (* [s1] = List.hd sl *) - let diamonds = bsetFilter bs (fun f -> lfGetType sort f = AtLeastProbF) in - let boxes = bsetFilter bs (fun f -> lfGetType sort f = LessProbFailF) in - let premise: (bool*int*int*int) list = - let modality isDiamond m acc = - let nominator = lfGetDestNum sort m in - let denominator = lfGetDestNum2 sort m in - let nestedFormula = lfToInt (lfGetDest1 sort m) in - (*print_endline ("putting formula "^(string_of_int nestedFormula)); *) - (isDiamond,nominator,denominator,nestedFormula)::acc - in - List.append - (bsetFold (modality true) diamonds []) - (bsetFold (modality false) boxes []) - in - let conclusion = pml_rules premise in - let error message = raise (CoAlgFormula.CoAlgException message) in - (* conclusion is a set of rules, *each* of the form \/ /\ lit *) - let handleRuleConcl rc acc = - let handleConjunction conj = - let res = bsetMake () in - let handleLiteral = fun (f_int,positive) -> begin - let f = lfFromInt f_int in - let f = if positive - then f - else begin - (*print_endline ("getting "^(string_of_int f_int)); *) - match lfGetNeg sort f with - | Some nf -> nf - | None -> error ("Negation of formula missing") - end - in - bsetAdd res f - end - in - List.iter handleLiteral conj; - (s1,res, defer1) - in - let rc = List.map handleConjunction rc in - ((fun bs1 -> bs),lazylistFromList rc)::acc - in - let rules = List.fold_right handleRuleConcl conclusion [] in - lazylistFromList rules + raise (CoAlgFormula.CoAlgException "PML is currently not implemented.") (* constant functor *) let mkRule_Const colors sort bs defer sl : stateExpander = diff --git a/src/lib/GMLMIP-0.1/.gitignore b/src/lib/GMLMIP-0.1/.gitignore deleted file mode 100644 index bc7e2fddd40691c8f790a1872dd29c364c1f6507..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -main -onestep diff --git a/src/lib/GMLMIP-0.1/README.txt b/src/lib/GMLMIP-0.1/README.txt deleted file mode 100644 index f31b51f625a5240f816b238c73d54c3cb3cd79ea..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/README.txt +++ /dev/null @@ -1,79 +0,0 @@ -=============================== -Author: William Snell -Check http://project.williamsnell.co.uk for future updates. -================================ - -Requirements: - -GNU LPK, Flex, Bison, Googlesparsehash package, BuDDy BDD package. - -(Extensively tested with GNU-LPK 4.38) - -================================= -Compiling: - -To compile you will need to edit the makefiles in the sub-folders and this folder to point to the location of your compiler/bison/flex. - -Also need to edit the include directory and linking directories in all 4 make files to point to where you have installed GLPK, sparsehash and BuDDy. If you install these properly in /bin /usr (unlike the lab set-up) you should be able to just remove these parts and have it compile fine. - -Then if you run the compile.sh script, everything should compile properly for you. - -================================= -Usage: - -Input is written in a separate file and then this file is is passed as an argument on the command line. - -./main input - -You can use the -v flag for output. At each step of the top level tableau calculus algorithm it tells you how many satisfying assignments and how many rules it has found. - -Included is Dmitry V Golovashkin's timeout script. The following would run the program on the input file with a timeout of 300 seconds. - -./timeoutwrapper.sh -t 300 ./src/main input - - -================================= -Input file specification: - -First we specify which logic then use the following notation: - -<a> GML diamond ('more than a successors ...') -[a] GML box ('fails at most a times ...') -<a/b> PML diamond -[a/b] PML box -~ not -v or -& and -( -) - -Examples: - -Logic:PML -<1/2>p0 & ~<1/4>p2 v [1/8]p3 - -Logic:GML -<1>p0 & <1>(p0 v p0) - - -================================= -Known Issues & Notes: - -1) The following warning is generated by the C code generated by flex. - position.hh:136: warning: suggest parentheses around ‘&&’ within ‘||’ - -2) Use of deprecated header <ext/hash_map>. - -3) You may need to alter the line "using __gnu_cxx::hash;" line in formula.h depending on your compiler. - -4) I received "./main: error while loading shared libraries: libbdd.so.0: cannot open shared object file: No such file or directory" errors. -Fixed by adding "export LD_LIBRARY_PATH=~/lib/lib:$LD_LIBRARY_PATH" to my .bashrc file. Where ~/lib/lib is where I locally installed the required libraries. (No root access for lab machines.) - -5) If you receive error "BDD error: unknown variable" you have not declared enough variables in the BDD initialisation in main.cpp. The line "bdd_setvarnum(int)" needs increasing. - -6) What report describes as TruthAssignment class is implemented as Valuation. - - - - - diff --git a/src/lib/GMLMIP-0.1/config.mk b/src/lib/GMLMIP-0.1/config.mk deleted file mode 100644 index 9b5d1ab09da6e141d8d07225fa3ec4abf8dd22b2..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/config.mk +++ /dev/null @@ -1,7 +0,0 @@ - -BISON = bison -LEX = flex -GCC = g++ - -GCCFLAGS = -Wall -Wno-deprecated - diff --git a/src/lib/GMLMIP-0.1/formulas/GML_formula.c b/src/lib/GMLMIP-0.1/formulas/GML_formula.c deleted file mode 100644 index 1fc45b47ada7a65239bd308748c2159f67006d9a..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/GML_formula.c +++ /dev/null @@ -1,80 +0,0 @@ -#include "GML_formula.h" - -bdd GML_Formula::modal(bdd *b, int n, int m){ - return modal_var(b, n); -} - -void GML_Formula::load_linear_program(glp_prob* problem, Premise<int>& prem){ - int n = prem.get_n(); - int m = prem.get_m(); - int no_of_valuations = prem.get_total_valuations(); - - //glp_set_obj_dir(sc, GLP_MIN); - glp_add_rows(problem, no_of_valuations+1); - glp_add_cols(problem, n+m); - - for(int i = 1; i < no_of_valuations+1; i++) - glp_set_row_bnds(problem, i, GLP_UP, 0.0, 0.0); // <= 0 - - // Set row bounds for side condition - glp_set_row_bnds(problem, no_of_valuations+1, GLP_LO, 1.0, 0.0); // >= 1 - - for(int i=1; i < (n+m+1); i++){ - glp_set_col_kind(problem, i, GLP_IV); //integer variables - glp_set_col_bnds(problem, i, GLP_LO, 0, 0); // r_i, s_i >= 0 - } - - // Arrays for inputting into glpk - const int size = (no_of_valuations+1)*(n+m); - double ar[size+1]; - int ia[size+1]; - int ja[size+1]; - - // Recall GLKP takes arrays with 1 - size not 0 - size-1. - for(int i=0; i < size; i++){ - ia[i+1] = (i / (n+m)) + 1; - ja[i+1] = (i % (n+m)) + 1; - } - - int counter=1; - - // Load all valuations - for(int i=0; i < no_of_valuations; i++){ - int temp = i; - for(int j=0; j < n; j++){ - ar[counter] = temp & 1; - temp >>= 1; - counter++; - } - for(int j=0; j < m; j++){ - ar[counter] = -(temp & 1); - temp >>= 1; - counter++; - } - } - - // Load side condition at the bottom - for(int i=0; i < n; i++){ - ar[counter]= prem.get_a_i(i)+1; - counter++; - } - - for(int j=0; j < m; j++){ - ar[counter]= -(prem.get_b_i(j)); - counter++; - } - - /* - for(int i=1; i < size+1; i++) - cout << ia[i] << " "; - cout << endl; - for(int i=1; i < size+1; i++) - cout << ja[i] << " "; - cout << endl << endl; - for(int i=1; i < size+1; i++) - cout << ar[i] << " "; - cout << endl; - */ - - glp_load_matrix(problem, size, ia, ja, ar); -} diff --git a/src/lib/GMLMIP-0.1/formulas/GML_formula.h b/src/lib/GMLMIP-0.1/formulas/GML_formula.h deleted file mode 100644 index a24a13b74cba0677258f271facce1a5096e348ae..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/GML_formula.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef GML_FORMULA_HH -#define GML_FORMULA_HH - -#include "formula.h" - -class GML_Formula : public Formula<int> { - private: - void load_linear_program(glp_prob* problem, Premise<int>& prem); - - public: - bdd modal(bdd *b, int n, int m); - -}; -#endif diff --git a/src/lib/GMLMIP-0.1/formulas/PML_formula.c b/src/lib/GMLMIP-0.1/formulas/PML_formula.c deleted file mode 100644 index c4c04ab4c11b508e5771fe6a1376f4f5b3071fd1..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/PML_formula.c +++ /dev/null @@ -1,102 +0,0 @@ -#include "PML_formula.h" - -bdd PML_Formula::modal(bdd *b, int n, int m){ - if(n > m){ - cout << "error: " << n << "/" << m << " is not in [0,1]" << endl; - exit(1); - } - Rational r(n,m); - return modal_var(b, r); -} - - -void PML_Formula::load_linear_program(glp_prob* problem, Premise<Rational>& prem) { - int n = prem.get_n(); - int m = prem.get_m(); - int no_of_valuations = prem.get_total_valuations(); - - // Additional 2 for side condition and requirements that at least one r_i,s_j is non zero - glp_add_rows(problem, no_of_valuations+2); - - // Additional column for k - glp_add_cols(problem, n+m+1); - - for(int i = 1; i < no_of_valuations+1; i++) - glp_set_row_bnds(problem, i, GLP_UP, 0.0, 0.0); // <= 0 - - // Set row bounds for side condition - recall we have -k in the extra column. - if(m==0) - glp_set_row_bnds(problem, no_of_valuations+1, GLP_LO, 1.0, 0.0); // >= 1 - else - glp_set_row_bnds(problem, no_of_valuations+1, GLP_LO, 0.0, 0.0); // >= 0 - - // Set row bounds for additional constraint - glp_set_row_bnds(problem, no_of_valuations+2, GLP_LO, 1.0, 0.0); // >= 1 - - // Set variable bounds - for(int i=1; i < (n+m+1); i++){ - glp_set_col_kind(problem, i, GLP_IV); //integer variables - glp_set_col_bnds(problem, i, GLP_LO, 0, 0); // r_i, s_i >= 0 - } - - // K is positive integer - glp_set_col_kind(problem, n+m+1, GLP_IV); //integer k - glp_set_col_bnds(problem, n+m+1, GLP_LO, 1.0, 0.0); // k >= 1 - - - // Arrays for inputting into glpk - const int size = (no_of_valuations+2)*(n+m+1); - double ar[size+1]; - int ia[size+1]; - int ja[size+1]; - - // Recall GLKP takes arrays with 1 - size not 0 - size-1. - for(int i=0; i < size; i++){ - ia[i+1] = (i / (n+m+1)) + 1; - ja[i+1] = (i % (n+m+1)) + 1; - } - - int counter=1; - - // Load all valuations - for(int i=0; i < no_of_valuations; i++){ - int temp = i; - for(int j=0; j < n; j++){ - ar[counter] = temp & 1; - temp >>= 1; - counter++; - } - for(int j=0; j < m; j++){ - ar[counter] = -(temp & 1); - temp >>= 1; - counter++; - } - ar[counter] = -1; // - k on each valuation. - counter++; - } - - // Load side condition - for(int i=0; i < n; i++){ - ar[counter] = prem.get_a_i(i).get(); - counter++; - } - - for(int j=0; j < m; j++){ - ar[counter]= -(prem.get_b_i(j).get()); - counter++; - } - //side condition has coefficent k of -1 - ar[counter] = -1; - counter++; - - //Finally load condition that one must be nonzero. - for(int i=0; i < n+m; i++){ - ar[counter] = 1; - counter++; - } - // k coefficient here is zero - ar[counter] = 0; - - glp_load_matrix(problem, size, ia, ja, ar); - //glp_write_lp(problem, NULL, "testy.txt"); -} diff --git a/src/lib/GMLMIP-0.1/formulas/PML_formula.h b/src/lib/GMLMIP-0.1/formulas/PML_formula.h deleted file mode 100644 index 8e04b3fed720d5f4b466d87852c35f9d938c6ace..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/PML_formula.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef PML_FORMULA_HH -#define PML_FORMULA_HH - -#include "formula.h" - -class PML_Formula : public Formula<Rational> { - private: - void load_linear_program(glp_prob* problem, Premise<Rational>& prem); - - public: - bdd modal(bdd *b, int n, int m); - -}; -#endif diff --git a/src/lib/GMLMIP-0.1/formulas/formula.c b/src/lib/GMLMIP-0.1/formulas/formula.c deleted file mode 100644 index 06bd40c0e81478cccf78f23ee002c8a2ccc82e42..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/formula.c +++ /dev/null @@ -1,324 +0,0 @@ -#include "formula.h" - -#include <set> -#include <cassert> - -IFormula::~IFormula() { -} - -template<class ModalValueType> -Formula<ModalValueType>::Formula(){ - number_of_variables = 0; - variables.set_empty_key(-1); // - variables_back.set_empty_key(-1); // - data d; - modal_variables.set_empty_key(d); - modal_variables_back.set_empty_key(-1); // - Premise<ModalValueType> p; - rule_cache.set_empty_key(p); -} - -template<class ModalValueType> -bdd Formula<ModalValueType>::variable(int n){ - if(variables.count(n) == 0){ - variables[n] = number_of_variables; - variables_back[number_of_variables] = n; - number_of_variables++; - } - return bdd_ithvarpp(variables[n]); -} - -template<class ModalValueType> -bdd Formula<ModalValueType>::modal_var(bdd *b, ModalValueType &n){ - data d(n, b); - if(modal_variables.count(d) == 0){ - modal_variables[d] = number_of_variables; - modal_variables_back[number_of_variables] = d; - number_of_variables++; - } - return bdd_ithvarpp(modal_variables[d]); -} - - -template<class ModalValueType> -void Formula<ModalValueType>::print_back_vars(){ - cout << setw(10) << "BDD number " << setw(10) << "Input Number" << endl; - for(int i=0; i < 1000; i++) - if(variables_back.count(i) > 0 ) - cout << setw(10) << i << setw(10) << variables_back[i] << endl; - cout << endl; -} - -vector<SatisfyingAssignment> gatherer_stack; - -void sat_handler_gatherer(char *varset, int size){ - SatisfyingAssignment s(size, varset); - gatherer_stack.push_back(s); -} - -template<class ModalValueType> -set<set<int> > Formula<ModalValueType>::gatherRules(bdd b) { - bdd_allsat(b, sat_handler_gatherer); - vector<SatisfyingAssignment> sat_ass = gatherer_stack; - gatherer_stack.clear(); - set<set<int> > disj; - for (vector<SatisfyingAssignment>::iterator it = sat_ass.begin(); - it != sat_ass.end(); ++it) - { - set<int> conj; - SatisfyingAssignment& sat = *it; - for (int v = 0; v < sat.get_size(); v++) { - if (sat.get_array_i(v) != 1 && sat.get_array_i(v) != 0) continue; - if (!variables_back.count(v)) continue; - int sgn = ((sat.get_array_i(v)==1) ? 1 : (-1)); - conj.insert(variables_back[v] * sgn); - } - disj.insert(conj); - } - return disj; -} - -void sat_handler(char *varset, int size){ - SatisfyingAssignment s(size, varset); - sat_ass_stack.push_back(s); -} - -template<class ModalValueType> -RuleCollection Formula<ModalValueType>::check_satisfiability(bdd b){ - //bdd_printdot(b); - bdd_allsat(b, sat_handler); // pushes satisfying assignment onto stack - vector<SatisfyingAssignment> sat_ass = sat_ass_stack; - sat_ass_stack.clear(); - // it might be zero if already on the syntactic level there is something like A /\ ~A - assert(sat_ass.size() <= 1); - if (sat_ass.size() == 1) { - return apply_rules(sat_ass[0]); - } else { - // TODO: return {} or { {} }? - // the secound one would mean { False } - return set<set<set<int> > >(); - } -} - -template<class ModalValueType> -RuleCollection Formula<ModalValueType>::apply_rules(SatisfyingAssignment& sat){ - RuleCollection result; - - int no_of_positive = 0; - int no_of_negative = 0; - bdd **underlying_formulae; - ModalValueType *positive_modal_indices, *negative_modal_indices; - - // We first find the size of the required arrays. - for(int v=0; v < sat.get_size(); v++){ - if(sat.get_array_i(v)==1 && modal_variables_back.count(v)) // if true and represents a modal formula. - no_of_positive++; - else if(sat.get_array_i(v)==0 && modal_variables_back.count(v)) // if false and ... - no_of_negative++; - } - // cout << no_of_positive + no_of_negative << endl; - if(no_of_positive + no_of_negative > 0){ - - // We then initialize our new arrays. - underlying_formulae = new bdd* [no_of_positive+no_of_negative]; - - positive_modal_indices = new ModalValueType[no_of_positive]; - negative_modal_indices = new ModalValueType[no_of_negative]; - - // We then fill our underlying formulae and modal value arrays. - int i=0, j=0; - for(int v=0; v < sat.get_size(); v++){ - if(sat.get_array_i(v)==1 && modal_variables_back.count(v)){ - underlying_formulae[i] = (modal_variables_back[v]).argument; - positive_modal_indices[i] = (modal_variables_back[v]).value; - i++; - } - else if(sat.get_array_i(v)==0 && modal_variables_back.count(v)){ //if false and represents a modal formula. - underlying_formulae[no_of_positive+j] = (modal_variables_back[v]).argument; - negative_modal_indices[j] = (modal_variables_back[v]).value; - j++; - } - } - - // Construct a GML premise - Premise<ModalValueType> premise(no_of_positive, no_of_negative, positive_modal_indices, negative_modal_indices); - // Check the rule cache - if(rule_cache.count(premise)){ // if in cache - SetOfConclusions concs = rule_cache[premise]; - for(int i = 0; i < concs.number_of_conclusions(); i++){ - bdd b = concs.get_jth_conclusion(underlying_formulae, i); - result.insert(gatherRules(b)); - } - } else { - RuleCollection r = enumerate_rules(premise, underlying_formulae); - result.insert(r.begin(), r.end()); - } - - delete [] underlying_formulae; - delete [] positive_modal_indices; - delete [] negative_modal_indices; - } - - return result; -} - -template<class ModalValueType> -RuleCollection Formula<ModalValueType>::enumerate_rules(Premise<ModalValueType>& prem, bdd** underlying_formulae){ - RuleCollection result; - vector<vector<bool> > valid_nodes; - vector<pair<vector<bool>, int> > anti_nodes; - vector<vector<bool> > node_queue; - int total_valuations = prem.get_total_valuations(); - - glp_prob *problem = glp_create_prob(); - - // Parameters while solving with glpk - glp_iocp* parameters = new glp_iocp; - glp_init_iocp(parameters); - parameters->presolve = GLP_ON; - - parameters->msg_lev = GLP_MSG_ERR; - //parameters->msg_lev = GLP_MSG_ALL; - - load_linear_program(problem, prem); - - vector<bool> zero(total_valuations, false); - - if (run_solver(problem, parameters, false, zero, -1)) { - if (run_solver(problem, parameters, true, zero, 0)) { - } else { - node_queue.push_back(zero); - //int i = 0; - while(node_queue.size()) { - //cout << "outer space: " << i++ << " runs: " << test_counter << " queue: " << node_queue.size() << " sols: " << valid_nodes.size() << " antisols: " << anti_nodes.size() << endl; - RuleCollection r = enum_rules_intern(problem, parameters, prem, underlying_formulae, node_queue, valid_nodes, anti_nodes); - result.insert(r.begin(), r.end()); - } - if (!rule_cache.count(prem)) { - rule_cache[prem] = SetOfConclusions(prem.get_n() + prem.get_m(), valid_nodes); - } - //cout << "runs: " << test_counter << " sols: " << valid_nodes.size() << " antisols: " << anti_nodes.size() << endl; - } - } - - //Clean-up - delete parameters; - glp_delete_prob(problem); - - return result; -} - -template<class ModalValueType> -RuleCollection Formula<ModalValueType>::enum_rules_intern(glp_prob* problem, glp_iocp* parameters, Premise<ModalValueType>& prem, bdd** underlying_formulae, - vector<vector<bool> >& node_queue, vector<vector<bool> >& valid_nodes, vector<pair<vector<bool>, int> >& anti_nodes){ - RuleCollection result; - vector<vector<bool> > new_node_queue; - int total_valuations = prem.get_total_valuations(); - - for (unsigned int k = 0; k < node_queue.size(); k++) { - vector<bool> current_node = node_queue[k]; - - int power = total_valuations-1; - while(power >= 0 && !current_node[power]) - power--; - for(int i = power+1; i < total_valuations; i++){ - vector<bool> new_node(current_node); - new_node[i] = true; - - // Check node isn't superset of something already valid - bool isSubnode = false; - for(unsigned int i1=0; i1 < valid_nodes.size() && !isSubnode; i1++){ - bool isSub = true; - for(int j1=0; j1 < total_valuations; j1++){ - if (valid_nodes[i1][j1] && !new_node[j1]) { - isSub = false; - break; - } - } - if (isSub) isSubnode = true; - } - // Check node isn't superset of something of an anti-solution - for(unsigned int i1=0; i1 < anti_nodes.size() && !isSubnode; i1++){ - bool isSub = true; - int idx = anti_nodes[i1].second; - vector<bool> antinode = anti_nodes[i1].first; - for(int j1=0; j1 < total_valuations; j1++){ - if ((j1 <= idx && antinode[j1] != new_node[j1]) || (j1 > idx && antinode[j1] && !new_node[j1])) { - isSub = false; - break; - } - } - if (isSub) isSubnode = true; - } - - if (!isSubnode) { - if (run_solver(problem, parameters, false, new_node, i)) { - if (run_solver(problem, parameters, true, new_node, 0)) { - valid_nodes.push_back(new_node); - //cout << "solution found " << valid_nodes.size() << endl; - //for (int l = 0; l < total_valuations; l++) - // cout << " " << new_node[l] << endl; - vector<vector<bool> > singleton; - singleton.push_back(new_node); - SetOfConclusions temp = SetOfConclusions(prem.get_n() + prem.get_m(), singleton); - bdd b = temp.get_jth_conclusion(underlying_formulae, 0); - result.insert(gatherRules(b)); - } else { - new_node_queue.push_back(new_node); - } - } - else { - pair<vector<bool>, int> antipair = pair<vector<bool>, int>(new_node, i); - anti_nodes.push_back(antipair); - } - } - } - } - node_queue = new_node_queue; - return result; -} - -template<class ModalValueType> -bool Formula<ModalValueType>::run_solver(glp_prob *problem, glp_iocp* parameters, bool strict, vector<bool> current_node, int index){ - test_counter++; - - // Modify glp problem to match node - for(unsigned int i = 0; i < current_node.size(); i++){ - if(current_node[i]) - glp_set_row_bnds(problem, i+1, GLP_LO, 1.0, 0.0); // > 0 - //+1 since valuations go zero to 2^(n+m)-1, glpk rows go 1 to 2^(n+m). - else if (strict || static_cast<int>(i) <= index) - glp_set_row_bnds(problem, i+1, GLP_UP, 0.0, 0.0); // leq 0 - else - glp_set_row_bnds(problem, i+1, GLP_FR, 0.0, 0.0); // don't care - } - - if (!strict) { - parameters->tm_lim = 1000; - } else { - parameters->tm_lim = 1000000000; - } - - // Solve the LP - int result = glp_intopt(problem, parameters); - - if(result == 0 || result == GLP_ENOPFS) { //if no errors from solver or a relaxtion feasibility error - if(glp_mip_status(problem)==GLP_OPT || glp_mip_status(problem)==GLP_FEAS){ // if feasible - return true; - } - else { - return false; - } - } - else if (!strict && result == GLP_ETMLIM) { // if the solver timed out for non-strict problems - //cout << "timeout" << endl; - return true; - } else { // if error but not a feasibility error - cout << "glpk error: " << result << endl; - exit(1); - } -} - - -template class Formula<int>; -template class Formula<Rational>; diff --git a/src/lib/GMLMIP-0.1/formulas/formula.h b/src/lib/GMLMIP-0.1/formulas/formula.h deleted file mode 100644 index e7a50c40173a128afda7a8b55f9399a84d888c2b..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/formula.h +++ /dev/null @@ -1,168 +0,0 @@ -#ifndef FORMULA_HH -#define FORMULA_HH - -#include <iostream> -#include <cstdlib> -#include <cstring> -#include <iomanip> -#include <sstream> -#include <string> -#include <set> -#include <time.h> - -#include "bdd.h" -#include "glpk.h" - -#include <vector> -#include <utility> - -#include "google/dense_hash_map" -#include <ext/hash_map> -/* will become #include <unordered_set> */ - -#include "rational.h" -#include "../rules/premise.h" -#include "../rules/setofconclusions.h" -#include "../satisfyingstack.h" - -using namespace std; - -using std::cout; -using std::endl; -using std::vector; -using google::dense_hash_map; -using __gnu_cxx::hash; - -typedef set<set<set<int> > > RuleCollection; - -// Formula interface so we can have abstract template class pointers. -class IFormula { - public: - virtual ~IFormula(); - virtual bdd variable(int n)=0; - virtual void set_bdd(bdd &b)=0; - virtual bdd get_bdd()=0; - virtual bdd modal(bdd *b, int n, int m)=0; - virtual bool satisfiability(int option)=0; - virtual void clear_maps()=0; - virtual RuleCollection onestep() = 0; - virtual int get_variables_back(int bddvar) = 0; -}; - -template<class ModalValueType> -class Formula : public IFormula{ - protected: - /* REQUIRED DEFINITIONS FOR HASH_MAPS */ - class data { - public: - ModalValueType value; - bdd* argument; - data() : value(-1) {argument = NULL; }; - data(ModalValueType v, bdd* arg) : value(v){ argument = arg; }; - ~data(){ if(argument) delete argument; }; - data& operator=(const data& other){ - if (this!=&other){ - if(argument) - delete argument; - value = other.value; - argument = NULL; - if(other.argument) - argument = new bdd(*(other.argument)); - } - return *this; - }; - data(const data& other){ - value = other.value; - argument = NULL; - if(other.argument) - argument = new bdd(*(other.argument)); - }; - }; - - // Required for dense_hash_map - how to compare keys. - struct eqkey { - bool operator()(const string s1, const string s2) const{ - return s1 == s2; - } - - bool operator()(const int s1, const int s2) const{ - return (s1 == s2); - } - - bool operator()(const data& d1, const data& d2) const{ - return ((d1.value == d2.value) && ((d1.argument==d2.argument) || (d1.argument && d2.argument && (*(d1.argument) == *(d2.argument))))); - } - }; - - // Number of variables. Set to zero by constructor and - // incremented as variables and modal variables are added. - // (Used for building the hash_maps). - int number_of_variables; - - // Map of parsed variable numbers to BDD package numbers - dense_hash_map<int, int, hash<int>, eqkey> variables; - // Map of BDD package numbers to input numbers - dense_hash_map<int, int, hash<int>, eqkey> variables_back; - - // How to hash data items. - struct datahash { - hash <const char*> charhash; - hash <int> inthash; - size_t operator ()(const data& d) const { - stringstream ss; - string s; - ss << d.value << " " << *d.argument << '\0'; - s = ss.str(); - char buf[s.size()+1]; - for(unsigned int i=0; i < s.size(); i++) - buf[i] = s[i]; - buf[s.size()]='\0'; - return charhash(buf); - } - }; - - dense_hash_map<data, int, datahash, eqkey> modal_variables; - dense_hash_map<int, data, hash<int>, eqkey> modal_variables_back; - - dense_hash_map<Premise<ModalValueType>, SetOfConclusions, typename Premise<ModalValueType>::Premise_hash, typename Premise<ModalValueType>::Premise_equal> rule_cache; - - int test_counter; - - RuleCollection check_satisfiability(bdd b); - RuleCollection apply_rules(SatisfyingAssignment& sat); - RuleCollection enumerate_rules(Premise<ModalValueType>& prem, bdd** underlying_formulae); - RuleCollection enum_rules_intern(glp_prob* problem, glp_iocp* parameters, Premise<ModalValueType>& prem, bdd** underlying_formulae, vector<vector<bool> >& node_queue, vector<vector<bool> >& valid_nodes, vector<pair<vector<bool>, int> >& anti_nodes); - bool run_solver(glp_prob *problem, glp_iocp* parameters, bool strict, vector<bool> current_node, int index); - - virtual void load_linear_program(glp_prob* problem, Premise<ModalValueType>& prem)=0; - - public: - Formula(); - // The parsed formula - bdd bdd_rep; - - // Used by the driver to set bdd_rep - void set_bdd(bdd &b){ bdd_rep=b; }; - bdd get_bdd(){ return bdd_rep;}; - - // Called by parser to construct variable or modal variable. - // Also constructs appropriate data structures. - bdd variable(int n); - bdd modal_var(bdd *b, ModalValueType &n); - - void print_back_vars(); - //virtual void print_back_modal()=0; - int get_variables_back(int bddvar) { return variables_back[bddvar]; } - set<set<int> > gatherRules(bdd b); - - bool satisfiability(int option){ assert(0=="patched GMLMIP\n"); return true;}; - RuleCollection onestep() { return check_satisfiability(bdd_rep); }; - - void clear_maps(){ - variables.clear(); - variables_back.clear(); - modal_variables.clear(); - modal_variables_back.clear(); - rule_cache.clear(); }; -}; -#endif diff --git a/src/lib/GMLMIP-0.1/formulas/makefile b/src/lib/GMLMIP-0.1/formulas/makefile deleted file mode 100644 index f2465b1a0a23f29f993a8f8708f71b55175569f6..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/makefile +++ /dev/null @@ -1,21 +0,0 @@ -include ../config.mk - -all: formula.o PML_formula.o GML_formula.o rational.o satisfyingassignment.o - -satisfyingassignment.o: satisfyingassignment.h satisfyingassignment.cpp - $(GCC) $(GCCFLAGS) -c satisfyingassignment.cpp - -formula.o: formula.h formula.cpp - $(GCC) $(GCCFLAGS) -c formula.cpp - -PML_formula.o: formula.h rational.h PML_formula.cpp PML_formula.h ../rules/PML_premise.h ../rules/setofconclusions.h - $(GCC) $(GCCFLAGS) -c PML_formula.cpp - -GML_formula.o: formula.h GML_formula.cpp GML_formula.h ../rules/GML_premise.h ../rules/setofconclusions.h - $(GCC) $(GCCFLAGS) -c GML_formula.cpp - -rational.o: rational.h rational.cpp - $(GCC) $(GCCFLAGS) -c rational.cpp - -clean: - rm -rf *~ *.o test diff --git a/src/lib/GMLMIP-0.1/formulas/rational.c b/src/lib/GMLMIP-0.1/formulas/rational.c deleted file mode 100644 index a0b5a1022c50f976cc6e2c1e05e4ce7a4ddfab77..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/rational.c +++ /dev/null @@ -1,29 +0,0 @@ -#include "rational.h" - -Rational::Rational(int i){ - if(i==-1){ //For empty key in hash maps - top = 0; - bottom = 0; - } - else{ - top = i; - bottom = 1; - } -} - -double Rational::get(){ - return (static_cast<double>(top)/bottom); -} - -ostream& operator<<(ostream &o, const Rational &r){ - o << r.top << "/" << r.bottom; - return o; -} - -bool operator==(const Rational &r1, const Rational &r2){ - return((r1.top*r2.bottom) == (r2.top*r1.bottom)); -} - -bool operator!=(const Rational &r1, const Rational &r2){ - return !(r1==r2); -} diff --git a/src/lib/GMLMIP-0.1/formulas/rational.h b/src/lib/GMLMIP-0.1/formulas/rational.h deleted file mode 100644 index 2e41dd433a31d340aa66c824443d7545246fea92..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/rational.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef RATIONAL_H -#define RATIONAL_H - -#include <iostream> - -using namespace std; - -class Rational { - private: - int top; - int bottom; - public: - Rational(){ top=0; bottom=0; }; - Rational(int i); - Rational(int t, int b){top=t; bottom=b;}; - int get_top(){ return top;}; - int get_bot(){ return bottom;}; - double get(); - - friend ostream& operator<<(ostream &o, const Rational &r); - friend bool operator==(const Rational &r1, const Rational &r2); - friend bool operator!=(const Rational &r1, const Rational &r2); -}; - -#endif - diff --git a/src/lib/GMLMIP-0.1/formulas/satisfyingassignment.c b/src/lib/GMLMIP-0.1/formulas/satisfyingassignment.c deleted file mode 100644 index 3f9b1b050f6c0590606e789a96b3c7c0762f1573..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/satisfyingassignment.c +++ /dev/null @@ -1,64 +0,0 @@ -#include "satisfyingassignment.h" - -SatisfyingAssignment::SatisfyingAssignment(int _size, char* _array){ - size = _size; - - if(size) - array = new char [size]; - else - array = NULL; - - for(int i=0; i < size; i++) - array[i]=_array[i]; -} - -SatisfyingAssignment::SatisfyingAssignment(const SatisfyingAssignment& a){ - size = a.size; - - if(size) - array = new char [size]; - else - array = NULL; - - for(int i=0; i < size; i++) - array[i]=a.array[i]; -} - -SatisfyingAssignment& SatisfyingAssignment::operator=(const SatisfyingAssignment& a){ - if(this != &a){ - if(array) - delete [] array; - size = a.size; - - if(size) - array = new char [size]; - else - array = NULL; - - for(int i=0; i < size; i++) - array[i]=a.array[i]; - } - return *this; -} - - -SatisfyingAssignment::~SatisfyingAssignment(){ - if(array) - delete [] array; -} - -char SatisfyingAssignment::get_array_i(int i){ - if(array) - return array[i]; - return '\0'; -} - -bool SatisfyingAssignment::operator==(const SatisfyingAssignment& other) const{ - if(size == other.size){ - for(int i = 0; i < size; i++) - if(array[i]!=other.array[i]) - return false; - return true; - } - return false; - } diff --git a/src/lib/GMLMIP-0.1/formulas/satisfyingassignment.h b/src/lib/GMLMIP-0.1/formulas/satisfyingassignment.h deleted file mode 100644 index 7ad55650722760a69481739f9ab34ba0ed054369..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/formulas/satisfyingassignment.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef SATISFYINGASSIGNMENT_H -#define SATISFYINGASSIGNMENT_H - -#include <iostream> - -using namespace std; - -class SatisfyingAssignment { - private: - int size; - char* array; - public: - SatisfyingAssignment(){ size = 0; array = NULL; }; - SatisfyingAssignment(int _size, char* _array); - SatisfyingAssignment(const SatisfyingAssignment& a); - SatisfyingAssignment& operator=(const SatisfyingAssignment& a); - ~SatisfyingAssignment(); - - bool operator==(const SatisfyingAssignment& other) const; - - - int get_size(){ return size;}; - char get_array_i(int i); -}; - -#endif diff --git a/src/lib/GMLMIP-0.1/input b/src/lib/GMLMIP-0.1/input deleted file mode 100644 index 66bbf4fa593e43fca7a83b7d7f3c30ecd3d4adef..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/input +++ /dev/null @@ -1,2 +0,0 @@ -Logic:GML -<3>p0 & <3>~p0 & ~<5>true diff --git a/src/lib/GMLMIP-0.1/main.c b/src/lib/GMLMIP-0.1/main.c deleted file mode 100644 index 219c05539b0d7d21a9673edf774a5681242bdeb7..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/main.c +++ /dev/null @@ -1,70 +0,0 @@ -#include <iostream> -#include <vector> -#include <time.h> - -#include "./parser/mlf-driver.h" -#include "./formulas/formula.h" -#include "./formulas/satisfyingassignment.h" -#include "satisfyingstack.h" - -#include "bdd.h" - -using namespace std; - -vector<SatisfyingAssignment> sat_ass_stack; - -/* Error handler for running out of BDD nodes */ -void error_handler(int errorcode){ - if(errorcode==BDD_VAR) - bdd_extvarnum(1000); - else - cout << "BDD package error number " << errorcode << endl; -} - -void parse(IFormula* &formula, int argc, char *argv[], int& verbose); - -int main (int argc, char *argv[]){ - clock_t total_time = clock(); - IFormula* f = NULL; - int verbose = 0; - //initalize buddy - bdd_init(100000, 10000); - bdd_setvarnum(100); // Minimum is two. - bdd_error_hook(error_handler); - parse(f, argc, argv, verbose); - if(f){ - // bdd_varblockall(); - // bdd_reorder(BDD_REORDER_WIN3ITE); - // bdd_printdot((driver.formula)->bdd_rep); - //bdd_printset(f->get_bdd()); - //cout << endl; - //(driver.formula)->print_back_vars(); - fprintf(stderr,"Cannot check satisfiability due to patched GMLMIP\n"); - //if(f->satisfiability(verbose)) - // cout << "Satisfiable" << endl; - //else - // cout << "Unsatisfiable" << endl; - f->clear_maps(); - delete f; - } - bdd_done(); - total_time = clock() - total_time; - cout << "Total Time: " << static_cast<float>(total_time) / CLOCKS_PER_SEC << endl; - return 0; -} - -void parse(IFormula* &formula, int argc, char *argv[], int& option){ - mlf_driver driver; - for (++argv; argv[0]; ++argv) - if (*argv == std::string ("-p")) - driver.trace_parsing = true; - else if (*argv == std::string ("-v")) - option = 1; - else if (*argv == std::string ("-t")) - option = 2; - else if (*argv == std::string ("-s")) - driver.trace_scanning = true; - else if (!driver.parse (*argv)) - driver.extract_formula(formula); -} - diff --git a/src/lib/GMLMIP-0.1/makefile b/src/lib/GMLMIP-0.1/makefile deleted file mode 100644 index 934e0e7a2eaefa0ffff0a9122059b6d56afa3842..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/makefile +++ /dev/null @@ -1,51 +0,0 @@ - -include config.mk - -POBJS = ./parser/lex.yy.o ./parser/mlf-parser.tab.o ./parser/mlf-driver.o -FOBJS = ./formulas/formula.o ./formulas/GML_formula.o ./formulas/PML_formula.o ./formulas/rational.o ./formulas/satisfyingassignment.o -ROBJS = ./rules/premise.o ./rules/GML_premise.o ./rules/PML_premise.o ./rules/valuation.o ./rules/setofconclusions.o ./rules/sizefunctions.o ./rules/radixtree.o - -HEADERS = parser/mlf-parser.tab.h \ -parser/mlf-driver.h \ -formulas/formula.h \ -formulas/satisfyingassignment.h \ -parser/lex.yy.h - -.PHONY: all clean parser/% formulas/% rules/% - -all: main onestep-example onestep.o - -.PHONY: phony -# don't do anything here -phony: - @: - - -parser/%: phony - @make --no-print-directory -C parser/ $(@:parser/%=%) - -formulas/%: phony - @make --no-print-directory -C formulas/ $(@:formulas/%=%) - -rules/%: phony - @make --no-print-directory -C rules/ $(@:rules/%=%) - - -main: main.o $(POBJS) $(FOBJS) $(ROBJS) - $(GCC) $(GCCFLAGS) $(POBJS) $(FOBJS) $(ROBJS) -lbdd -lm -lglpk $< -o $@ - -onestep-example: onestep-example.o $(POBJS) $(FOBJS) $(ROBJS) onestep.o - $(GCC) $(GCCFLAGS) $(POBJS) $(FOBJS) $(ROBJS) onestep.o -lbdd -lm -lglpk $< -o $@ - - -main.o: main.cpp $(HEADERS) - $(GCC) $(GCCFLAGS) -c $< -o $@ - -onestep-example.o: onestep-example.cpp $(HEADERS) - $(GCC) $(GCCFLAGS) -c $< - -onestep.o: onestep.cpp $(HEADERS) - $(GCC) $(GCCFLAGS) -c $< - -clean: parser/clean formulas/clean rules/clean - rm -rf *.o main diff --git a/src/lib/GMLMIP-0.1/onestep-example.c b/src/lib/GMLMIP-0.1/onestep-example.c deleted file mode 100644 index 3283733cc50733ff89e8e894f4f5846e74d97118..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/onestep-example.c +++ /dev/null @@ -1,68 +0,0 @@ -#include <iostream> -#include <vector> -#include <time.h> - -#include "bdd.h" -#include "./formulas/formula.h" -#include "./formulas/GML_formula.h" -#include "./formulas/PML_formula.h" -#include "./formulas/rational.h" -#include "./formulas/satisfyingassignment.h" -#include "satisfyingstack.h" -#include "./parser/mlf-driver.h" -#include "onestep.h" - -using namespace std; - -int main (int argc, char *argv[]){ - clock_t total_time = clock(); - IFormula* f = NULL; - // this turns into an endless loop - //bdd b = bdd_and(f->modal(new bdd(f->variable(0)), 4, 0), - // bdd_not(f->modal(new bdd(f->variable(0)), 6, 0))); - if (true) { - mlf_driver driver; - driver.set_formula_gml(); - if (!driver.parse ("-")) { - driver.extract_formula(f); - } - } else { - f = new GML_Formula; - bdd b = bdd_and(bdd_and(f->modal(new bdd(f->variable(8)), 4, 0), - bdd_not(f->modal(new bdd(bdd_not(f->variable(7))), 3, 0))), - bdd_not(f->modal(new bdd(bdd_not(f->variable(9))), 3, 0))); - f->set_bdd(b); - } - // bdd_varblockall(); - // bdd_reorder(BDD_REORDER_WIN3ITE); - // bdd_printdot((driver.formula)->bdd_rep); - //bdd_printset(f->get_bdd()); - //cout << endl; - //(driver.formula)->print_back_vars(); - //vector<RuleChild> res = f->onestep_rules(b); - //cout << res.size() << " childs" << endl; - //for (unsigned int r = 0; r < res.size(); r++) { - // RuleChild& rc = res[r]; - // for (unsigned int i = 0; i < rc.size(); i++) { - // cout << "\\/ ("; - // for (unsigned int j = 0; j < rc[i].size(); j++) { - // pair<bool,int>& p = rc[i][j]; - // if (j != 0) cout << ", "; - // if (!p.first) cout << "~"; - // cout << p.second; - // } - // cout << ")"; - // } - // cout << endl; - //} - if (f) { - RuleCollection vsa = f->onestep(); - printRuleCollection(vsa); - f->clear_maps(); - delete f; - } - total_time = clock() - total_time; - cout << "Total Time: " << static_cast<float>(total_time) / CLOCKS_PER_SEC << endl; - return 0; -} - diff --git a/src/lib/GMLMIP-0.1/onestep.c b/src/lib/GMLMIP-0.1/onestep.c deleted file mode 100644 index ddc0e8b8153a9afa96aeccc09f48d7ec953a79ae..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/onestep.c +++ /dev/null @@ -1,143 +0,0 @@ -#include <iostream> -#include <vector> -#include <time.h> -#include "onestep.h" - -#include "bdd.h" -#include "./formulas/formula.h" -#include "./formulas/GML_formula.h" -#include "./formulas/PML_formula.h" -#include "./formulas/rational.h" -#include "./formulas/satisfyingassignment.h" -#include "./rules/setofconclusions.h" -#include "satisfyingstack.h" - -using namespace std; - -vector<SatisfyingAssignment> sat_ass_stack; - -/* Error handler for running out of BDD nodes */ -static void error_handler(int errorcode){ - if(errorcode==BDD_VAR) - bdd_extvarnum(1000); - else - cerr << "BDD package error number " << errorcode << endl; -} - -// use C++-Magic to initialize and destroy bdd library -class BDDInitializer { public: - BDDInitializer() { - bdd_init(100000, 10000); - bdd_setvarnum(100); // Minimum is two. - bdd_error_hook(error_handler); - }; - ~BDDInitializer() { - bdd_done(); - }; -}; - -BDDInitializer initializeBddLibrary; - -/* - * FOR GML - */ - -// some utils -static bdd tupleModality2Bdd_GML(IFormula* f, const pair<pair<bool,int>,int>& t) { - if (t.first.first) { - /* diamond */ - bdd* b = new bdd(f->variable(t.second)); - return f->modal(b, t.first.second, 0); - } else { - /* box */ - bdd* b = new bdd(bdd_not(f->variable(t.second))); - return bdd_not(f->modal(b, t.first.second, 0)); - } -} - - -GMLConclusion gmlmip_onestep_gml(GMLPremise modvec) { - IFormula* f = NULL; - if (modvec.size() <= 0) { - // Nothing to do -> no rules - GMLConclusion rulevec; - return rulevec; - } else { - f = new GML_Formula; - bdd b = tupleModality2Bdd_GML(f, modvec[0]); - for (unsigned int i = 1; i < modvec.size(); i++) { - b = bdd_and(b, tupleModality2Bdd_GML(f, modvec[i])); - } - f->set_bdd(b); - RuleCollection vsa = f->onestep(); - f->clear_maps(); - delete f; - return vsa; - } -} - -/* - * FOR PML - */ - -static bdd tupleModality2Bdd_PML(IFormula* f, const pair<pair<bool,pair<int,int> >,int>& t) { - if (t.first.first) { - /* diamond */ - bdd* b = new bdd(f->variable(t.second)); - return f->modal(b, t.first.second.first, t.first.second.second); - } else { - /* box */ - bdd* b = new bdd(bdd_not(f->variable(t.second))); - return bdd_not(f->modal(b, t.first.second.first, t.first.second.second)); - } -} - - -GMLConclusion gmlmip_onestep_pml(PMLPremise modvec) { - IFormula* f = NULL; - if (modvec.size() <= 0) { - // Nothing to do -> no rules - GMLConclusion rulevec; - return rulevec; - } else { - f = new PML_Formula; - bdd b = tupleModality2Bdd_PML(f, modvec[0]); - for (unsigned int i = 1; i < modvec.size(); i++) { - b = bdd_and(b, tupleModality2Bdd_PML(f, modvec[i])); - } - f->set_bdd(b); - RuleCollection vsa = f->onestep(); - f->clear_maps(); - delete f; - return vsa; - } -} - -/* - * Debug output: - */ -void printRuleCollection(const RuleCollection& rc) { - cout << rc.size() << " rules\n"; - for (RuleCollection::iterator it = rc.begin(); it != rc.end(); ++it) { - const set<set<int> > &r = *it; - bool first = true; - cout << "(\\/ "; - for (set<set<int> >::iterator jt = r.begin(); jt != r.end(); ++jt) { - const set<int>& clause = *jt; - if (first) first = false; else cout << "\n "; - cout << "(/\\"; - for (set<int>::iterator kt = clause.begin(); kt != clause.end(); ++kt) { - int v = *kt; - if (v > 0) { - cout << " p" << v; - } else { - cout << " ¬p" << (-v); - } - } - cout << " )"; - } - cout << ")"; - cout << endl << endl; - } -} - diff --git a/src/lib/GMLMIP-0.1/onestep.h b/src/lib/GMLMIP-0.1/onestep.h deleted file mode 100644 index efefbe0776d8fb3efe5a3f4d9b4e9b6f196bf716..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/onestep.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __GMLMIP_ONESTEP_H_ -#define __GMLMIP_ONESTEP_H_ - -#include <vector> -#include <set> -#include <utility> // for pair -#include "formulas/formula.h" - - -/* transforms list of gml formulas (diamond?,number,formula) - to list of consequences (formula,positive?), - here positive? means that the formula must be true in order to make the - given conjunct of modalities true -*/ -typedef std::vector<std::pair<std::pair<bool,int>,int> > GMLPremise; -/* - * For PML, the premise is a list of modal formulas: - * ((diamond?,(nominator,denominator)),formula) - */ -typedef std::vector<std::pair<std::pair<bool,std::pair<int,int> >,int> > PMLPremise; -/* - * The Conclusion is the same for PML and GML: - * It is a set of rule conclusions. One rule conclusions is of the form \/ /\ lit - * where lit is encoded by: (formula,positive?) - */ -typedef std::set<std::set<std::set<int> > > GMLConclusion; - -GMLConclusion gmlmip_onestep_gml(GMLPremise modvec); -GMLConclusion gmlmip_onestep_pml(PMLPremise modvec); - -void printRuleCollection(const RuleCollection& rc); - -#endif diff --git a/src/lib/GMLMIP-0.1/parser/lex.yy.c b/src/lib/GMLMIP-0.1/parser/lex.yy.c deleted file mode 100644 index f5d55a4d8890f64e4dd13997f729326b382ae7d8..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/lex.yy.c +++ /dev/null @@ -1,2233 +0,0 @@ - -#line 3 "lex.yy.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -/* %not-for-header */ - -/* %if-c-only */ -/* %if-not-reentrant */ - -/* %endif */ -/* %endif */ -/* %ok-for-header */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* %if-c++-only */ -/* %endif */ - -/* %if-c-only */ - -/* %endif */ - -/* %if-c-only */ - -/* %endif */ - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -/* %if-c-only */ -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <stdlib.h> -/* %endif */ - -/* %if-tables-serialization */ -/* %endif */ -/* end standard C headers. */ - -/* %if-c-or-c++ */ -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include <inttypes.h> -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -/* %endif */ - -/* %if-c++-only */ -/* %endif */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* %not-for-header */ - -/* Returned upon end-of-file. */ -#define YY_NULL 0 -/* %ok-for-header */ - -/* %not-for-header */ - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) -/* %ok-for-header */ - -/* %if-reentrant */ -/* %endif */ - -/* %if-not-reentrant */ - -/* %endif */ - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN (yy_start) = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START (((yy_start) - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -/* %if-not-reentrant */ -extern yy_size_t yyleng; -/* %endif */ - -/* %if-c-only */ -/* %if-not-reentrant */ -extern FILE *yyin, *yyout; -/* %endif */ -/* %endif */ - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - #define YY_LINENO_REWIND_TO(ptr) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = (yy_hold_char); \ - YY_RESTORE_YY_MORE_OFFSET \ - (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, (yytext_ptr) ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { -/* %if-c-only */ - FILE *yy_input_file; -/* %endif */ - -/* %if-c++-only */ -/* %endif */ - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* %if-c-only Standard (non-C++) definition */ -/* %not-for-header */ - -/* %if-not-reentrant */ - -/* Stack of input buffers. */ -static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */ -static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */ -static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */ -/* %endif */ -/* %ok-for-header */ - -/* %endif */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \ - ? (yy_buffer_stack)[(yy_buffer_stack_top)] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)] - -/* %if-c-only Standard (non-C++) definition */ - -/* %if-not-reentrant */ -/* %not-for-header */ - -/* yy_hold_char holds the character lost when yytext is formed. */ -static char yy_hold_char; -static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */ -yy_size_t yyleng; - -/* Points to current character in buffer. */ -static char *yy_c_buf_p = (char *) 0; -static int yy_init = 0; /* whether we need to initialize */ -static int yy_start = 0; /* start state number */ - -/* Flag which is used to allow yywrap()'s to do buffer switches - * instead of setting up a fresh yyin. A bit of a hack ... - */ -static int yy_did_buffer_switch_on_eof; -/* %ok-for-header */ - -/* %endif */ - -void yyrestart (FILE *input_file ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); -void yy_delete_buffer (YY_BUFFER_STATE b ); -void yy_flush_buffer (YY_BUFFER_STATE b ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state (void ); - -static void yyensure_buffer_stack (void ); -static void yy_load_buffer_state (void ); -static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ); - -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); - -/* %endif */ - -void *yyalloc (yy_size_t ); -void *yyrealloc (void *,yy_size_t ); -void yyfree (void * ); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ -/* Begin user sect3 */ - -#define yywrap() 1 -#define YY_SKIP_YYWRAP - -#define FLEX_DEBUG - -typedef unsigned char YY_CHAR; - -FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0; - -typedef int yy_state_type; - -extern int yylineno; - -int yylineno = 1; - -extern char *yytext; -#define yytext_ptr yytext - -/* %% [1.5] DFA */ - -/* %if-c-only Standard (non-C++) definition */ - -static yy_state_type yy_get_previous_state (void ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ); -static int yy_get_next_buffer (void ); -static void yy_fatal_error (yyconst char msg[] ); - -/* %endif */ - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ -/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ - (yytext_ptr) -= (yy_more_len); \ - yyleng = (size_t) (yy_cp - (yytext_ptr)); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ -/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ - (yy_c_buf_p) = yy_cp; - -/* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ -#define YY_NUM_RULES 21 -#define YY_END_OF_BUFFER 22 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_accept[60] = - { 0, - 0, 0, 22, 20, 1, 1, 6, 16, 17, 20, - 20, 20, 20, 20, 20, 20, 13, 14, 1, 7, - 0, 0, 0, 0, 0, 15, 0, 8, 0, 9, - 0, 0, 10, 0, 0, 0, 0, 0, 0, 18, - 11, 0, 12, 19, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 3, 4, 5, 0 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 1, 1, 1, 1, 1, 5, 1, 6, - 7, 1, 1, 1, 8, 1, 9, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 11, 1, 12, - 1, 13, 1, 1, 1, 1, 1, 1, 1, 1, - 14, 1, 1, 1, 1, 15, 16, 1, 1, 17, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 18, 1, 19, 1, 1, 1, 20, 1, 21, 1, - - 22, 23, 24, 1, 25, 1, 1, 26, 1, 1, - 27, 28, 1, 29, 30, 31, 32, 33, 1, 1, - 1, 1, 1, 1, 1, 34, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[35] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1 - } ; - -static yyconst flex_int16_t yy_base[60] = - { 0, - 0, 0, 88, 89, 33, 36, 89, 89, 89, 74, - 33, 59, 75, 64, 73, 53, 89, 89, 42, 89, - 68, 38, 56, 40, 53, 68, 45, 89, 66, 89, - 50, 64, 89, 43, 50, 42, 50, 43, 48, 89, - 89, 58, 89, 89, 50, 43, 52, 50, 49, 47, - 46, 43, 41, 27, 89, 89, 89, 89, 89 - } ; - -static yyconst flex_int16_t yy_def[60] = - { 0, - 59, 1, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 0 - } ; - -static yyconst flex_int16_t yy_nxt[124] = - { 0, - 4, 5, 6, 5, 7, 8, 9, 10, 4, 4, - 4, 11, 4, 4, 12, 4, 4, 13, 4, 4, - 4, 4, 14, 4, 4, 4, 4, 15, 4, 4, - 16, 4, 17, 18, 19, 19, 19, 19, 19, 19, - 21, 58, 22, 19, 19, 19, 29, 22, 32, 24, - 30, 36, 38, 46, 41, 57, 49, 56, 33, 50, - 55, 43, 54, 47, 53, 52, 48, 51, 45, 44, - 42, 40, 39, 38, 37, 36, 35, 26, 34, 31, - 28, 27, 26, 25, 24, 23, 20, 59, 3, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59 - } ; - -static yyconst flex_int16_t yy_chk[124] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 5, 5, 5, 6, 6, 6, - 11, 54, 11, 19, 19, 19, 22, 22, 24, 24, - 22, 36, 38, 45, 36, 53, 46, 52, 24, 46, - 51, 38, 50, 45, 49, 48, 45, 47, 42, 39, - 37, 35, 34, 32, 31, 29, 27, 26, 25, 23, - 21, 16, 15, 14, 13, 12, 10, 3, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59 - } ; - -static yy_state_type yy_last_accepting_state; -static char *yy_last_accepting_cpos; - -extern int yy_flex_debug; -int yy_flex_debug = 1; - -static yyconst flex_int16_t yy_rule_linenum[21] = - { 0, - 49, 50, 51, 52, 53, 54, 55, 56, 57, 64, - 71, 86, 100, 101, 102, 103, 104, 105, 106, 107 - } ; - -/* The intent behind this definition is that it'll catch - * any uses of REJECT which flex missed. - */ -#define REJECT reject_used_but_not_detected -static int yy_more_flag = 0; -static int yy_more_len = 0; -#define yymore() ((yy_more_flag) = 1) -#define YY_MORE_ADJ (yy_more_len) -#define YY_RESTORE_YY_MORE_OFFSET -char *yytext; -#line 1 "mlf-scanner.ll" -#line 2 "mlf-scanner.ll" -# include <cstdlib> -# include <errno.h> -# include <limits.h> -# include <string> -# include "mlf-driver.h" -# include "mlf-parser.tab.h" - -/* Added since it fixes compile errors */ -#define YY_NEW_FILE yyrestart(yyin ) - -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ -/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ - yyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ -/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ - (yy_c_buf_p) = yy_cp; -/* ----------------------- */ - -/* Work around an incompatibility in flex (at least versions - 2.5.31 through 2.5.33): it generates code that does - not conform to C89. See Debian bug 333231 - <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */ -# undef yywrap -# define yywrap() 1 - -/* By default yylex returns int, we use token_type. - Unfortunately yyterminate by default returns 0, which is - not of token_type. */ -#define yyterminate() return token::END -#line 40 "mlf-scanner.ll" -# define YY_USER_ACTION yylloc->columns (yyleng); -#line 44 "mlf-scanner.ll" - typedef yy::mlf_parser::token token; -#line 628 "lex.yy.c" - -#define INITIAL 0 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -/* %if-c-only */ -#include <unistd.h> -/* %endif */ -/* %if-c++-only */ -/* %endif */ -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -/* %if-c-only Reentrant structure and macros (non-C++). */ -/* %if-reentrant */ -/* %if-c-only */ - -static int yy_init_globals (void ); - -/* %endif */ -/* %if-reentrant */ -/* %endif */ -/* %endif End reentrant structures and macros. */ - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (void ); - -int yyget_debug (void ); - -void yyset_debug (int debug_flag ); - -YY_EXTRA_TYPE yyget_extra (void ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *yyget_in (void ); - -void yyset_in (FILE * in_str ); - -FILE *yyget_out (void ); - -void yyset_out (FILE * out_str ); - -yy_size_t yyget_leng (void ); - -char *yyget_text (void ); - -int yyget_lineno (void ); - -void yyset_lineno (int line_number ); - -/* %if-bison-bridge */ -/* %endif */ - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (void ); -#else -extern int yywrap (void ); -#endif -#endif - -/* %not-for-header */ - -/* %ok-for-header */ - -/* %endif */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT -/* %if-c-only Standard (non-C++) definition */ -/* %not-for-header */ - -#ifdef __cplusplus -static int yyinput (void ); -#else -static int input (void ); -#endif -/* %ok-for-header */ - -/* %endif */ -#endif - -/* %if-c-only */ - -/* %endif */ - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* %if-c-only Standard (non-C++) definition */ -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) -/* %endif */ -/* %if-c++-only C++ definition */ -/* %endif */ -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ -/* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - size_t n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ -/* %if-c++-only C++ definition \ */\ -/* %endif */ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -/* %if-c-only */ -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -#endif - -/* %if-tables-serialization structures and prototypes */ -/* %not-for-header */ - -/* %ok-for-header */ - -/* %not-for-header */ - -/* %tables-yydmap generated elements */ -/* %endif */ -/* end tables serialization structures and prototypes */ - -/* %ok-for-header */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 -/* %if-c-only Standard (non-C++) definition */ - -extern int yylex (void); - -#define YY_DECL int yylex (void) -/* %endif */ -/* %if-c++-only C++ definition */ -/* %endif */ -#endif /* !YY_DECL */ - -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif - -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif - -/* %% [6.0] YY_RULE_SETUP definition goes here */ -#define YY_RULE_SETUP \ - YY_USER_ACTION - -/* %not-for-header */ - -/** The main scanner function which does all the work. - */ -YY_DECL -{ - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - - if ( !(yy_init) ) - { - (yy_init) = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - if ( ! (yy_start) ) - (yy_start) = 1; /* first start state */ - - if ( ! yyin ) -/* %if-c-only */ - yyin = stdin; -/* %endif */ -/* %if-c++-only */ -/* %endif */ - - if ( ! yyout ) -/* %if-c-only */ - yyout = stdout; -/* %endif */ -/* %if-c++-only */ -/* %endif */ - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); - } - - yy_load_buffer_state( ); - } - - { -/* %% [7.0] user's declarations go here */ -#line 48 "mlf-scanner.ll" - -#line 905 "lex.yy.c" - - while ( 1 ) /* loops until end-of-file is reached */ - { -/* %% [8.0] yymore()-related code goes here */ - (yy_more_len) = 0; - if ( (yy_more_flag) ) - { - (yy_more_len) = (yy_c_buf_p) - (yytext_ptr); - (yy_more_flag) = 0; - } - yy_cp = (yy_c_buf_p); - - /* Support of yytext. */ - *yy_cp = (yy_hold_char); - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - -/* %% [9.0] code to set up and find next match goes here */ - yy_current_state = (yy_start); -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 60 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - ++yy_cp; - } - while ( yy_current_state != 59 ); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - -yy_find_action: -/* %% [10.0] code to find the action number goes here */ - yy_act = yy_accept[yy_current_state]; - - YY_DO_BEFORE_ACTION; - -/* %% [11.0] code for yylineno update goes here */ - -do_action: /* This label is used only to access EOF actions. */ - -/* %% [12.0] debug code goes here */ - if ( yy_flex_debug ) - { - if ( yy_act == 0 ) - fprintf( stderr, "--scanner backing up\n" ); - else if ( yy_act < 21 ) - fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", - (long)yy_rule_linenum[yy_act], yytext ); - else if ( yy_act == 21 ) - fprintf( stderr, "--accepting default rule (\"%s\")\n", - yytext ); - else if ( yy_act == 22 ) - fprintf( stderr, "--(end of buffer or a NUL)\n" ); - else - fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); - } - - switch ( yy_act ) - { /* beginning of action switch */ -/* %% [13.0] actions go here */ - case 0: /* must back up */ - /* undo the effects of YY_DO_BEFORE_ACTION */ - *yy_cp = (yy_hold_char); - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - -case 1: -/* rule 1 can match eol */ -YY_RULE_SETUP -#line 49 "mlf-scanner.ll" -/*eat white space*/ - YY_BREAK -case 2: -YY_RULE_SETUP -#line 50 "mlf-scanner.ll" -{ return token::GML; } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 51 "mlf-scanner.ll" -{ return token::PML; } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 52 "mlf-scanner.ll" -{ return token::GML; } - YY_BREAK -case 5: -YY_RULE_SETUP -#line 53 "mlf-scanner.ll" -{ return token::PML; } - YY_BREAK -case 6: -YY_RULE_SETUP -#line 54 "mlf-scanner.ll" -{ return token::AND; } - YY_BREAK -case 7: -YY_RULE_SETUP -#line 55 "mlf-scanner.ll" -{ return token::IMP; } - YY_BREAK -case 8: -YY_RULE_SETUP -#line 56 "mlf-scanner.ll" -{ return token::IFF; } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 57 "mlf-scanner.ll" -{ if(driver.get_logic()!='g') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - yylval->number = atoi(yytext + 1); - return token::GMDIA; - } - } - YY_BREAK -case 10: -YY_RULE_SETUP -#line 64 "mlf-scanner.ll" -{ if(driver.get_logic()!='g') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - yylval->number = atoi(yytext + 1); - return token::GMBOX; - } - } - YY_BREAK -case 11: -YY_RULE_SETUP -#line 71 "mlf-scanner.ll" -{ if(driver.get_logic()!='p') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - (yylval->fraction).numerator = atoi(yytext + 1); - /*TODO: find more elegant way to perform this - skipping through until "/" */ - int a = 1; - int b = atoi(yytext + 1); - while(b > 0){ - b = b/10; - a++; - } - (yylval->fraction).denominator = atoi(yytext + a + 1); - return token::PMDIA; - } - } - YY_BREAK -case 12: -YY_RULE_SETUP -#line 86 "mlf-scanner.ll" -{ if(driver.get_logic()!='p') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - (yylval->fraction).numerator = atoi(yytext + 1); - int a = 1; - int b = atoi(yytext + 1); - while(b > 0){ - b = b/10; - a++; - } - (yylval->fraction).denominator = atoi(yytext + a + 1); - return token::PMBOX; - } - } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 100 "mlf-scanner.ll" -{ return token::OR; } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 101 "mlf-scanner.ll" -{ return token::NOT; } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 102 "mlf-scanner.ll" -{ yylval->binarydd = driver.variable(atoi(yytext + 1)); return token::PVAR; } - YY_BREAK -case 16: -YY_RULE_SETUP -#line 103 "mlf-scanner.ll" -{ return token::LPAREN; } - YY_BREAK -case 17: -YY_RULE_SETUP -#line 104 "mlf-scanner.ll" -{ return token::RPAREN; } - YY_BREAK -case 18: -YY_RULE_SETUP -#line 105 "mlf-scanner.ll" -{ return token::TRUE; } - YY_BREAK -case 19: -YY_RULE_SETUP -#line 106 "mlf-scanner.ll" -{ return token::FALSE; } - YY_BREAK -case 20: -YY_RULE_SETUP -#line 107 "mlf-scanner.ll" -driver.error (*yylloc, "invalid character!"); - YY_BREAK -case 21: -YY_RULE_SETUP -#line 108 "mlf-scanner.ll" -ECHO; - YY_BREAK -#line 1132 "lex.yy.c" -case YY_STATE_EOF(INITIAL): - yyterminate(); - - case YY_END_OF_BUFFER: - { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = (yy_hold_char); - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; - } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state ); - - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++(yy_c_buf_p); - yy_current_state = yy_next_state; - goto yy_match; - } - - else - { -/* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ - yy_cp = (yy_last_accepting_cpos); - yy_current_state = (yy_last_accepting_state); - goto yy_find_action; - } - } - - else switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_END_OF_FILE: - { - (yy_did_buffer_switch_on_eof) = 0; - - if ( yywrap( ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; - } - break; - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = - (yytext_ptr) + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - (yy_c_buf_p) = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)]; - - yy_current_state = yy_get_previous_state( ); - - yy_cp = (yy_c_buf_p); - yy_bp = (yytext_ptr) + YY_MORE_ADJ; - goto yy_find_action; - } - break; - } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ - } /* end of user's declarations */ -} /* end of yylex */ -/* %ok-for-header */ - -/* %if-c++-only */ -/* %not-for-header */ - -/* %ok-for-header */ - -/* %endif */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -/* %if-c-only */ -static int yy_get_next_buffer (void) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = (yytext_ptr); - register int number_to_move, i; - int ret_val; - - if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; - } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; - } - } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0; - - else - { - yy_size_t num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - - int yy_c_buf_p_offset = - (int) ((yy_c_buf_p) - b->yy_ch_buf); - - if ( b->yy_is_our_buffer ) - { - yy_size_t new_size = b->yy_buf_size * 2; - - if ( new_size <= 0 ) - b->yy_buf_size += b->yy_buf_size / 8; - else - b->yy_buf_size *= 2; - - b->yy_ch_buf = (char *) - /* Include room in for 2 EOB chars. */ - yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2 ); - } - else - /* Can't grow it, we don't own it. */ - b->yy_ch_buf = 0; - - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( - "fatal error - scanner input buffer overflow" ); - - (yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset]; - - num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - - number_to_move - 1; - - } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - (yy_n_chars), num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - if ( (yy_n_chars) == 0 ) - { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ); - } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; - } - } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - (yy_n_chars) += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR; - - (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -/* %if-c-only */ -/* %not-for-header */ - - static yy_state_type yy_get_previous_state (void) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - register yy_state_type yy_current_state; - register char *yy_cp; - -/* %% [15.0] code to get the start state into yy_current_state goes here */ - yy_current_state = (yy_start); - - for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp ) - { -/* %% [16.0] code to find the next state goes here */ - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 60 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ -/* %if-c-only */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - register int yy_is_jam; - /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ - register char *yy_cp = (yy_c_buf_p); - - register YY_CHAR yy_c = 1; - if ( yy_accept[yy_current_state] ) - { - (yy_last_accepting_state) = yy_current_state; - (yy_last_accepting_cpos) = yy_cp; - } - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 60 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 59); - - return yy_is_jam ? 0 : yy_current_state; -} - -/* %if-c-only */ - -/* %endif */ - -/* %if-c-only */ -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (void) -#else - static int input (void) -#endif - -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - int c; - - *(yy_c_buf_p) = (yy_hold_char); - - if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR ) - { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] ) - /* This was really a NUL. */ - *(yy_c_buf_p) = '\0'; - - else - { /* need more input */ - yy_size_t offset = (yy_c_buf_p) - (yytext_ptr); - ++(yy_c_buf_p); - - switch ( yy_get_next_buffer( ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart(yyin ); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap( ) ) - return EOF; - - if ( ! (yy_did_buffer_switch_on_eof) ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(); -#else - return input(); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - (yy_c_buf_p) = (yytext_ptr) + offset; - break; - } - } - } - - c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */ - *(yy_c_buf_p) = '\0'; /* preserve yytext */ - (yy_hold_char) = *++(yy_c_buf_p); - -/* %% [19.0] update BOL and yylineno */ - - return c; -} -/* %if-c-only */ -#endif /* ifndef YY_NO_INPUT */ -/* %endif */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * - * @note This function does not reset the start condition to @c INITIAL . - */ -/* %if-c-only */ - void yyrestart (FILE * input_file ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); - } - - yy_init_buffer(YY_CURRENT_BUFFER,input_file ); - yy_load_buffer_state( ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * - */ -/* %if-c-only */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - (yy_did_buffer_switch_on_eof) = 1; -} - -/* %if-c-only */ -static void yy_load_buffer_state (void) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - (yy_hold_char) = *(yy_c_buf_p); -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * - * @return the allocated buffer state. - */ -/* %if-c-only */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer(b,file ); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * - */ -/* %if-c-only */ - void yy_delete_buffer (YY_BUFFER_STATE b ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ); - - yyfree((void *) b ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ -/* %if-c-only */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ - -{ - int oerrno = errno; - - yy_flush_buffer(b ); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - -/* %if-c-only */ - - b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; - -/* %endif */ -/* %if-c++-only */ -/* %endif */ - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * - */ -/* %if-c-only */ - void yy_flush_buffer (YY_BUFFER_STATE b ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); -} - -/* %if-c-or-c++ */ -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * - */ -/* %if-c-only */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *(yy_c_buf_p) = (yy_hold_char); - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars); - } - - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - (yy_buffer_stack_top)++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; -} -/* %endif */ - -/* %if-c-or-c++ */ -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * - */ -/* %if-c-only */ -void yypop_buffer_state (void) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - if ((yy_buffer_stack_top) > 0) - --(yy_buffer_stack_top); - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); - (yy_did_buffer_switch_on_eof) = 1; - } -} -/* %endif */ - -/* %if-c-or-c++ */ -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -/* %if-c-only */ -static void yyensure_buffer_stack (void) -/* %endif */ -/* %if-c++-only */ -/* %endif */ -{ - yy_size_t num_to_alloc; - - if (!(yy_buffer_stack)) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - (yy_buffer_stack) = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - (yy_buffer_stack_max) = num_to_alloc; - (yy_buffer_stack_top) = 0; - return; - } - - if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = (yy_buffer_stack_max) + grow_size; - (yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc - ((yy_buffer_stack), - num_to_alloc * sizeof(struct yy_buffer_state*) - ); - if ( ! (yy_buffer_stack) ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*)); - (yy_buffer_stack_max) = num_to_alloc; - } -} -/* %endif */ - -/* %if-c-only */ -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer(b ); - - return b; -} -/* %endif */ - -/* %if-c-only */ -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr ) -{ - - return yy_scan_bytes(yystr,strlen(yystr) ); -} -/* %endif */ - -/* %if-c-only */ -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. - * - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len ) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - yy_size_t i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) yyalloc(n ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer(buf,n ); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} -/* %endif */ - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -/* %if-c-only */ -static void yy_fatal_error (yyconst char* msg ) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} -/* %endif */ -/* %if-c++-only */ -/* %endif */ - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = (yy_hold_char); \ - (yy_c_buf_p) = yytext + yyless_macro_arg; \ - (yy_hold_char) = *(yy_c_buf_p); \ - *(yy_c_buf_p) = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/* %if-c-only */ -/* %if-reentrant */ -/* %endif */ - -/** Get the current line number. - * - */ -int yyget_lineno (void) -{ - - return yylineno; -} - -/** Get the input stream. - * - */ -FILE *yyget_in (void) -{ - return yyin; -} - -/** Get the output stream. - * - */ -FILE *yyget_out (void) -{ - return yyout; -} - -/** Get the length of the current token. - * - */ -yy_size_t yyget_leng (void) -{ - return yyleng; -} - -/** Get the current token. - * - */ - -char *yyget_text (void) -{ - return yytext; -} - -/* %if-reentrant */ -/* %endif */ - -/** Set the current line number. - * @param line_number - * - */ -void yyset_lineno (int line_number ) -{ - - yylineno = line_number; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * in_str ) -{ - yyin = in_str ; -} - -void yyset_out (FILE * out_str ) -{ - yyout = out_str ; -} - -int yyget_debug (void) -{ - return yy_flex_debug; -} - -void yyset_debug (int bdebug ) -{ - yy_flex_debug = bdebug ; -} - -/* %endif */ - -/* %if-reentrant */ -/* %if-bison-bridge */ -/* %endif */ -/* %endif if-c-only */ - -/* %if-c-only */ -static int yy_init_globals (void) -{ - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - (yy_buffer_stack) = 0; - (yy_buffer_stack_top) = 0; - (yy_buffer_stack_max) = 0; - (yy_c_buf_p) = (char *) 0; - (yy_init) = 0; - (yy_start) = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = (FILE *) 0; - yyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; -} -/* %endif */ - -/* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (void) -{ - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(); - } - - /* Destroy the stack itself. */ - yyfree((yy_buffer_stack) ); - (yy_buffer_stack) = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( ); - -/* %if-reentrant */ -/* %endif */ - return 0; -} -/* %endif */ - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n ) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s ) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size ) -{ - return (void *) malloc( size ); -} - -void *yyrealloc (void * ptr, yy_size_t size ) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); -} - -void yyfree (void * ptr ) -{ - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -/* %if-tables-serialization definitions */ -/* %define-yytables The name for this specific scanner's tables. */ -#define YYTABLES_NAME "yytables" -/* %endif */ - -/* %ok-for-header */ - -#line 108 "mlf-scanner.ll" - - - -void mlf_driver::scan_begin (){ - yy_flex_debug = trace_scanning; - if (file == "-") - yyin = stdin; - else if (!(yyin = fopen (file.c_str (), "r"))) - { - error (std::string ("cannot open ") + file); - exit (1); - } -} - -void mlf_driver::scan_end (){ - fclose (yyin); -} - - diff --git a/src/lib/GMLMIP-0.1/parser/lex.yy.h b/src/lib/GMLMIP-0.1/parser/lex.yy.h deleted file mode 100644 index ed75b0e02cfe09bf3e505955a172ab0478736366..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/lex.yy.h +++ /dev/null @@ -1,432 +0,0 @@ -#ifndef yyHEADER_H -#define yyHEADER_H 1 -#define yyIN_HEADER 1 - -#line 6 "lex.yy.h" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -/* %not-for-header */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 39 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* %if-c++-only */ -/* %endif */ - -/* %if-c-only */ - -/* %endif */ - -/* %if-c-only */ - -/* %endif */ - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -/* %if-c-only */ -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <stdlib.h> -/* %endif */ - -/* %if-tables-serialization */ -/* %endif */ -/* end standard C headers. */ - -/* %if-c-or-c++ */ -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include <inttypes.h> -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -/* %endif */ - -/* %if-c++-only */ -/* %endif */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* %not-for-header */ - -/* %not-for-header */ - -/* %if-reentrant */ -/* %endif */ - -/* %if-not-reentrant */ - -/* %endif */ - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -/* %if-not-reentrant */ -extern yy_size_t yyleng; -/* %endif */ - -/* %if-c-only */ -/* %if-not-reentrant */ -extern FILE *yyin, *yyout; -/* %endif */ -/* %endif */ - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { -/* %if-c-only */ - FILE *yy_input_file; -/* %endif */ - -/* %if-c++-only */ -/* %endif */ - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* %if-c-only Standard (non-C++) definition */ -/* %not-for-header */ - -/* %endif */ - -/* %if-c-only Standard (non-C++) definition */ - -/* %if-not-reentrant */ -/* %not-for-header */ - -/* %endif */ - -void yyrestart (FILE *input_file ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ); -void yy_delete_buffer (YY_BUFFER_STATE b ); -void yy_flush_buffer (YY_BUFFER_STATE b ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ); -void yypop_buffer_state (void ); - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ); - -/* %endif */ - -void *yyalloc (yy_size_t ); -void *yyrealloc (void *,yy_size_t ); -void yyfree (void * ); - -/* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ -/* Begin user sect3 */ - -#define yywrap() 1 -#define YY_SKIP_YYWRAP - -#define FLEX_DEBUG - -extern int yylineno; - -extern char *yytext; -#define yytext_ptr yytext - -/* %if-c-only Standard (non-C++) definition */ - -/* %endif */ - -#ifdef YY_HEADER_EXPORT_START_CONDITIONS -#define INITIAL 0 - -#endif - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -/* %if-c-only */ -#include <unistd.h> -/* %endif */ -/* %if-c++-only */ -/* %endif */ -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -/* %if-c-only Reentrant structure and macros (non-C++). */ -/* %if-reentrant */ -/* %if-c-only */ - -/* %endif */ -/* %if-reentrant */ -/* %endif */ -/* %endif End reentrant structures and macros. */ - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (void ); - -int yyget_debug (void ); - -void yyset_debug (int debug_flag ); - -YY_EXTRA_TYPE yyget_extra (void ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ); - -FILE *yyget_in (void ); - -void yyset_in (FILE * in_str ); - -FILE *yyget_out (void ); - -void yyset_out (FILE * out_str ); - -yy_size_t yyget_leng (void ); - -char *yyget_text (void ); - -int yyget_lineno (void ); - -void yyset_lineno (int line_number ); - -/* %if-bison-bridge */ -/* %endif */ - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (void ); -#else -extern int yywrap (void ); -#endif -#endif - -/* %not-for-header */ - -/* %endif */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ); -#endif - -#ifndef YY_NO_INPUT -/* %if-c-only Standard (non-C++) definition */ -/* %not-for-header */ - -/* %endif */ -#endif - -/* %if-c-only */ - -/* %endif */ - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* %if-tables-serialization structures and prototypes */ -/* %not-for-header */ - -/* %not-for-header */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 -/* %if-c-only Standard (non-C++) definition */ - -extern int yylex (void); - -#define YY_DECL int yylex (void) -/* %endif */ -/* %if-c++-only C++ definition */ -/* %endif */ -#endif /* !YY_DECL */ - -/* %not-for-header */ - -/* %if-c++-only */ -/* %not-for-header */ - -/* %endif */ - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -/* %if-c-only */ -/* %not-for-header */ - -#undef YY_NEW_FILE -#undef YY_FLUSH_BUFFER -#undef yy_set_bol -#undef yy_new_buffer -#undef yy_set_interactive -#undef YY_DO_BEFORE_ACTION - -#ifdef YY_DECL_IS_OURS -#undef YY_DECL_IS_OURS -#undef YY_DECL -#endif - -#line 108 "mlf-scanner.ll" - - -#line 431 "lex.yy.h" -#undef yyIN_HEADER -#endif /* yyHEADER_H */ diff --git a/src/lib/GMLMIP-0.1/parser/location.h b/src/lib/GMLMIP-0.1/parser/location.h deleted file mode 100644 index 7c05741cfbd8cd4502f0c50b556d4e76884b0784..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/location.h +++ /dev/null @@ -1,187 +0,0 @@ -// A Bison parser, made by GNU Bison 3.0.2. - -// Locations for Bison parsers in C++ - -// Copyright (C) 2002-2013 Free Software Foundation, Inc. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -// As a special exception, you may create a larger work that contains -// part or all of the Bison parser skeleton and distribute that work -// under terms of your choice, so long as that work isn't itself a -// parser generator using the skeleton or a modified version thereof -// as a parser skeleton. Alternatively, if you modify or redistribute -// the parser skeleton itself, you may (at your option) remove this -// special exception, which will cause the skeleton and the resulting -// Bison output files to be licensed under the GNU General Public -// License without this special exception. - -// This special exception was added by the Free Software Foundation in -// version 2.2 of Bison. - -/** - ** \file location.hh - ** Define the yy::location class. - */ - -#ifndef YY_YY_LOCATION_HH_INCLUDED -# define YY_YY_LOCATION_HH_INCLUDED - -# include "position.h" - - -namespace yy { -#line 46 "location.h" // location.cc:291 - /// Abstract a location. - class location - { - public: - - /// Construct a location from \a b to \a e. - location (const position& b, const position& e) - : begin (b) - , end (e) - { - } - - /// Construct a 0-width location in \a p. - explicit location (const position& p = position ()) - : begin (p) - , end (p) - { - } - - /// Construct a 0-width location in \a f, \a l, \a c. - explicit location (std::string* f, - unsigned int l = 1u, - unsigned int c = 1u) - : begin (f, l, c) - , end (f, l, c) - { - } - - - /// Initialization. - void initialize (std::string* f = YY_NULLPTR, - unsigned int l = 1u, - unsigned int c = 1u) - { - begin.initialize (f, l, c); - end = begin; - } - - /** \name Line and Column related manipulators - ** \{ */ - public: - /// Reset initial location to final location. - void step () - { - begin = end; - } - - /// Extend the current location to the COUNT next columns. - void columns (int count = 1) - { - end += count; - } - - /// Extend the current location to the COUNT next lines. - void lines (int count = 1) - { - end.lines (count); - } - /** \} */ - - - public: - /// Beginning of the located region. - position begin; - /// End of the located region. - position end; - }; - - /// Join two location objects to create a location. - inline location operator+ (location res, const location& end) - { - res.end = end.end; - return res; - } - - /// Change end position in place. - inline location& operator+= (location& res, int width) - { - res.columns (width); - return res; - } - - /// Change end position. - inline location operator+ (location res, int width) - { - return res += width; - } - - /// Change end position in place. - inline location& operator-= (location& res, int width) - { - return res += -width; - } - - /// Change end position. - inline location operator- (const location& begin, int width) - { - return begin + -width; - } - - /// Compare two location objects. - inline bool - operator== (const location& loc1, const location& loc2) - { - return loc1.begin == loc2.begin && loc1.end == loc2.end; - } - - /// Compare two location objects. - inline bool - operator!= (const location& loc1, const location& loc2) - { - return !(loc1 == loc2); - } - - /** \brief Intercept output stream redirection. - ** \param ostr the destination output stream - ** \param loc a reference to the location to redirect - ** - ** Avoid duplicate information. - */ - template <typename YYChar> - inline std::basic_ostream<YYChar>& - operator<< (std::basic_ostream<YYChar>& ostr, const location& loc) - { - unsigned int end_col = 0 < loc.end.column ? loc.end.column - 1 : 0; - ostr << loc.begin// << "(" << loc.end << ") " -; - if (loc.end.filename - && (!loc.begin.filename - || *loc.begin.filename != *loc.end.filename)) - ostr << '-' << loc.end.filename << ':' << loc.end.line << '.' << end_col; - else if (loc.begin.line < loc.end.line) - ostr << '-' << loc.end.line << '.' << end_col; - else if (loc.begin.column < end_col) - ostr << '-' << end_col; - return ostr; - } - - -} // yy -#line 187 "location.h" // location.cc:291 -#endif // !YY_YY_LOCATION_HH_INCLUDED diff --git a/src/lib/GMLMIP-0.1/parser/makefile b/src/lib/GMLMIP-0.1/parser/makefile deleted file mode 100644 index 041bff3f9f9efa7b6dc00ef84f04ff721560f579..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/makefile +++ /dev/null @@ -1,36 +0,0 @@ -include ../config.mk - -.PHONY: all clean - -all: parser lex.yy.o mlf-parser.tab.o mlf-driver.o - - -../formulas/%: - make -C ../formulas/ $(@:../formulas/%=%) - -lex.yy.o: lex.yy.h lex.yy.c - $(GCC) $(GCCFLAGS) -c lex.yy.c - -mlf-parser.tab.o: mlf-parser.tab.h mlf-parser.tab.cc ../formulas/GML_formula.h ../formulas/PML_formula.h lex.yy.h - $(GCC) $(GCCFLAGS) -c mlf-parser.tab.cc - -mlf-driver.o: mlf-driver.h mlf-driver.cpp mlf-parser.tab.h lex.yy.h ../formulas/formula.h - $(GCC) $(GCCFLAGS) -c mlf-driver.cpp - -mlf-parser.tab.h: mlf-parser.yy - $(BISON) --defines=mlf-parser.tab.h mlf-parser.yy - -lex.yy.h: mlf-scanner.ll - $(LEX) --header-file=lex.yy.h mlf-scanner.ll - -parser: mlf-parser.tab.h lex.yy.h ../formulas/formula.h - - -test: parser lex.yy.o mlf-parser.tab.o mlf-driver.o test.o - $(GCC) $(GCCFLAGS) test.o lex.yy.o mlf-parser.tab.o mlf-driver.o -o test - -test.o: test.cpp mlf-driver.h - $(GCC) $(GCCFLAGS) -c test.cpp - -clean: - rm -rf *~ *.o location.hh stack.hh mlf-parser.tab.h mlf-parser.tab.cc position.hh lex.yy.c lex.yy.h test diff --git a/src/lib/GMLMIP-0.1/parser/mlf-driver.c b/src/lib/GMLMIP-0.1/parser/mlf-driver.c deleted file mode 100644 index 09279c6b4c46b667c9ce59576322aa6e5f8986ef..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/mlf-driver.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "mlf-driver.h" -#include "mlf-parser.tab.h" - -mlf_driver::mlf_driver() : trace_scanning (false), trace_parsing (false){ - formula = NULL; -} - -int mlf_driver::parse (const std::string &f){ - file = f; - scan_begin (); - yy::mlf_parser parser (*this); - parser.set_debug_level (trace_parsing); - int res = parser.parse (); - scan_end (); - return res; -} - -void mlf_driver::error (const yy::location& l, const std::string& m){ - std::cerr << l << ": " << m << std::endl; -} - -void mlf_driver::error (const std::string& m){ - std::cerr << m << std::endl; -} - -bdd mlf_driver::variable(int n){ - if(!formula){ - cout << "driver.formula was null!" << endl; - exit(1); - } - return formula->variable(n); -} - -bdd mlf_driver::modal(bdd *b, int n, int m){ - if(!formula){ - cout << "driver.formula was null!" << endl; - exit(1); - } - return formula->modal(b, n, m); -} - - -void mlf_driver::set_formula_bdd(bdd b){ - if(!formula){ - cout << "driver.formula was null!" << endl; - exit(1); - } - formula->set_bdd(b); -} - -void mlf_driver::extract_formula(IFormula* &ptr){ - ptr = formula; - formula = NULL; -} - -mlf_driver::~mlf_driver(){ - if(formula!=NULL) - delete formula; -} - diff --git a/src/lib/GMLMIP-0.1/parser/mlf-driver.h b/src/lib/GMLMIP-0.1/parser/mlf-driver.h deleted file mode 100644 index 2c6666c32d4a982eb03e7dcff78c6366fcea3c7d..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/mlf-driver.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef MLF_DRIVER_HH -#define MLF_DRIVER_HH -#include <string> -#include "mlf-parser.tab.h" -#include "lex.yy.h" -#include "../formulas/formula.h" - -using namespace std; - - -//Tell Flex the lexer's prototype: -# define YY_DECL \ - yy::mlf_parser::token_type \ -yylex (yy::mlf_parser::semantic_type* yylval, \ - yy::mlf_parser::location_type* yylloc, \ - mlf_driver& driver) -// ... and declare it for the parser's sake. -YY_DECL; - - -class mlf_driver{ - public: - mlf_driver(); - ~mlf_driver(); - - // The parsed formula object will be construced here - IFormula* formula; - - private: - char logic; - - public: - char get_logic(){ return logic; }; - - void set_formula_bdd(bdd b); - void set_formula_gml(){ logic='g'; formula = new GML_Formula; }; - void set_formula_pml(){ logic='p'; formula = new PML_Formula; }; - - /* Calls formula->variable and formula->modal respectively - requires ints to be pre-loaded into upper and lower. In the - case of only one integer being required we load it into n.*/ - bdd variable(int n); - bdd modal(bdd *b, int n, int m); - - // Extract the formula object - void extract_formula(IFormula* &ptr); - - // Handling the scanner. - void scan_begin (); - void scan_end (); - bool trace_scanning; - - // Run the parser. Return 0 on success. - int parse (const std::string& f); - std::string file; - bool trace_parsing; - - // Error handling. - void error (const yy::location& l, const std::string& m); - void error (const std::string& m); -}; -#endif diff --git a/src/lib/GMLMIP-0.1/parser/mlf-parser.tab.c b/src/lib/GMLMIP-0.1/parser/mlf-parser.tab.c deleted file mode 100644 index d3c4317d4b2126b673b89247a90873cdae8c1b1a..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/mlf-parser.tab.c +++ /dev/null @@ -1,1148 +0,0 @@ -// A Bison parser, made by GNU Bison 3.0.2. - -// Skeleton implementation for Bison LALR(1) parsers in C++ - -// Copyright (C) 2002-2013 Free Software Foundation, Inc. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -// As a special exception, you may create a larger work that contains -// part or all of the Bison parser skeleton and distribute that work -// under terms of your choice, so long as that work isn't itself a -// parser generator using the skeleton or a modified version thereof -// as a parser skeleton. Alternatively, if you modify or redistribute -// the parser skeleton itself, you may (at your option) remove this -// special exception, which will cause the skeleton and the resulting -// Bison output files to be licensed under the GNU General Public -// License without this special exception. - -// This special exception was added by the Free Software Foundation in -// version 2.2 of Bison. - - -// First part of user declarations. - -#line 37 "mlf-parser.tab.cc" // lalr1.cc:399 - -# ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# endif - -#include "mlf-parser.tab.h" - -// User implementation prologue. - -#line 51 "mlf-parser.tab.cc" // lalr1.cc:407 -// Unqualified %code blocks. -#line 44 "mlf-parser.yy" // lalr1.cc:408 - - #include "mlf-driver.h" - -#line 57 "mlf-parser.tab.cc" // lalr1.cc:408 - - -#ifndef YY_ -# if defined YYENABLE_NLS && YYENABLE_NLS -# if ENABLE_NLS -# include <libintl.h> // FIXME: INFRINGES ON USER NAME SPACE. -# define YY_(msgid) dgettext ("bison-runtime", msgid) -# endif -# endif -# ifndef YY_ -# define YY_(msgid) msgid -# endif -#endif - -#define YYRHSLOC(Rhs, K) ((Rhs)[K].location) -/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. - If N is 0, then set CURRENT to the empty location which ends - the previous symbol: RHS[0] (always defined). */ - -# ifndef YYLLOC_DEFAULT -# define YYLLOC_DEFAULT(Current, Rhs, N) \ - do \ - if (N) \ - { \ - (Current).begin = YYRHSLOC (Rhs, 1).begin; \ - (Current).end = YYRHSLOC (Rhs, N).end; \ - } \ - else \ - { \ - (Current).begin = (Current).end = YYRHSLOC (Rhs, 0).end; \ - } \ - while (/*CONSTCOND*/ false) -# endif - - -// Suppress unused-variable warnings by "using" E. -#define YYUSE(E) ((void) (E)) - -// Enable debugging if requested. -#if YYDEBUG - -// A pseudo ostream that takes yydebug_ into account. -# define YYCDEBUG if (yydebug_) (*yycdebug_) - -# define YY_SYMBOL_PRINT(Title, Symbol) \ - do { \ - if (yydebug_) \ - { \ - *yycdebug_ << Title << ' '; \ - yy_print_ (*yycdebug_, Symbol); \ - *yycdebug_ << std::endl; \ - } \ - } while (false) - -# define YY_REDUCE_PRINT(Rule) \ - do { \ - if (yydebug_) \ - yy_reduce_print_ (Rule); \ - } while (false) - -# define YY_STACK_PRINT() \ - do { \ - if (yydebug_) \ - yystack_print_ (); \ - } while (false) - -#else // !YYDEBUG - -# define YYCDEBUG if (false) std::cerr -# define YY_SYMBOL_PRINT(Title, Symbol) YYUSE(Symbol) -# define YY_REDUCE_PRINT(Rule) static_cast<void>(0) -# define YY_STACK_PRINT() static_cast<void>(0) - -#endif // !YYDEBUG - -#define yyerrok (yyerrstatus_ = 0) -#define yyclearin (yyempty = true) - -#define YYACCEPT goto yyacceptlab -#define YYABORT goto yyabortlab -#define YYERROR goto yyerrorlab -#define YYRECOVERING() (!!yyerrstatus_) - - -namespace yy { -#line 143 "mlf-parser.tab.cc" // lalr1.cc:474 - - /* Return YYSTR after stripping away unnecessary quotes and - backslashes, so that it's suitable for yyerror. The heuristic is - that double-quoting is unnecessary unless the string contains an - apostrophe, a comma, or backslash (other than backslash-backslash). - YYSTR is taken from yytname. */ - std::string - mlf_parser::yytnamerr_ (const char *yystr) - { - if (*yystr == '"') - { - std::string yyr = ""; - char const *yyp = yystr; - - for (;;) - switch (*++yyp) - { - case '\'': - case ',': - goto do_not_strip_quotes; - - case '\\': - if (*++yyp != '\\') - goto do_not_strip_quotes; - // Fall through. - default: - yyr += *yyp; - break; - - case '"': - return yyr; - } - do_not_strip_quotes: ; - } - - return yystr; - } - - - /// Build a parser object. - mlf_parser::mlf_parser (mlf_driver& driver_yyarg) - : -#if YYDEBUG - yydebug_ (false), - yycdebug_ (&std::cerr), -#endif - driver (driver_yyarg) - {} - - mlf_parser::~mlf_parser () - {} - - - /*---------------. - | Symbol types. | - `---------------*/ - - inline - mlf_parser::syntax_error::syntax_error (const location_type& l, const std::string& m) - : std::runtime_error (m) - , location (l) - {} - - // basic_symbol. - template <typename Base> - inline - mlf_parser::basic_symbol<Base>::basic_symbol () - : value () - {} - - template <typename Base> - inline - mlf_parser::basic_symbol<Base>::basic_symbol (const basic_symbol& other) - : Base (other) - , value () - , location (other.location) - { - value = other.value; - } - - - template <typename Base> - inline - mlf_parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const semantic_type& v, const location_type& l) - : Base (t) - , value (v) - , location (l) - {} - - - /// Constructor for valueless symbols. - template <typename Base> - inline - mlf_parser::basic_symbol<Base>::basic_symbol (typename Base::kind_type t, const location_type& l) - : Base (t) - , value () - , location (l) - {} - - template <typename Base> - inline - mlf_parser::basic_symbol<Base>::~basic_symbol () - { - } - - template <typename Base> - inline - void - mlf_parser::basic_symbol<Base>::move (basic_symbol& s) - { - super_type::move(s); - value = s.value; - location = s.location; - } - - // by_type. - inline - mlf_parser::by_type::by_type () - : type (empty) - {} - - inline - mlf_parser::by_type::by_type (const by_type& other) - : type (other.type) - {} - - inline - mlf_parser::by_type::by_type (token_type t) - : type (yytranslate_ (t)) - {} - - inline - void - mlf_parser::by_type::move (by_type& that) - { - type = that.type; - that.type = empty; - } - - inline - int - mlf_parser::by_type::type_get () const - { - return type; - } - - - // by_state. - inline - mlf_parser::by_state::by_state () - : state (empty) - {} - - inline - mlf_parser::by_state::by_state (const by_state& other) - : state (other.state) - {} - - inline - void - mlf_parser::by_state::move (by_state& that) - { - state = that.state; - that.state = empty; - } - - inline - mlf_parser::by_state::by_state (state_type s) - : state (s) - {} - - inline - mlf_parser::symbol_number_type - mlf_parser::by_state::type_get () const - { - return state == empty ? 0 : yystos_[state]; - } - - inline - mlf_parser::stack_symbol_type::stack_symbol_type () - {} - - - inline - mlf_parser::stack_symbol_type::stack_symbol_type (state_type s, symbol_type& that) - : super_type (s, that.location) - { - value = that.value; - // that is emptied. - that.type = empty; - } - - inline - mlf_parser::stack_symbol_type& - mlf_parser::stack_symbol_type::operator= (const stack_symbol_type& that) - { - state = that.state; - value = that.value; - location = that.location; - return *this; - } - - - template <typename Base> - inline - void - mlf_parser::yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const - { - if (yymsg) - YY_SYMBOL_PRINT (yymsg, yysym); - - // User destructor. - switch (yysym.type_get ()) - { - case 19: // "identifier" - -#line 68 "mlf-parser.yy" // lalr1.cc:599 - { delete &(yysym.value); } -#line 362 "mlf-parser.tab.cc" // lalr1.cc:599 - break; - - - default: - break; - } - } - -#if YYDEBUG - template <typename Base> - void - mlf_parser::yy_print_ (std::ostream& yyo, - const basic_symbol<Base>& yysym) const - { - std::ostream& yyoutput = yyo; - YYUSE (yyoutput); - symbol_number_type yytype = yysym.type_get (); - yyo << (yytype < yyntokens_ ? "token" : "nterm") - << ' ' << yytname_[yytype] << " (" - << yysym.location << ": "; - YYUSE (yytype); - yyo << ')'; - } -#endif - - inline - void - mlf_parser::yypush_ (const char* m, state_type s, symbol_type& sym) - { - stack_symbol_type t (s, sym); - yypush_ (m, t); - } - - inline - void - mlf_parser::yypush_ (const char* m, stack_symbol_type& s) - { - if (m) - YY_SYMBOL_PRINT (m, s); - yystack_.push (s); - } - - inline - void - mlf_parser::yypop_ (unsigned int n) - { - yystack_.pop (n); - } - -#if YYDEBUG - std::ostream& - mlf_parser::debug_stream () const - { - return *yycdebug_; - } - - void - mlf_parser::set_debug_stream (std::ostream& o) - { - yycdebug_ = &o; - } - - - mlf_parser::debug_level_type - mlf_parser::debug_level () const - { - return yydebug_; - } - - void - mlf_parser::set_debug_level (debug_level_type l) - { - yydebug_ = l; - } -#endif // YYDEBUG - - inline mlf_parser::state_type - mlf_parser::yy_lr_goto_state_ (state_type yystate, int yysym) - { - int yyr = yypgoto_[yysym - yyntokens_] + yystate; - if (0 <= yyr && yyr <= yylast_ && yycheck_[yyr] == yystate) - return yytable_[yyr]; - else - return yydefgoto_[yysym - yyntokens_]; - } - - inline bool - mlf_parser::yy_pact_value_is_default_ (int yyvalue) - { - return yyvalue == yypact_ninf_; - } - - inline bool - mlf_parser::yy_table_value_is_error_ (int yyvalue) - { - return yyvalue == yytable_ninf_; - } - - int - mlf_parser::parse () - { - /// Whether yyla contains a lookahead. - bool yyempty = true; - - // State. - int yyn; - /// Length of the RHS of the rule being reduced. - int yylen = 0; - - // Error handling. - int yynerrs_ = 0; - int yyerrstatus_ = 0; - - /// The lookahead symbol. - symbol_type yyla; - - /// The locations where the error started and ended. - stack_symbol_type yyerror_range[3]; - - /// The return value of parse (). - int yyresult; - - // FIXME: This shoud be completely indented. It is not yet to - // avoid gratuitous conflicts when merging into the master branch. - try - { - YYCDEBUG << "Starting parse" << std::endl; - - - // User initialization code. - #line 36 "mlf-parser.yy" // lalr1.cc:725 -{ - // Initialize the initial location. - yyla.location.begin.filename = yyla.location.end.filename = &driver.file; -} - -#line 499 "mlf-parser.tab.cc" // lalr1.cc:725 - - /* Initialize the stack. The initial state will be set in - yynewstate, since the latter expects the semantical and the - location values to have been already stored, initialize these - stacks with a primary value. */ - yystack_.clear (); - yypush_ (YY_NULLPTR, 0, yyla); - - // A new symbol was pushed on the stack. - yynewstate: - YYCDEBUG << "Entering state " << yystack_[0].state << std::endl; - - // Accept? - if (yystack_[0].state == yyfinal_) - goto yyacceptlab; - - goto yybackup; - - // Backup. - yybackup: - - // Try to take a decision without lookahead. - yyn = yypact_[yystack_[0].state]; - if (yy_pact_value_is_default_ (yyn)) - goto yydefault; - - // Read a lookahead token. - if (yyempty) - { - YYCDEBUG << "Reading a token: "; - try - { - yyla.type = yytranslate_ (yylex (&yyla.value, &yyla.location, driver)); - } - catch (const syntax_error& yyexc) - { - error (yyexc); - goto yyerrlab1; - } - yyempty = false; - } - YY_SYMBOL_PRINT ("Next token is", yyla); - - /* If the proper action on seeing token YYLA.TYPE is to reduce or - to detect an error, take that action. */ - yyn += yyla.type_get (); - if (yyn < 0 || yylast_ < yyn || yycheck_[yyn] != yyla.type_get ()) - goto yydefault; - - // Reduce or error. - yyn = yytable_[yyn]; - if (yyn <= 0) - { - if (yy_table_value_is_error_ (yyn)) - goto yyerrlab; - yyn = -yyn; - goto yyreduce; - } - - // Discard the token being shifted. - yyempty = true; - - // Count tokens shifted since error; after three, turn off error status. - if (yyerrstatus_) - --yyerrstatus_; - - // Shift the lookahead token. - yypush_ ("Shifting", yyn, yyla); - goto yynewstate; - - /*-----------------------------------------------------------. - | yydefault -- do the default action for the current state. | - `-----------------------------------------------------------*/ - yydefault: - yyn = yydefact_[yystack_[0].state]; - if (yyn == 0) - goto yyerrlab; - goto yyreduce; - - /*-----------------------------. - | yyreduce -- Do a reduction. | - `-----------------------------*/ - yyreduce: - yylen = yyr2_[yyn]; - { - stack_symbol_type yylhs; - yylhs.state = yy_lr_goto_state_(yystack_[yylen].state, yyr1_[yyn]); - /* If YYLEN is nonzero, implement the default value of the - action: '$$ = $1'. Otherwise, use the top of the stack. - - Otherwise, the following line sets YYLHS.VALUE to garbage. - This behavior is undocumented and Bison users should not rely - upon it. */ - if (yylen) - yylhs.value = yystack_[yylen - 1].value; - else - yylhs.value = yystack_[0].value; - - // Compute the default @$. - { - slice<stack_symbol_type, stack_type> slice (yystack_, yylen); - YYLLOC_DEFAULT (yylhs.location, slice, yylen); - } - - // Perform the reduction. - YY_REDUCE_PRINT (yyn); - try - { - switch (yyn) - { - case 2: -#line 75 "mlf-parser.yy" // lalr1.cc:847 - {driver.set_formula_bdd((yystack_[0].value.binarydd)); } -#line 613 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 3: -#line 79 "mlf-parser.yy" // lalr1.cc:847 - {driver.set_formula_gml();} -#line 619 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 4: -#line 80 "mlf-parser.yy" // lalr1.cc:847 - {driver.set_formula_pml();} -#line 625 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 5: -#line 85 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_biimp((yystack_[2].value.binarydd),(yystack_[0].value.binarydd)); } -#line 631 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 6: -#line 86 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_imp((yystack_[2].value.binarydd),(yystack_[0].value.binarydd)); } -#line 637 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 7: -#line 87 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_or((yystack_[2].value.binarydd),(yystack_[0].value.binarydd)); } -#line 643 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 8: -#line 88 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_and((yystack_[2].value.binarydd),(yystack_[0].value.binarydd)); } -#line 649 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 9: -#line 90 "mlf-parser.yy" // lalr1.cc:847 - { bdd* b = new bdd((yystack_[0].value.binarydd)); (yylhs.value.binarydd) = driver.modal(b, (yystack_[1].value.number), 0); } -#line 655 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 10: -#line 91 "mlf-parser.yy" // lalr1.cc:847 - { bdd* b = new bdd(bdd_not((yystack_[0].value.binarydd))); (yylhs.value.binarydd) = bdd_not(driver.modal(b, (yystack_[1].value.number), 0)); } -#line 661 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 11: -#line 93 "mlf-parser.yy" // lalr1.cc:847 - { bdd* b = new bdd((yystack_[0].value.binarydd)); (yylhs.value.binarydd) = driver.modal(b, (yystack_[1].value.fraction).numerator, (yystack_[1].value.fraction).denominator); } -#line 667 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 12: -#line 94 "mlf-parser.yy" // lalr1.cc:847 - { bdd* b = new bdd(bdd_not((yystack_[0].value.binarydd))); (yylhs.value.binarydd) = bdd_not(driver.modal(b, (yystack_[1].value.fraction).numerator, (yystack_[1].value.fraction).denominator)); } -#line 673 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 13: -#line 96 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_not((yystack_[0].value.binarydd)); } -#line 679 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 14: -#line 97 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = (yylhs.value.binarydd); } -#line 685 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 15: -#line 98 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_true(); } -#line 691 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 16: -#line 99 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = bdd_false(); } -#line 697 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - case 17: -#line 100 "mlf-parser.yy" // lalr1.cc:847 - { (yylhs.value.binarydd) = (yystack_[1].value.binarydd); } -#line 703 "mlf-parser.tab.cc" // lalr1.cc:847 - break; - - -#line 707 "mlf-parser.tab.cc" // lalr1.cc:847 - default: - break; - } - } - catch (const syntax_error& yyexc) - { - error (yyexc); - YYERROR; - } - YY_SYMBOL_PRINT ("-> $$ =", yylhs); - yypop_ (yylen); - yylen = 0; - YY_STACK_PRINT (); - - // Shift the result of the reduction. - yypush_ (YY_NULLPTR, yylhs); - } - goto yynewstate; - - /*--------------------------------------. - | yyerrlab -- here on detecting error. | - `--------------------------------------*/ - yyerrlab: - // If not already recovering from an error, report this error. - if (!yyerrstatus_) - { - ++yynerrs_; - error (yyla.location, yysyntax_error_ (yystack_[0].state, - yyempty ? yyempty_ : yyla.type_get ())); - } - - - yyerror_range[1].location = yyla.location; - if (yyerrstatus_ == 3) - { - /* If just tried and failed to reuse lookahead token after an - error, discard it. */ - - // Return failure if at end of input. - if (yyla.type_get () == yyeof_) - YYABORT; - else if (!yyempty) - { - yy_destroy_ ("Error: discarding", yyla); - yyempty = true; - } - } - - // Else will try to reuse lookahead token after shifting the error token. - goto yyerrlab1; - - - /*---------------------------------------------------. - | yyerrorlab -- error raised explicitly by YYERROR. | - `---------------------------------------------------*/ - yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (false) - goto yyerrorlab; - yyerror_range[1].location = yystack_[yylen - 1].location; - /* Do not reclaim the symbols of the rule whose action triggered - this YYERROR. */ - yypop_ (yylen); - yylen = 0; - goto yyerrlab1; - - /*-------------------------------------------------------------. - | yyerrlab1 -- common code for both syntax error and YYERROR. | - `-------------------------------------------------------------*/ - yyerrlab1: - yyerrstatus_ = 3; // Each real token shifted decrements this. - { - stack_symbol_type error_token; - for (;;) - { - yyn = yypact_[yystack_[0].state]; - if (!yy_pact_value_is_default_ (yyn)) - { - yyn += yyterror_; - if (0 <= yyn && yyn <= yylast_ && yycheck_[yyn] == yyterror_) - { - yyn = yytable_[yyn]; - if (0 < yyn) - break; - } - } - - // Pop the current state because it cannot handle the error token. - if (yystack_.size () == 1) - YYABORT; - - yyerror_range[1].location = yystack_[0].location; - yy_destroy_ ("Error: popping", yystack_[0]); - yypop_ (); - YY_STACK_PRINT (); - } - - yyerror_range[2].location = yyla.location; - YYLLOC_DEFAULT (error_token.location, yyerror_range, 2); - - // Shift the error token. - error_token.state = yyn; - yypush_ ("Shifting", error_token); - } - goto yynewstate; - - // Accept. - yyacceptlab: - yyresult = 0; - goto yyreturn; - - // Abort. - yyabortlab: - yyresult = 1; - goto yyreturn; - - yyreturn: - if (!yyempty) - yy_destroy_ ("Cleanup: discarding lookahead", yyla); - - /* Do not reclaim the symbols of the rule whose action triggered - this YYABORT or YYACCEPT. */ - yypop_ (yylen); - while (1 < yystack_.size ()) - { - yy_destroy_ ("Cleanup: popping", yystack_[0]); - yypop_ (); - } - - return yyresult; - } - catch (...) - { - YYCDEBUG << "Exception caught: cleaning lookahead and stack" - << std::endl; - // Do not try to display the values of the reclaimed symbols, - // as their printer might throw an exception. - if (!yyempty) - yy_destroy_ (YY_NULLPTR, yyla); - - while (1 < yystack_.size ()) - { - yy_destroy_ (YY_NULLPTR, yystack_[0]); - yypop_ (); - } - throw; - } - } - - void - mlf_parser::error (const syntax_error& yyexc) - { - error (yyexc.location, yyexc.what()); - } - - // Generate an error message. - std::string - mlf_parser::yysyntax_error_ (state_type yystate, symbol_number_type yytoken) const - { - std::string yyres; - // Number of reported tokens (one for the "unexpected", one per - // "expected"). - size_t yycount = 0; - // Its maximum. - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - // Arguments of yyformat. - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - - /* There are many possibilities here to consider: - - If this state is a consistent state with a default action, then - the only way this function was invoked is if the default action - is an error action. In that case, don't check for expected - tokens because there are none. - - The only way there can be no lookahead present (in yytoken) is - if this state is a consistent state with a default action. - Thus, detecting the absence of a lookahead is sufficient to - determine that there is no unexpected or expected token to - report. In that case, just report a simple "syntax error". - - Don't assume there isn't a lookahead just because this state is - a consistent state with a default action. There might have - been a previous inconsistent state, consistent state with a - non-default action, or user semantic action that manipulated - yyla. (However, yyla is currently not documented for users.) - - Of course, the expected token list depends on states to have - correct lookahead information, and it depends on the parser not - to perform extra reductions after fetching a lookahead from the - scanner and before detecting a syntax error. Thus, state - merging (from LALR or IELR) and default reductions corrupt the - expected token list. However, the list is correct for - canonical LR with one exception: it will still contain any - token that will not be accepted due to an error action in a - later state. - */ - if (yytoken != yyempty_) - { - yyarg[yycount++] = yytname_[yytoken]; - int yyn = yypact_[yystate]; - if (!yy_pact_value_is_default_ (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - // Stay within bounds of both yycheck and yytname. - int yychecklim = yylast_ - yyn + 1; - int yyxend = yychecklim < yyntokens_ ? yychecklim : yyntokens_; - for (int yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck_[yyx + yyn] == yyx && yyx != yyterror_ - && !yy_table_value_is_error_ (yytable_[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - break; - } - else - yyarg[yycount++] = yytname_[yyx]; - } - } - } - - char const* yyformat = YY_NULLPTR; - switch (yycount) - { -#define YYCASE_(N, S) \ - case N: \ - yyformat = S; \ - break - YYCASE_(0, YY_("syntax error")); - YYCASE_(1, YY_("syntax error, unexpected %s")); - YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); - YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); - YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); - YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -#undef YYCASE_ - } - - // Argument number. - size_t yyi = 0; - for (char const* yyp = yyformat; *yyp; ++yyp) - if (yyp[0] == '%' && yyp[1] == 's' && yyi < yycount) - { - yyres += yytnamerr_ (yyarg[yyi++]); - ++yyp; - } - else - yyres += *yyp; - return yyres; - } - - - const signed char mlf_parser::yypact_ninf_ = -12; - - const signed char mlf_parser::yytable_ninf_ = -1; - - const signed char - mlf_parser::yypact_[] = - { - -11, -12, -12, 4, 16, -12, 16, 16, 16, 16, - -12, 16, -12, -12, 16, 29, -12, -12, -12, -12, - -12, 6, 16, 16, 16, 16, -12, 33, 9, 14, - -12 - }; - - const unsigned char - mlf_parser::yydefact_[] = - { - 0, 3, 4, 0, 0, 1, 0, 0, 0, 0, - 14, 0, 15, 16, 0, 2, 9, 10, 11, 12, - 13, 0, 0, 0, 0, 0, 17, 5, 6, 7, - 8 - }; - - const signed char - mlf_parser::yypgoto_[] = - { - -12, -12, -12, -6 - }; - - const signed char - mlf_parser::yydefgoto_[] = - { - -1, 3, 4, 15 - }; - - const signed char - mlf_parser::yytable_[] = - { - 16, 17, 18, 19, 5, 20, 1, 2, 21, 22, - 23, 24, 25, 23, 24, 25, 27, 28, 29, 30, - 25, 0, 26, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 22, 23, 24, 25, -1, 23, 24, 25 - }; - - const signed char - mlf_parser::yycheck_[] = - { - 6, 7, 8, 9, 0, 11, 17, 18, 14, 3, - 4, 5, 6, 4, 5, 6, 22, 23, 24, 25, - 6, -1, 16, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 3, 4, 5, 6, 3, 4, 5, 6 - }; - - const unsigned char - mlf_parser::yystos_[] = - { - 0, 17, 18, 21, 22, 0, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 23, 23, 23, 23, 23, - 23, 23, 3, 4, 5, 6, 16, 23, 23, 23, - 23 - }; - - const unsigned char - mlf_parser::yyr1_[] = - { - 0, 20, 21, 22, 22, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23 - }; - - const unsigned char - mlf_parser::yyr2_[] = - { - 0, 2, 2, 1, 1, 3, 3, 3, 3, 2, - 2, 2, 2, 2, 1, 1, 1, 3 - }; - - - - // YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. - // First, the terminals, then, starting at \a yyntokens_, nonterminals. - const char* - const mlf_parser::yytname_[] = - { - "\"end of file\"", "error", "$undefined", "IFF", "IMP", "OR", "AND", - "GMDIA", "GMBOX", "PMDIA", "PMBOX", "PVAR", "NOT", "TRUE", "FALSE", - "LPAREN", "RPAREN", "GML", "PML", "\"identifier\"", "$accept", "input", - "spec", "formula", YY_NULLPTR - }; - -#if YYDEBUG - const unsigned char - mlf_parser::yyrline_[] = - { - 0, 74, 74, 79, 80, 85, 86, 87, 88, 90, - 91, 93, 94, 96, 97, 98, 99, 100 - }; - - // Print the state stack on the debug stream. - void - mlf_parser::yystack_print_ () - { - *yycdebug_ << "Stack now"; - for (stack_type::const_iterator - i = yystack_.begin (), - i_end = yystack_.end (); - i != i_end; ++i) - *yycdebug_ << ' ' << i->state; - *yycdebug_ << std::endl; - } - - // Report on the debug stream that the rule \a yyrule is going to be reduced. - void - mlf_parser::yy_reduce_print_ (int yyrule) - { - unsigned int yylno = yyrline_[yyrule]; - int yynrhs = yyr2_[yyrule]; - // Print the symbols being reduced, and their result. - *yycdebug_ << "Reducing stack by rule " << yyrule - 1 - << " (line " << yylno << "):" << std::endl; - // The symbols being reduced. - for (int yyi = 0; yyi < yynrhs; yyi++) - YY_SYMBOL_PRINT (" $" << yyi + 1 << " =", - yystack_[(yynrhs) - (yyi + 1)]); - } -#endif // YYDEBUG - - // Symbol number corresponding to token number t. - inline - mlf_parser::token_number_type - mlf_parser::yytranslate_ (int t) - { - static - const token_number_type - translate_table[] = - { - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19 - }; - const unsigned int user_token_number_max_ = 274; - const token_number_type undef_token_ = 2; - - if (static_cast<int>(t) <= yyeof_) - return yyeof_; - else if (static_cast<unsigned int> (t) <= user_token_number_max_) - return translate_table[t]; - else - return undef_token_; - } - - -} // yy -#line 1138 "mlf-parser.tab.cc" // lalr1.cc:1155 -#line 102 "mlf-parser.yy" // lalr1.cc:1156 - - - -void yy::mlf_parser::error (const yy::mlf_parser::location_type& l, const std::string& m){ - driver.error (l, m); -} - - - - diff --git a/src/lib/GMLMIP-0.1/parser/mlf-parser.tab.h b/src/lib/GMLMIP-0.1/parser/mlf-parser.tab.h deleted file mode 100644 index 41d3982aed80a295f90793365496880014bef101..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/mlf-parser.tab.h +++ /dev/null @@ -1,497 +0,0 @@ -// A Bison parser, made by GNU Bison 3.0.2. - -// Skeleton interface for Bison LALR(1) parsers in C++ - -// Copyright (C) 2002-2013 Free Software Foundation, Inc. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -// As a special exception, you may create a larger work that contains -// part or all of the Bison parser skeleton and distribute that work -// under terms of your choice, so long as that work isn't itself a -// parser generator using the skeleton or a modified version thereof -// as a parser skeleton. Alternatively, if you modify or redistribute -// the parser skeleton itself, you may (at your option) remove this -// special exception, which will cause the skeleton and the resulting -// Bison output files to be licensed under the GNU General Public -// License without this special exception. - -// This special exception was added by the Free Software Foundation in -// version 2.2 of Bison. - -/** - ** \file mlf-parser.tab.h - ** Define the yy::parser class. - */ - -// C++ LALR(1) parser skeleton written by Akim Demaille. - -#ifndef YY_YY_MLF_PARSER_TAB_H_INCLUDED -# define YY_YY_MLF_PARSER_TAB_H_INCLUDED -// // "%code requires" blocks. -#line 6 "mlf-parser.yy" // lalr1.cc:372 - - #include <string> - #include "bdd.h" - #include "../formulas/GML_formula.h" - #include "../formulas/PML_formula.h" - #include "../formulas/rational.h" - - using namespace std; - - class mlf_driver; - #define YYSTYPE ParserType - - struct ParserType -{ - int number; - struct fraction { - int numerator; - int denominator; - } fraction; - bdd binarydd; -}; - -#line 67 "mlf-parser.tab.h" // lalr1.cc:372 - - -# include <vector> -# include <iostream> -# include <stdexcept> -# include <string> -# include "stack.h" -# include "location.h" - - -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif - -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - -#ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) -# else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) -# endif -#endif - -/* Suppress unused-variable warnings by "using" E. */ -#if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) -#else -# define YYUSE(E) /* empty */ -#endif - -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -# define YY_INITIAL_VALUE(Value) Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 1 -#endif - - -namespace yy { -#line 138 "mlf-parser.tab.h" // lalr1.cc:372 - - - - - - /// A Bison parser. - class mlf_parser - { - public: -#ifndef YYSTYPE - /// Symbol semantic values. - -#else - typedef YYSTYPE semantic_type; -#endif - /// Symbol locations. - typedef location location_type; - - /// Syntax errors thrown from user actions. - struct syntax_error : std::runtime_error - { - syntax_error (const location_type& l, const std::string& m); - location_type location; - }; - - /// Tokens. - struct token - { - enum yytokentype - { - END = 0, - IFF = 258, - IMP = 259, - OR = 260, - AND = 261, - GMDIA = 262, - GMBOX = 263, - PMDIA = 264, - PMBOX = 265, - PVAR = 266, - NOT = 267, - TRUE = 268, - FALSE = 269, - LPAREN = 270, - RPAREN = 271, - GML = 272, - PML = 273 - }; - }; - - /// (External) token type, as returned by yylex. - typedef token::yytokentype token_type; - - /// Internal symbol number. - typedef int symbol_number_type; - - /// Internal symbol number for tokens (subsumed by symbol_number_type). - typedef unsigned char token_number_type; - - /// A complete symbol. - /// - /// Expects its Base type to provide access to the symbol type - /// via type_get(). - /// - /// Provide access to semantic value and location. - template <typename Base> - struct basic_symbol : Base - { - /// Alias to Base. - typedef Base super_type; - - /// Default constructor. - basic_symbol (); - - /// Copy constructor. - basic_symbol (const basic_symbol& other); - - /// Constructor for valueless symbols. - basic_symbol (typename Base::kind_type t, - const location_type& l); - - /// Constructor for symbols with semantic value. - basic_symbol (typename Base::kind_type t, - const semantic_type& v, - const location_type& l); - - ~basic_symbol (); - - /// Destructive move, \a s is emptied into this. - void move (basic_symbol& s); - - /// The semantic value. - semantic_type value; - - /// The location. - location_type location; - - private: - /// Assignment operator. - basic_symbol& operator= (const basic_symbol& other); - }; - - /// Type access provider for token (enum) based symbols. - struct by_type - { - /// Default constructor. - by_type (); - - /// Copy constructor. - by_type (const by_type& other); - - /// The symbol type as needed by the constructor. - typedef token_type kind_type; - - /// Constructor from (external) token numbers. - by_type (kind_type t); - - /// Steal the symbol type from \a that. - void move (by_type& that); - - /// The (internal) type number (corresponding to \a type). - /// -1 when this symbol is empty. - symbol_number_type type_get () const; - - /// The token. - token_type token () const; - - enum { empty = 0 }; - - /// The symbol type. - /// -1 when this symbol is empty. - token_number_type type; - }; - - /// "External" symbols: returned by the scanner. - typedef basic_symbol<by_type> symbol_type; - - - /// Build a parser object. - mlf_parser (mlf_driver& driver_yyarg); - virtual ~mlf_parser (); - - /// Parse. - /// \returns 0 iff parsing succeeded. - virtual int parse (); - -#if YYDEBUG - /// The current debugging stream. - std::ostream& debug_stream () const YY_ATTRIBUTE_PURE; - /// Set the current debugging stream. - void set_debug_stream (std::ostream &); - - /// Type for debugging levels. - typedef int debug_level_type; - /// The current debugging level. - debug_level_type debug_level () const YY_ATTRIBUTE_PURE; - /// Set the current debugging level. - void set_debug_level (debug_level_type l); -#endif - - /// Report a syntax error. - /// \param loc where the syntax error is found. - /// \param msg a description of the syntax error. - virtual void error (const location_type& loc, const std::string& msg); - - /// Report a syntax error. - void error (const syntax_error& err); - - private: - /// This class is not copyable. - mlf_parser (const mlf_parser&); - mlf_parser& operator= (const mlf_parser&); - - /// State numbers. - typedef int state_type; - - /// Generate an error message. - /// \param yystate the state where the error occurred. - /// \param yytoken the lookahead token type, or yyempty_. - virtual std::string yysyntax_error_ (state_type yystate, - symbol_number_type yytoken) const; - - /// Compute post-reduction state. - /// \param yystate the current state - /// \param yysym the nonterminal to push on the stack - state_type yy_lr_goto_state_ (state_type yystate, int yysym); - - /// Whether the given \c yypact_ value indicates a defaulted state. - /// \param yyvalue the value to check - static bool yy_pact_value_is_default_ (int yyvalue); - - /// Whether the given \c yytable_ value indicates a syntax error. - /// \param yyvalue the value to check - static bool yy_table_value_is_error_ (int yyvalue); - - static const signed char yypact_ninf_; - static const signed char yytable_ninf_; - - /// Convert a scanner token number \a t to a symbol number. - static token_number_type yytranslate_ (int t); - - // Tables. - // YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing - // STATE-NUM. - static const signed char yypact_[]; - - // YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. - // Performed when YYTABLE does not specify something else to do. Zero - // means the default is an error. - static const unsigned char yydefact_[]; - - // YYPGOTO[NTERM-NUM]. - static const signed char yypgoto_[]; - - // YYDEFGOTO[NTERM-NUM]. - static const signed char yydefgoto_[]; - - // YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If - // positive, shift that token. If negative, reduce the rule whose - // number is the opposite. If YYTABLE_NINF, syntax error. - static const signed char yytable_[]; - - static const signed char yycheck_[]; - - // YYSTOS[STATE-NUM] -- The (internal number of the) accessing - // symbol of state STATE-NUM. - static const unsigned char yystos_[]; - - // YYR1[YYN] -- Symbol number of symbol that rule YYN derives. - static const unsigned char yyr1_[]; - - // YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. - static const unsigned char yyr2_[]; - - - /// Convert the symbol name \a n to a form suitable for a diagnostic. - static std::string yytnamerr_ (const char *n); - - - /// For a symbol, its name in clear. - static const char* const yytname_[]; -#if YYDEBUG - // YYRLINE[YYN] -- Source line where rule number YYN was defined. - static const unsigned char yyrline_[]; - /// Report on the debug stream that the rule \a r is going to be reduced. - virtual void yy_reduce_print_ (int r); - /// Print the state stack on the debug stream. - virtual void yystack_print_ (); - - // Debugging. - int yydebug_; - std::ostream* yycdebug_; - - /// \brief Display a symbol type, value and location. - /// \param yyo The output stream. - /// \param yysym The symbol. - template <typename Base> - void yy_print_ (std::ostream& yyo, const basic_symbol<Base>& yysym) const; -#endif - - /// \brief Reclaim the memory associated to a symbol. - /// \param yymsg Why this token is reclaimed. - /// If null, print nothing. - /// \param yysym The symbol. - template <typename Base> - void yy_destroy_ (const char* yymsg, basic_symbol<Base>& yysym) const; - - private: - /// Type access provider for state based symbols. - struct by_state - { - /// Default constructor. - by_state (); - - /// The symbol type as needed by the constructor. - typedef state_type kind_type; - - /// Constructor. - by_state (kind_type s); - - /// Copy constructor. - by_state (const by_state& other); - - /// Steal the symbol type from \a that. - void move (by_state& that); - - /// The (internal) type number (corresponding to \a state). - /// "empty" when empty. - symbol_number_type type_get () const; - - enum { empty = 0 }; - - /// The state. - state_type state; - }; - - /// "Internal" symbol: element of the stack. - struct stack_symbol_type : basic_symbol<by_state> - { - /// Superclass. - typedef basic_symbol<by_state> super_type; - /// Construct an empty symbol. - stack_symbol_type (); - /// Steal the contents from \a sym to build this. - stack_symbol_type (state_type s, symbol_type& sym); - /// Assignment, needed by push_back. - stack_symbol_type& operator= (const stack_symbol_type& that); - }; - - /// Stack type. - typedef stack<stack_symbol_type> stack_type; - - /// The stack. - stack_type yystack_; - - /// Push a new state on the stack. - /// \param m a debug message to display - /// if null, no trace is output. - /// \param s the symbol - /// \warning the contents of \a s.value is stolen. - void yypush_ (const char* m, stack_symbol_type& s); - - /// Push a new look ahead token on the state on the stack. - /// \param m a debug message to display - /// if null, no trace is output. - /// \param s the state - /// \param sym the symbol (for its value and location). - /// \warning the contents of \a s.value is stolen. - void yypush_ (const char* m, state_type s, symbol_type& sym); - - /// Pop \a n symbols the three stacks. - void yypop_ (unsigned int n = 1); - - // Constants. - enum - { - yyeof_ = 0, - yylast_ = 39, ///< Last index in yytable_. - yynnts_ = 4, ///< Number of nonterminal symbols. - yyempty_ = -2, - yyfinal_ = 5, ///< Termination state number. - yyterror_ = 1, - yyerrcode_ = 256, - yyntokens_ = 20 ///< Number of tokens. - }; - - - // User arguments. - mlf_driver& driver; - }; - - - -} // yy -#line 493 "mlf-parser.tab.h" // lalr1.cc:372 - - - - -#endif // !YY_YY_MLF_PARSER_TAB_H_INCLUDED diff --git a/src/lib/GMLMIP-0.1/parser/mlf-parser.yy b/src/lib/GMLMIP-0.1/parser/mlf-parser.yy deleted file mode 100644 index 8a2b9e0ac110a7e579510b2c7bf03bf664791968..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/mlf-parser.yy +++ /dev/null @@ -1,111 +0,0 @@ -%skeleton "lalr1.cc" -%require "2.4" -%defines -%define parser_class_name "mlf_parser" - -%code requires { - #include <string> - #include "bdd.h" - #include "../formulas/GML_formula.h" - #include "../formulas/PML_formula.h" - #include "../formulas/rational.h" - - using namespace std; - - class mlf_driver; - #define YYSTYPE ParserType - - struct ParserType -{ - int number; - struct fraction { - int numerator; - int denominator; - } fraction; - bdd binarydd; -}; -} - - - -// Parsing context -%parse-param { mlf_driver& driver} -%lex-param { mlf_driver& driver} - -%locations -%initial-action { - // Initialize the initial location. - @$.begin.filename = @$.end.filename = &driver.file; -}; - -%debug -%error-verbose - -%code { - #include "mlf-driver.h" -} - -/* operators and precendences */ - %nonassoc IFF - %right IMP - %left OR - %left AND - %nonassoc <number> GMDIA GMBOX - %nonassoc <fraction> PMDIA PMBOX - %nonassoc <binarydd> PVAR - %nonassoc NOT TRUE FALSE - - /* auxiliary */ - %token END 0 "end of file" - %token LPAREN - %token RPAREN - - %token GML - %token PML - //%token PMLI - - // %printer { debug_stream () << $$; } "identifier" - %destructor { delete &$$; } "identifier" - - %type <binarydd> formula - -%% -input: - spec - formula {driver.set_formula_bdd($2); } - ; - -spec: - GML {driver.set_formula_gml();} - | PML {driver.set_formula_pml();} - //| PMLI {} - ; - -formula: - formula IFF formula { $$ = bdd_biimp($1,$3); } - | formula IMP formula { $$ = bdd_imp($1,$3); } - | formula OR formula { $$ = bdd_or($1,$3); } - | formula AND formula { $$ = bdd_and($1,$3); } - - | GMDIA formula { bdd* b = new bdd($2); $$ = driver.modal(b, $1, 0); } - | GMBOX formula { bdd* b = new bdd(bdd_not($2)); $$ = bdd_not(driver.modal(b, $1, 0)); } // box is not-dia-not - - | PMDIA formula { bdd* b = new bdd($2); $$ = driver.modal(b, $1.numerator, $1.denominator); } - | PMBOX formula { bdd* b = new bdd(bdd_not($2)); $$ = bdd_not(driver.modal(b, $1.numerator, $1.denominator)); } - - | NOT formula { $$ = bdd_not($2); } - | PVAR { $$ = $$; } - | TRUE { $$ = bdd_true(); } - | FALSE { $$ = bdd_false(); } - | LPAREN formula RPAREN { $$ = $2; } - ; -%% - - -void yy::mlf_parser::error (const yy::mlf_parser::location_type& l, const std::string& m){ - driver.error (l, m); -} - - - - diff --git a/src/lib/GMLMIP-0.1/parser/mlf-scanner.ll b/src/lib/GMLMIP-0.1/parser/mlf-scanner.ll deleted file mode 100644 index acdf0ada9818dd1a26f72cd2a4640d268cb4c19b..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/mlf-scanner.ll +++ /dev/null @@ -1,124 +0,0 @@ -%{ -# include <cstdlib> -# include <errno.h> -# include <limits.h> -# include <string> -# include "mlf-driver.h" -# include "mlf-parser.tab.h" - -/* Added since it fixes compile errors */ -#define YY_NEW_FILE yyrestart(yyin ) - -#define YY_DO_BEFORE_ACTION \ - (yytext_ptr) = yy_bp; \ -/* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ - yyleng = (size_t) (yy_cp - yy_bp); \ - (yy_hold_char) = *yy_cp; \ - *yy_cp = '\0'; \ -/* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ - (yy_c_buf_p) = yy_cp; -/* ----------------------- */ - -/* Work around an incompatibility in flex (at least versions - 2.5.31 through 2.5.33): it generates code that does - not conform to C89. See Debian bug 333231 - <http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=333231>. */ -# undef yywrap -# define yywrap() 1 - -/* By default yylex returns int, we use token_type. - Unfortunately yyterminate by default returns 0, which is - not of token_type. */ -#define yyterminate() return token::END -%} - -%option noyywrap nounput batch debug - - - -%{ -# define YY_USER_ACTION yylloc->columns (yyleng); -%} - -%{ - typedef yy::mlf_parser::token token; -%} - - -%% -[ \t\n]+ /*eat white space*/ -"Logic:GML" { return token::GML; } -"Logic:PML" { return token::PML; } -"Logic: GML" { return token::GML; } -"Logic: PML" { return token::PML; } -"&" { return token::AND; } -"->" { return token::IMP; } -"<->" { return token::IFF; } -"<"[0-9]+">" { if(driver.get_logic()!='g') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - yylval->number = atoi(yytext + 1); - return token::GMDIA; - } - } -"["[0-9]+"]" { if(driver.get_logic()!='g') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - yylval->number = atoi(yytext + 1); - return token::GMBOX; - } - } -"<"[0-9]+"/"[0-9]+">" { if(driver.get_logic()!='p') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - (yylval->fraction).numerator = atoi(yytext + 1); - /*TODO: find more elegant way to perform this - skipping through until "/" */ - int a = 1; - int b = atoi(yytext + 1); - while(b > 0){ - b = b/10; - a++; - } - (yylval->fraction).denominator = atoi(yytext + a + 1); - return token::PMDIA; - } - } -"["[0-9]+"/"[0-9]+"]" { if(driver.get_logic()!='p') - driver.error(*yylloc, "Invalid operator type for specified logic!"); - else { - (yylval->fraction).numerator = atoi(yytext + 1); - int a = 1; - int b = atoi(yytext + 1); - while(b > 0){ - b = b/10; - a++; - } - (yylval->fraction).denominator = atoi(yytext + a + 1); - return token::PMBOX; - } - } -"v" { return token::OR; } -"~" { return token::NOT; } -p[0-9]+ { yylval->binarydd = driver.variable(atoi(yytext + 1)); return token::PVAR; } -"(" { return token::LPAREN; } -")" { return token::RPAREN; } -"true" { return token::TRUE; } -"false" { return token::FALSE; } -. driver.error (*yylloc, "invalid character!"); -%% - -void mlf_driver::scan_begin (){ - yy_flex_debug = trace_scanning; - if (file == "-") - yyin = stdin; - else if (!(yyin = fopen (file.c_str (), "r"))) - { - error (std::string ("cannot open ") + file); - exit (1); - } -} - -void mlf_driver::scan_end (){ - fclose (yyin); -} - diff --git a/src/lib/GMLMIP-0.1/parser/position.h b/src/lib/GMLMIP-0.1/parser/position.h deleted file mode 100644 index 107d8e11d504fde109cf019002c302e09f51c15a..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/position.h +++ /dev/null @@ -1,180 +0,0 @@ -// A Bison parser, made by GNU Bison 3.0.2. - -// Positions for Bison parsers in C++ - -// Copyright (C) 2002-2013 Free Software Foundation, Inc. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -// As a special exception, you may create a larger work that contains -// part or all of the Bison parser skeleton and distribute that work -// under terms of your choice, so long as that work isn't itself a -// parser generator using the skeleton or a modified version thereof -// as a parser skeleton. Alternatively, if you modify or redistribute -// the parser skeleton itself, you may (at your option) remove this -// special exception, which will cause the skeleton and the resulting -// Bison output files to be licensed under the GNU General Public -// License without this special exception. - -// This special exception was added by the Free Software Foundation in -// version 2.2 of Bison. - -/** - ** \file position.hh - ** Define the yy::position class. - */ - -#ifndef YY_YY_POSITION_HH_INCLUDED -# define YY_YY_POSITION_HH_INCLUDED - -# include <algorithm> // std::max -# include <iostream> -# include <string> - -# ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr -# else -# define YY_NULLPTR 0 -# endif -# endif - - -namespace yy { -#line 56 "position.hh" // location.cc:291 - /// Abstract a position. - class position - { - public: - /// Construct a position. - explicit position (std::string* f = YY_NULLPTR, - unsigned int l = 1u, - unsigned int c = 1u) - : filename (f) - , line (l) - , column (c) - { - } - - - /// Initialization. - void initialize (std::string* fn = YY_NULLPTR, - unsigned int l = 1u, - unsigned int c = 1u) - { - filename = fn; - line = l; - column = c; - } - - /** \name Line and Column related manipulators - ** \{ */ - /// (line related) Advance to the COUNT next lines. - void lines (int count = 1) - { - if (count) - { - column = 1u; - line = add_ (line, count, 1); - } - } - - /// (column related) Advance to the COUNT next columns. - void columns (int count = 1) - { - column = add_ (column, count, 1); - } - /** \} */ - - /// File name to which this position refers. - std::string* filename; - /// Current line number. - unsigned int line; - /// Current column number. - unsigned int column; - - private: - /// Compute max(min, lhs+rhs) (provided min <= lhs). - static unsigned int add_ (unsigned int lhs, int rhs, unsigned int min) - { - return (0 < rhs || -static_cast<unsigned int>(rhs) < lhs - ? rhs + lhs - : min); - } - }; - - /// Add and assign a position. - inline position& - operator+= (position& res, int width) - { - res.columns (width); - return res; - } - - /// Add two position objects. - inline position - operator+ (position res, int width) - { - return res += width; - } - - /// Add and assign a position. - inline position& - operator-= (position& res, int width) - { - return res += -width; - } - - /// Add two position objects. - inline position - operator- (position res, int width) - { - return res -= width; - } - - /// Compare two position objects. - inline bool - operator== (const position& pos1, const position& pos2) - { - return (pos1.line == pos2.line - && pos1.column == pos2.column - && (pos1.filename == pos2.filename - || (pos1.filename && pos2.filename - && *pos1.filename == *pos2.filename))); - } - - /// Compare two position objects. - inline bool - operator!= (const position& pos1, const position& pos2) - { - return !(pos1 == pos2); - } - - /** \brief Intercept output stream redirection. - ** \param ostr the destination output stream - ** \param pos a reference to the position to redirect - */ - template <typename YYChar> - inline std::basic_ostream<YYChar>& - operator<< (std::basic_ostream<YYChar>& ostr, const position& pos) - { - if (pos.filename) - ostr << *pos.filename << ':'; - return ostr << pos.line << '.' << pos.column; - } - - -} // yy -#line 180 "position.hh" // location.cc:291 -#endif // !YY_YY_POSITION_HH_INCLUDED diff --git a/src/lib/GMLMIP-0.1/parser/stack.h b/src/lib/GMLMIP-0.1/parser/stack.h deleted file mode 100644 index 87d8f3ef36b53013ca6a34f86c8df53dbf57988d..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/stack.h +++ /dev/null @@ -1,158 +0,0 @@ -// A Bison parser, made by GNU Bison 3.0.2. - -// Stack handling for Bison parsers in C++ - -// Copyright (C) 2002-2013 Free Software Foundation, Inc. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. - -// As a special exception, you may create a larger work that contains -// part or all of the Bison parser skeleton and distribute that work -// under terms of your choice, so long as that work isn't itself a -// parser generator using the skeleton or a modified version thereof -// as a parser skeleton. Alternatively, if you modify or redistribute -// the parser skeleton itself, you may (at your option) remove this -// special exception, which will cause the skeleton and the resulting -// Bison output files to be licensed under the GNU General Public -// License without this special exception. - -// This special exception was added by the Free Software Foundation in -// version 2.2 of Bison. - -/** - ** \file stack.hh - ** Define the yy::stack class. - */ - -#ifndef YY_YY_STACK_HH_INCLUDED -# define YY_YY_STACK_HH_INCLUDED - -# include <vector> - - -namespace yy { -#line 46 "stack.hh" // stack.hh:133 - template <class T, class S = std::vector<T> > - class stack - { - public: - // Hide our reversed order. - typedef typename S::reverse_iterator iterator; - typedef typename S::const_reverse_iterator const_iterator; - - stack () - : seq_ () - { - } - - stack (unsigned int n) - : seq_ (n) - { - } - - inline - T& - operator[] (unsigned int i) - { - return seq_[seq_.size () - 1 - i]; - } - - inline - const T& - operator[] (unsigned int i) const - { - return seq_[seq_.size () - 1 - i]; - } - - /// Steal the contents of \a t. - /// - /// Close to move-semantics. - inline - void - push (T& t) - { - seq_.push_back (T()); - operator[](0).move (t); - } - - inline - void - pop (unsigned int n = 1) - { - for (; n; --n) - seq_.pop_back (); - } - - void - clear () - { - seq_.clear (); - } - - inline - typename S::size_type - size () const - { - return seq_.size (); - } - - inline - const_iterator - begin () const - { - return seq_.rbegin (); - } - - inline - const_iterator - end () const - { - return seq_.rend (); - } - - private: - stack (const stack&); - stack& operator= (const stack&); - /// The wrapped container. - S seq_; - }; - - /// Present a slice of the top of a stack. - template <class T, class S = stack<T> > - class slice - { - public: - slice (const S& stack, unsigned int range) - : stack_ (stack) - , range_ (range) - { - } - - inline - const T& - operator [] (unsigned int i) const - { - return stack_[range_ - i]; - } - - private: - const S& stack_; - unsigned int range_; - }; - - -} // yy -#line 157 "stack.hh" // stack.hh:133 - -#endif // !YY_YY_STACK_HH_INCLUDED diff --git a/src/lib/GMLMIP-0.1/parser/test.c b/src/lib/GMLMIP-0.1/parser/test.c deleted file mode 100644 index 8679303fec8ae6a8b649ed03497cf3bb9ebdbbb1..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/parser/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include <iostream> -#include "mlf-driver.h" - -int main (int argc, char *argv[]){ - mlf_driver driver; - for (++argv; argv[0]; ++argv) - if (*argv == std::string ("-p")) - driver.trace_parsing = true; - else if (*argv == std::string ("-s")) - driver.trace_scanning = true; - else if (!driver.parse (*argv)){ - std::cout << driver.result << std::endl; - std::cout << (driver.formula)->logic << std::endl; - } - return 0; -} diff --git a/src/lib/GMLMIP-0.1/rand.pl b/src/lib/GMLMIP-0.1/rand.pl deleted file mode 100644 index 7c54e91ab6ebc081793177af7c9d0cf85c517533..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rand.pl +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/perl -use Switch; - -$size = 25; -$prefix = "test"; -$num_formulas = 1000; -$num_propvars = 5; -$max_index = 100; - -for ($i = 0; $i < $num_formulas; $i++) { - $factfilename = "size" . $size . $prefix . $i . ".fact"; - $willfilename = "size" . $size . $prefix . $i . ".will"; - open FACT, ">", $factfilename; - # satisfy fact syntax - print FACT "(equal_c SAT "; - open WILL, ">", $willfilename; - # satisfy will syntax - print WILL "Logic: GML\n"; - random_formula($size); - print FACT ")\n"; - close FACT; - close WILL; -} - -sub random_formula { - local ($size) = $_[0]; - - # terminate on size 1 and return prop variable - if ($size == 1) { - $num = int(rand($num_propvars)); - print FACT "p" . $num . " "; - print WILL "p" . $num . " ";; - } - if ($size == 2) { - # guess unary connective - $conn = int(rand(2)); - switch ($conn) { - case 0 { - print WILL "(~"; - print FACT "(not "; - random_formula(1); - print WILL ")"; - print FACT ")"; - } - case 1 { - $n = int(rand($max_index)); - print WILL "(<" . $n . ">"; - print FACT "(min " . ($n+1) . " r "; - random_formula(1); - print WILL ")"; - print FACT ")"; - } - } - } - if ($size > 2) { - # guess a connective - $conn = int(rand(4)); - switch ($conn) { - case 0 { - $split = 1 + int(rand($size - 2)); - print WILL "("; - print FACT "(and "; - random_formula($split); - print WILL " & "; - random_formula ($size - $split - 1); - print WILL ")"; - print FACT ")"; - } - case 1 { - $split = 1 + int(rand($size - 2)); - print WILL "("; - print FACT "(or "; - random_formula($split); - print WILL " v "; - random_formula ($size - $split - 1); - print WILL ")"; - print FACT ")"; - } - case 2 { - print WILL "(~"; - print FACT "(not "; - random_formula ($size -1); - print WILL ")"; - print FACT ")"; - } - case 3 { - $n = int(rand($max_index)); - print WILL "(<" . $n . ">"; - print FACT "(min " . ($n+1) . " r "; - random_formula($size-1); - print WILL ")"; - print FACT ")"; - } - } - } -} - - diff --git a/src/lib/GMLMIP-0.1/rules/GML_premise.c b/src/lib/GMLMIP-0.1/rules/GML_premise.c deleted file mode 100644 index 3c24658f34a728b063637640d0803d839c97d59b..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/GML_premise.c +++ /dev/null @@ -1,251 +0,0 @@ -#include "GML_premise.h" - -GML_Premise::GML_Premise() : Premise<int>(){ -} - -GML_Premise::GML_Premise(int _n, int _m, int* _a, int *_b) : Premise<int>(_n,_m,_a,_b){ -//test_counter = 0; -} - - -/* Deprecated Functions which searched for solutions to the side condition first. -vector<Conclusion> GML_Premise::construct_conclusions(){ - double limit = bound(); - vector<Conclusion> set; - glp_prob *side_condition = glp_create_prob(); - - // Parameters while solving with glpk - glp_iocp* parameters = new glp_iocp; - glp_init_iocp(parameters); - parameters->presolve = GLP_ON; - parameters->msg_lev = GLP_MSG_ERR; - - // Load numbers into LP - load_side_condition(side_condition, limit); - - // output for testing. - //glp_write_lp(side_condition, NULL, "output.txt"); - - // Solve depth first - solve_side_condition(side_condition, parameters, 0, 0, 0, limit, set); - - //Clean-up - delete parameters; - glp_delete_prob(side_condition); - - return set; -} - -void GML_Premise::load_side_condition(glp_prob* sc, double limit){ - glp_set_obj_dir(sc, GLP_MIN); - glp_add_rows(sc, 1); - glp_set_row_bnds(sc, 1, GLP_LO, 1.0, 0.0); - - glp_add_cols(sc, n+m); - - for(int i=1; i < (n+m+1); i++){ - glp_set_col_kind(sc, i, GLP_IV); //integer variables - glp_set_col_bnds(sc, i, GLP_DB, 0, limit); - } - - // Arrays for inputting into glpk - double ar[n+m+1]; - int ia[n+m+1]; - int ja[n+m+1]; - - for(int i=1; i < n+m+1; i++){ - ia[i]=1; - ja[i]=i; - } - - int counter=1; - for(int i=0; i < n; i++){ - ar[counter]= a[i]+1; - counter++; - } - - for(int j=0; j < m; j++){ - ar[counter]=(-b[j]); - counter++; - } - - // Set objective function - for(int i=1; i < n+m+1; i++) - glp_set_obj_coef(sc, i, ar[i]); - - glp_load_matrix(sc, n+m, ia, ja, ar); -} - -void GML_Premise::solve_side_condition(glp_prob* sc, glp_iocp* parameters, int r_or_s, int index, int new_bound, double limit, vector<Conclusion>& set){ - int r[n]; - int s[m]; - int old_bound; - Conclusion conc; - - if(r_or_s == 1){ - if(new_bound < 1) - return; - // add r_i < bound - old_bound = glp_get_col_ub(sc, index+1); - if(new_bound == 1) - glp_set_col_bnds(sc, index+1, GLP_FX, 0, 0); - else - glp_set_col_bnds(sc, index+1, GLP_DB, 0, new_bound-1); // Minus once since need strictly less than. Glpk is less or equal. - } - - if(r_or_s == 2){ - if(new_bound+1 > limit) - return; - // add bound s_j > bound - old_bound = glp_get_col_lb(sc, index+n+1); - if(new_bound+1 == limit) - glp_set_col_bnds(sc, index+n+1, GLP_FX, limit, limit); - else - glp_set_col_bnds(sc, index+n+1, GLP_DB, new_bound+1, limit); - } - - //Test output - //char str[15]; - //sprintf(str, "output%d.txt", test_counter); - //glp_write_lp(sc, NULL, str); - //test_counter++; - - - // Solve - int result = glp_intopt(sc, parameters); - - if(result == 0) { //if no errors from solver - if(glp_mip_status(sc)==GLP_OPT || glp_mip_status(sc)==GLP_FEAS){ // if feasible - - // Load r and s from solution - for(int i=0; i < n; i++) - r[i] = static_cast<int>(glp_mip_col_val(sc, i+1)); - - for(int j=0; j < m; j++) - s[j] = static_cast<int>(glp_mip_col_val(sc, j+n+1)); - - // do all valuations - all_valuations(parameters, r, s, conc); - - - //if result isnt in list of conclusions then add it - bool already_have = false; - for(unsigned int i=0; i < set.size(); i++) - if( conc == set[i]) - already_have = true; - if(!already_have) - set.push_back(conc); - - // Recursively branch and solve the others - depth first - for(int i=0; i < n; i++) - solve_side_condition(sc, parameters, 1, i, r[i], limit, set); - for(int j=0; j < m; j++) - solve_side_condition(sc, parameters, 2, j, s[j], limit, set); - } - } - else if (result != GLP_ENOPFS) { // if not a feasibility error - cout << "glpk error: " << result << endl; - exit(1); - } - //remove bounds (go back up before branching down again). - if(r_or_s == 1) - glp_set_col_bnds(sc, index+1, GLP_DB, 0, old_bound); - - if(r_or_s == 2) - glp_set_col_bnds(sc, index+n+1, GLP_DB, old_bound, limit); -} - -void GML_Premise::all_valuations(glp_iocp* parameters, int* r, int* s, Conclusion& result){ -//Testing output -cout << "====================" << endl; - for(int i=0; i < n; i++) - cout << "r[" << i << "] = " << r[i] << endl; - - for(int j=0; j < m; j++) - cout << "s[" << j << "] = " << s[j] << endl; - - -glp_prob *conclusion = glp_create_prob(); -glp_set_obj_dir(conclusion, GLP_MIN); -glp_add_rows(conclusion, 2); -glp_set_row_bnds(conclusion, 1, GLP_LO, 1, 0); // strictly greater than zero - -glp_add_cols(conclusion, n+m); - -for(int i=1; i < (n+m+1); i++) - glp_set_col_kind(conclusion, i, GLP_BV); - -// Arrays for inputting into glpk - double ar[2*(n+m)+1]; - int ia[2*(n+m)+1]; - int ja[2*(n+m)+1]; - - for(int i=1; i < n+m+1; i++){ - ia[i]=1; - ia[n+m+i]=2; - ja[i]=i; - ja[n+m+i]=i; - } - - int counter=1; - for(int i=0; i < n; i++){ - ar[counter]= r[i]; - counter++; - } - - for(int j=0; j < m; j++){ - ar[counter]=(-s[j]); - counter++; - } - - for(int i=0; i < n+m; i++){ - ar[counter]=pow(2,i); - counter++; - } - - // Set objective function - for(int i=1; i < n+m+1; i++) - glp_set_obj_coef(conclusion, i, pow(2,i-1)); - - glp_load_matrix(conclusion, 2*(n+m), ia, ja, ar); - - glp_set_row_bnds(conclusion, 2, GLP_LO, 0, 0); - - // output for testing - //glp_write_lp(conclusion, NULL, "valuations.txt"); - - solve_conclusion_lp(conclusion, parameters, 0, result); - - glp_delete_prob(conclusion); -} - -void GML_Premise::solve_conclusion_lp(glp_prob* conclusion, glp_iocp* parameters, int min_limit, Conclusion& conc){ - glp_set_row_bnds(conclusion, 2, GLP_LO, min_limit, 0); - - int result = glp_intopt(conclusion, parameters); - - if(result == 0){//if no errors from solver - if(glp_mip_status(conclusion)==GLP_OPT || glp_mip_status(conclusion)==GLP_FEAS){ // if feasible - int p[n+m]; - for(int i=0; i<n+m; i++) - p[i]=glp_mip_col_val(conclusion, i+1); - //cout << glp_mip_col_val(conclusion, i+1); - Clause c(n+m,p); - conc.push_back(c); - - solve_conclusion_lp(conclusion, parameters, glp_mip_obj_val(conclusion)+1, conc); - } - } - else if (result != GLP_ENOPFS) { // if not a feasibility error - cout << "glpk error: " << result << endl; - exit(1); - } -} - - -double GML_Premise::bound(){ - return 2; - //return pow(2,6 * sizeoflp(n, m, a, b) * (n+m) * (n+m) * (n+m)); -} - -END OF DEPRECATED FUNCTIONS */ diff --git a/src/lib/GMLMIP-0.1/rules/GML_premise.h b/src/lib/GMLMIP-0.1/rules/GML_premise.h deleted file mode 100644 index 513012f130819640d3b44b61669fdc1838940e71..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/GML_premise.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef GML_PREMISE_H -#define GML_PREMISE_H - -#include <cmath> -#include <vector> - -#include "premise.h" -#include "sizefunctions.h" -#include "setofconclusions.h" - -class GML_Premise : public Premise<int>{ - private: - - /* Deprecated Functions which searched for solutions to the side condition first. - void load_side_condition(glp_prob* sc, double limit); - void solve_side_condition(glp_prob* side_condition, glp_iocp* parameters, int r_or_s, int index, int new_bound, double limit, vector<Conclusion>& set); - //r_or_s = 0 for neither, 1 for r, 2 for 2. - - void all_valuations(glp_iocp* parameters, int* r, int* s, Conclusion& result); - void solve_conclusion_lp(glp_prob* conclusion, glp_iocp* parameters, int min_limit, Conclusion& conc); - */ - - // for testing - //int test_counter; - public: - GML_Premise(); - GML_Premise(int _n, int _m, int* _a, int *_b); - - //double bound(); // Deprecated. - -}; - -#endif diff --git a/src/lib/GMLMIP-0.1/rules/PML_premise.c b/src/lib/GMLMIP-0.1/rules/PML_premise.c deleted file mode 100644 index 307c6fc838faf5f7a141a9abc90c1e8ab195bad0..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/PML_premise.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "PML_premise.h" -PML_Premise::PML_Premise() : Premise<Rational>(){ -} - -PML_Premise::PML_Premise(int _n, int _m, Rational* _a, Rational* _b) : Premise<Rational>(_n,_m,_a,_b){ -//test_counter = 0; -} - - -/* Deprecated function -double PML_Premise::bound(){ - return pow(2,6 * (sizeoflp(n, m, a, b) + 1) * (n+m+1) * (n+m+1) * (n+m+1)); - // +1 for the free k. -} -*/ - - diff --git a/src/lib/GMLMIP-0.1/rules/PML_premise.h b/src/lib/GMLMIP-0.1/rules/PML_premise.h deleted file mode 100644 index acdf0c0b130b894eba9b7eaaa9b51de6786d465f..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/PML_premise.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef PML_PREMISE_H -#define PML_PREMISE_H - -#include <cmath> -#include <vector> - -#include "premise.h" -#include "sizefunctions.h" - - -class PML_Premise : public Premise<Rational>{ - private: - - /* Deprecated function - double bound(); - */ - - // for testing - //int test_counter; - public: - PML_Premise(); - PML_Premise(int _n, int _m, Rational* _a, Rational* _b); - -}; - -#endif diff --git a/src/lib/GMLMIP-0.1/rules/makefile b/src/lib/GMLMIP-0.1/rules/makefile deleted file mode 100644 index 0a1891feb73bb5e74bafd6ee30a3f57b26730c9a..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/makefile +++ /dev/null @@ -1,33 +0,0 @@ -include ../config.mk - -all: premise.o GML_premise.o PML_premise.o valuation.o setofconclusions.o sizefunctions.o radixtree.o - -sizefunctions.o: sizefunctions.h sizefunctions.cpp - $(GCC) $(GCCFLAGS) -c sizefunctions.cpp - -premise.o: premise.h premise.cpp - $(GCC) $(GCCFLAGS) -c premise.cpp - -GML_premise.o: sizefunctions.h premise.h GML_premise.h GML_premise.cpp - $(GCC) $(GCCFLAGS) -c GML_premise.cpp - -PML_premise.o: sizefunctions.h premise.h PML_premise.h PML_premise.cpp - $(GCC) $(GCCFLAGS) -c PML_premise.cpp - -valuation.o: valuation.h valuation.cpp - $(GCC) $(GCCFLAGS) -c valuation.cpp - -setofconclusions.o: setofconclusions.h valuation.h premise.h setofconclusions.cpp - $(GCC) $(GCCFLAGS) -c setofconclusions.cpp - -radixtree.o: radixtree.h radixtree.cpp - $(GCC) $(GCCFLAGS) -c radixtree.cpp - -test: all test.o - $(GCC) $(GCCFLAGS) -lglpk -lbdd ../formulas/rational.o test.o premise.o GML_premise.o PML_premise.o valuation.o setofconclusions.o sizefunctions.o -o test - -test.o: test.cpp GML_premise.h valuation.h - $(GCC) $(GCCFLAGS) -c test.cpp - -clean: - rm -rf *~ *.o test *.txt diff --git a/src/lib/GMLMIP-0.1/rules/node.c b/src/lib/GMLMIP-0.1/rules/node.c deleted file mode 100644 index aac26a7e80961d7fe51d1ffa633d73140baa9029..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/node.c +++ /dev/null @@ -1,46 +0,0 @@ -#include "node.h" - -void Node::allow(int a){ - valuations[a] = 1; -} - -void Node::disallow(int d){ - valuations[d] = 0; -} - -Node::Node(int no_of_atoms) : size (static_cast<int>(pow(2, no_of_atoms))), valuations(size, 0){ - //valuations.resize(size, 0); - - // needs to be replaced with actually initing the stuff - //for(int i=0; i < size; i++) - //valuations[i]=0; -} - -bool Node::operator==(const Node& other) const{ - if(size == other.size){ - for(int i=0; i < size; i++) - if(valuations[i] != other.valuations[i]) - return false; - return true; - } - return false; -} - - -bool Node::operator<(const Node& other) const{ - if(size == other.size){ - for(int i=0; i < size; i++) - if(valuations[i]==1 && other.valuations[i]==0) - return false; - return true; - } - cout << "you checked for supersets with nodes of different sizes - you probably didn't mean to do this..." << endl; - return false; -} - -ostream& operator<<(ostream& out, const Node& n){ - out << n.size << endl; - for(int i=0; i < n.size; i++) - out << n.valuations[i] << " "; - out << endl; -} diff --git a/src/lib/GMLMIP-0.1/rules/node.h b/src/lib/GMLMIP-0.1/rules/node.h deleted file mode 100644 index 55d6ec751e26690116682bd7fb2166e95f55738b..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/node.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef NODE_H -#define NODE_H - -#include <iostream> -#include <cmath> -#include <vector> - -using namespace std; - -class Node { - friend ostream& operator<<(ostream& out, const Node& n); - private: - //size comes from the premise. Premise with n literals gives 2^n size. - int size; - - // bit vector: 0 = valuation not admitted, 1 = valuation is. - vector<bool> valuations; - - public: - Node(){size = 0;}; - Node(int no_of_atoms); - - void allow(int a); - void disallow(int d); - - //Copyable, assignable and comparable for use in STL - bool operator==(const Node& other) const; - - // For checking supersets. - bool operator<(const Node& other) const; - -}; - -#endif diff --git a/src/lib/GMLMIP-0.1/rules/premise.c b/src/lib/GMLMIP-0.1/rules/premise.c deleted file mode 100644 index 0db48b35c2422ac5f3e8bd4a9f6aa87c95e2cea9..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/premise.c +++ /dev/null @@ -1,110 +0,0 @@ -#include "premise.h" - -template<class T> -Premise<T>::Premise(){ - n = 0; - m = 0; - total_valuations = 1 << (n+m); - a = NULL; - b = NULL; -} - -template<class T> -Premise<T>::Premise(int _n, int _m, T* _a, T* _b){ - n =_n; - m =_m; - if (n+m > 30) { - cout << "Too many (>30) modal formulae in node." << endl; - exit(1); - } - total_valuations = 1 << (n+m); - - if(n) - a = new T [n]; - else - a = NULL; - if(m) - b = new T [m]; - else - b = NULL; - - for(int i=0; i < n; i++) - a[i]=_a[i]; - for(int j=0; j < m; j++) - b[j]=_b[j]; -} - -template<class T> -Premise<T>::Premise(const Premise<T>& p){ - n = p.n; - m = p.m; - total_valuations = p.total_valuations; - - if(n) - a = new T [n]; - else - a = NULL; - - if(m) - b = new T [m]; - else - b = NULL; - - for(int i=0; i < n; i++) - a[i]=p.a[i]; - for(int j=0; j < m; j++) - b[j]=p.b[j]; -} - -template<class T> -Premise<T>& Premise<T>::operator=(const Premise<T>& p){ - if(this != &p){ - if(a) - delete [] a; - if(b) - delete [] b; - n = p.n; - m = p.m; - total_valuations = p.total_valuations; - - if(n) - a = new T [n]; - else - a = NULL; - if(m) - b = new T [m]; - else - b = NULL; - - for(int i=0; i < n; i++) - a[i]=p.a[i]; - for(int j=0; j < m; j++) - b[j]=p.b[j]; - } - return *this; -} - -template<class T> -Premise<T>::~Premise(){ - if(a) - delete [] a; - if(b) - delete [] b; -} - -template<class T> -T Premise<T>::get_a_i(int i){ - if(a) - return a[i]; - return -1; -} - -template<class T> -T Premise<T>::get_b_i(int i){ - if(b) - return b[i]; - return -1; -} - -template class Premise<int>; -template class Premise<Rational>; diff --git a/src/lib/GMLMIP-0.1/rules/premise.h b/src/lib/GMLMIP-0.1/rules/premise.h deleted file mode 100644 index 5f2882f97c90efb6d3f629cc96b5f77b7db58987..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/premise.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef PREMISE_HH -#define PREMISE_HH - -#include <iostream> -#include <sstream> -#include <string> - -#include <ext/hash_map> - -#include "../formulas/rational.h" - -using __gnu_cxx::hash; -using namespace std; - -template<class T> -class Premise { - protected: - // Naming follows from the names of the rules - kept as one letter for succinctness. - int n; // number of positive - int m; // number of negative - int total_valuations; - T* a; // modal indicies - positive - T* b; // modal indicies - negative - - public: - Premise(); - Premise(int _n, int _m, T* _a, T* _b); - Premise(const Premise<T>& p); - Premise<T>& operator=(const Premise<T>& p); - ~Premise(); - - int get_n(){ return n; }; - int get_m(){ return m; }; - int get_total_valuations(){ return total_valuations; }; - T get_a_i(int i); - T get_b_i(int i); - - struct Premise_hash { - hash <const char*> charhash; - size_t operator ()(const Premise<T>& p) const { - stringstream ss; - string s; - ss << p.n << " " << p.m << " "; - for(int i=0; i < p.n; i++) - ss << p.a[i] << " "; - for(int j=0; j < p.m; j++) - ss << p.b[j] << " "; - ss << '\0'; - s = ss.str(); - char buf[s.size()+1]; - for(unsigned int i=0; i < s.size(); i++) - buf[i] = s[i]; - buf[s.size()]='\0'; - return charhash(buf); - } - }; - - struct Premise_equal { //TODO: this could be improved if we sort them as we input them - bool operator()(const Premise<T>& p1, const Premise<T>& p2) const{ - if(p1.n!=p2.n) - return false; - if(p1.m!=p2.m) - return false; - for(int i=0; i < p1.n; i++) - if(p1.a[i]!=p2.a[i]) - return false; - for(int j=0; j < p1.m; j++) - if(p1.b[j]!=p2.b[j]) - return false; - return true; - } - }; -}; - - -#endif diff --git a/src/lib/GMLMIP-0.1/rules/radixtree.c b/src/lib/GMLMIP-0.1/rules/radixtree.c deleted file mode 100644 index d639213da689bf66bab7a2371a6dac6e08a25213..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/radixtree.c +++ /dev/null @@ -1,55 +0,0 @@ -#include "radixtree.h" - -void Radixtree::removeNodes(node* nd) { - if (nd->left) - removeNodes(nd->left); - if (nd->right) - removeNodes(nd->right); - delete nd; -} - -void Radixtree::add_element(vector<bool>& elem) { - node *index = root; - for (int i = 0; i < depth; i++) { - if (elem[i]) { - if (!index->left) - index->left = new node; - index = index->left; - } - else { - if (!index->right) - index->right = new node; - index = index->right; - } - } -} - -bool Radixtree::contains_element(vector<bool>& elem) { - node *index = root; - for (int i = 0; i < depth; i++) { - if (elem[i]) - if (!index->left) - return false; - else - index = index->left; - else - if(!index->right) - return false; - else - index = index->right; - } - return true; -} - -int Radixtree::size_intern(int d, node* nd) { - int size = 0; - if (!d) - size = 1; - else { - if (nd->left) - size += size_intern(d-1, nd->left); - if (nd->right) - size += size_intern(d-1, nd->right); - } - return size; -} diff --git a/src/lib/GMLMIP-0.1/rules/radixtree.h b/src/lib/GMLMIP-0.1/rules/radixtree.h deleted file mode 100644 index 08df3d109f32811971b3474746aa428488aa6e63..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/radixtree.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef RADIXTREE_HH -#define RADIXTREE_HH - -#include <cstdlib> -#include <vector> - -using namespace std; - -class Radixtree { - private: - typedef struct nd { - struct nd *left; - struct nd *right; - nd() { left = right = NULL; }; - } node; - - int depth; - node *root; - - void removeNodes(node* nd); - int size_intern(int d, node* nd); - - public: - Radixtree(int n) { - depth = n; - root = new node(); - }; - - ~Radixtree(){ removeNodes(root); }; - - int size() { return size_intern(depth, root); }; - void clear() { removeNodes(root); root = new node(); }; - void add_element(vector<bool>& elem); - bool contains_element(vector<bool>& elem); -}; - -#endif diff --git a/src/lib/GMLMIP-0.1/rules/setofconclusions.c b/src/lib/GMLMIP-0.1/rules/setofconclusions.c deleted file mode 100644 index d85e192ae8a90c5b66360fa12510c1488046bbbd..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/setofconclusions.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "setofconclusions.h" - -SetOfConclusions::SetOfConclusions(int n, const vector<vector<bool> >& set){ - no_of_literals=n; - - /* To limitate code change the new type given in (vector<unsigned int>) is converted to the old type vector<vector<TruthAssignment>> - Each unsigned int corresponds to a rule instance (a node of the tree). Each node is a set of truth assignments. */ - int limit = 1 << n; - for(unsigned int i=0; i < set.size(); i++){ - vector<bool> node = set[i]; - vector<TruthAssignment> rule; - for(int j=0; j < limit; j++){ - if(node[j]) - rule.push_back(TruthAssignment(j,n)); - } - rules.push_back(rule); - } -} - -bdd SetOfConclusions::get_jth_conclusion(bdd** underlying, int j){ - bdd b = bdd_false(); - for(unsigned int i=0; i < rules[j].size(); i++){ - bdd clause = bdd_true(); - for(int k=0; k < no_of_literals; k++){ - if(rules[j][i].get_p_i(k)==1) - clause = bdd_and(clause, *(underlying[k])); - if(rules[j][i].get_p_i(k)==0) - clause = bdd_and(clause, bdd_not(*(underlying[k]))); - } - b = bdd_or(clause, b); - - } - return b; -} - diff --git a/src/lib/GMLMIP-0.1/rules/setofconclusions.h b/src/lib/GMLMIP-0.1/rules/setofconclusions.h deleted file mode 100644 index 5a7d2af65ab905a103eb9fd73876f37bbc484820..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/setofconclusions.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SETOFCONCLUSIONS_H -#define SETOFCONCLUSIONS_H - - -#include <vector> - -#include <stdio.h> -#include <cmath> - -#include "glpk.h" -#include "bdd.h" - -#include "../formulas/rational.h" -#include "valuation.h" - - -using namespace std; - -typedef vector<TruthAssignment> Conclusion; - -class SetOfConclusions{ - private: - int no_of_literals; - vector<Conclusion> rules; - - public: - SetOfConclusions(){no_of_literals = 0;}; - SetOfConclusions(int n, const vector<vector<bool> >& set); - - int number_of_conclusions(){return rules.size();}; - bdd get_jth_conclusion(bdd** underlying, int j); - - - - - //bdd get_ith_conclusion(int i, bdd* bddarray); -}; -#endif diff --git a/src/lib/GMLMIP-0.1/rules/sizefunctions.c b/src/lib/GMLMIP-0.1/rules/sizefunctions.c deleted file mode 100644 index bf15efc06a19956459ab276fbb54f5116f25e050..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/sizefunctions.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "sizefunctions.h" - -/* Functions for calculating size of a linear program */ -int sizeofcoef(int a){ - int result = 1; - while (a >>= 1) - ++result; - return result; -} - -int sizeofcoef(Rational a){ - return 1 + sizeofcoef(a.get_top()) + sizeofcoef(a.get_bot()); -} - -template <class T> -int sizeoflp(const int n, const int m, T* a, T* b){ - int sum = 1 + n + m; - for(int i=0; i < n; i++) - sum+=sizeofcoef(a[i]); - for(int j=0; j < m; j++) - sum+=sizeofcoef(b[j]); - return sum; -} - -template int sizeoflp<int>(const int, const int, int*, int*); -template int sizeoflp<Rational>(const int, const int, Rational*, Rational*); diff --git a/src/lib/GMLMIP-0.1/rules/sizefunctions.h b/src/lib/GMLMIP-0.1/rules/sizefunctions.h deleted file mode 100644 index 3210fac31728660460995908e2e4ccfb7f54bd47..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/sizefunctions.h +++ /dev/null @@ -1,11 +0,0 @@ -#ifndef SIZEFUNCTIONS_H -#define SIZEFUNCTIONS_H - -#include "../formulas/rational.h" - -int sizeofcoef(int a); -int sizeofcoef(Rational a); -template <class T> -int sizeoflp(const int n, const int m, T* a, T* b); - -#endif diff --git a/src/lib/GMLMIP-0.1/rules/test.c b/src/lib/GMLMIP-0.1/rules/test.c deleted file mode 100644 index 4a48ce38ba2d09bac4da90c892cf99acb8bd0c30..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/test.c +++ /dev/null @@ -1,60 +0,0 @@ -#include "GML_premise.h" - -#include "bdd.h" - -int main() { - -bdd_init(10000, 1000); -bdd_setvarnum(100); - -// Create a premise object -const int n = 1; -const int m = 1; - -int a[n] = {2}; -int b[m] = {1}; - -GML_Premise p(n,m,a,b); -//p.construct_conclusions(); - -//SetOfConclusions s(p.get_n_plus_m(), p.construct_conclusions()); - -/* -bdd underlying[3]; -for(int i = 0; i < 3; i++) -underlying[i] = bdd_ithvarpp(i); - -//bdd_printdot(underlying[0]); - -bdd_printdot(s.get_jth_conclusion(underlying,2)); -*/ - - -vector<Conclusion> vec = p.construct_conclusions(); - for(unsigned int i=0; i < vec.size(); i++){ - cout << "Rule " << i << endl; - for(unsigned int j=0; j < vec[i].size(); j++){ - cout << "Valuation " << j << ": "; - for(int k=0; k < vec[i][j].get_n(); k++){ - cout << "p[" << k << "] = " << vec[i][j].get_p_i(k) << ", "; - } - cout << endl; - } - cout << "==================" << endl; -} - -/* Testing new clause/valuation constructor */ -/* -for(unsigned int j=0; j < 8; j++){ - Clause c(j,3); - for(int k=0; k < 3; k++){ - cout << "p[" << k << "] = " << c.get_p_i(k) << ", "; - } - cout << endl; -} -*/ - - -return 0; -} - diff --git a/src/lib/GMLMIP-0.1/rules/valuation.c b/src/lib/GMLMIP-0.1/rules/valuation.c deleted file mode 100644 index 9bf0ed43cf9f5964e74d6126a6864faf801a0eda..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/valuation.c +++ /dev/null @@ -1,71 +0,0 @@ -#include "valuation.h" - -Valuation::Valuation(int i, int no_of_vars){ - int limit = 1 << no_of_vars; - if(i >= limit){ - cout << "cannot make clause " << i << " out of " << limit << endl; -} - n = no_of_vars; - - p = new int [n]; - - int ui = i; - - for(int j=0; j < no_of_vars; j++){ - p[j] = ui & 1; - ui >>=1; - } - -} - - -Valuation::Valuation(int _n, int* _p){ - n = _n; - p = new int [n]; - - for(int i=0; i < n; i++) - p[i]=_p[i]; -} - -Valuation::Valuation(const Valuation& c){ - n = c.n; - p = new int [n]; - - for(int i=0; i < n; i++) - p[i]=c.p[i]; -} - -Valuation& Valuation::operator=(const Valuation& c){ - if(this != &c){ - if(p) - delete [] p; - n = c.n; - p = new int [n]; - - for(int i=0; i < n; i++) - p[i]=c.p[i]; - } - return *this; -} - - -Valuation::~Valuation(){ - if(p) - delete [] p; -} - -int Valuation::get_p_i(int i){ - if(p) - return p[i]; - return -1; -} - -bool Valuation::operator==(const Valuation& other) const{ - if(n == other.n){ - for(int i = 0; i < n; i++) - if(p[i]!=other.p[i]) - return false; - return true; - } - return false; - } diff --git a/src/lib/GMLMIP-0.1/rules/valuation.h b/src/lib/GMLMIP-0.1/rules/valuation.h deleted file mode 100644 index 7f303b0c559a6eed0535e797844a097bf2c9f011..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/rules/valuation.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef VALUATION_H -#define VALUATION_H - -#include <cmath> -#include<iostream> - -using namespace std; - -/* This is a truth assignment */ - -class Valuation { - private: - int n; - int* p; - public: - Valuation(){n=0; p=NULL;}; - Valuation(int i, int total); // Gives valuation corresponding to ith valuation. - Valuation(int _n, int* p); - Valuation(const Valuation& c); - Valuation& operator=(const Valuation& c); - ~Valuation(); - bool operator==(const Valuation& other) const; - - - int get_n(){ return n;}; - int get_p_i(int i); -}; - -typedef Valuation Clause; -// Since each valuation gives rise to a clause. -// Valuation is used by deprecated side condition first code. -typedef Valuation TruthAssignment; -#endif - diff --git a/src/lib/GMLMIP-0.1/satisfyingstack.h b/src/lib/GMLMIP-0.1/satisfyingstack.h deleted file mode 100644 index 97021dd69a4a70723cfffa6da8a0c0f86cc4e761..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/satisfyingstack.h +++ /dev/null @@ -1,12 +0,0 @@ -#ifndef SATISFYINGSTACK_H -#define SATISFYINGSTACK_H - -#include <vector> -#include "./formulas/satisfyingassignment.h" - -using namespace std; - -//GLOBAL VARIABLE STACK FOR SATISFYING ASSIGNMENTS -extern vector<SatisfyingAssignment> sat_ass_stack; - -#endif diff --git a/src/lib/GMLMIP-0.1/timeoutwrapper.sh b/src/lib/GMLMIP-0.1/timeoutwrapper.sh deleted file mode 100755 index 5c19d2ec9fb1070ee9ddaf5a7af19d83acf64297..0000000000000000000000000000000000000000 --- a/src/lib/GMLMIP-0.1/timeoutwrapper.sh +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/bash -# -# The Bash shell script executes a command with a time-out. -# Upon time-out expiration SIGTERM (15) is sent to the process. If the signal -# is blocked, then the subsequent SIGKILL (9) terminates it. -# -# Based on the Bash documentation example. - -# Hello Chet, -# please find attached a "little easier" :-) to comprehend -# time-out example. If you find it suitable, feel free to include -# anywhere: the very same logic as in the original examples/scripts, a -# little more transparent implementation to my taste. -# -# Dmitry V Golovashkin <Dmitry.Golovashkin@sas.com> - -scriptName="${0##*/}" - -declare -i DEFAULT_TIMEOUT=9 -declare -i DEFAULT_INTERVAL=1 -declare -i DEFAULT_DELAY=1 - -# Timeout. -declare -i timeout=DEFAULT_TIMEOUT -# Interval between checks if the process is still alive. -declare -i interval=DEFAULT_INTERVAL -# Delay between posting the SIGTERM signal and destroying the process by SIGKILL. -declare -i delay=DEFAULT_DELAY - -function printUsage() { - cat <<EOF - -Synopsis - $scriptName [-t timeout] [-i interval] [-d delay] command - Execute a command with a time-out. - Upon time-out expiration SIGTERM (15) is sent to the process. If SIGTERM - signal is blocked, then the subsequent SIGKILL (9) terminates it. - - -t timeout - Number of seconds to wait for command completion. - Default value: $DEFAULT_TIMEOUT seconds. - - -i interval - Interval between checks if the process is still alive. - Positive integer, default value: $DEFAULT_INTERVAL seconds. - - -d delay - Delay between posting the SIGTERM signal and destroying the - process by SIGKILL. Default value: $DEFAULT_DELAY seconds. - -As of today, Bash does not support floating point arithmetic (sleep does), -therefore all delay/time values must be integers. -EOF -} - -# Options. -while getopts ":t:i:d:" option; do - case "$option" in - t) timeout=$OPTARG ;; - i) interval=$OPTARG ;; - d) delay=$OPTARG ;; - *) printUsage; exit 1 ;; - esac -done -shift $((OPTIND - 1)) - -# $# should be at least 1 (the command to execute), however it may be strictly -# greater than 1 if the command itself has options. -if (($# == 0 || interval <= 0)); then - printUsage - exit 1 -fi - -# kill -0 pid Exit code indicates if a signal may be sent to $pid process. -( - ((t = timeout)) - - while ((t > 0)); do - sleep $interval - kill -0 $$ || exit 0 - ((t -= interval)) - done - - # Be nice, post SIGTERM first. - # The 'exit 0' below will be executed if any preceeding command fails. - kill -s SIGTERM $$ && kill -0 $$ || exit 0 - sleep $delay - kill -s SIGKILL $$ -) 2> /dev/null & - -exec "$@" diff --git a/src/lib/gmlmip.ml b/src/lib/gmlmip.ml deleted file mode 100644 index 9300917bf00dd2e8673326466d1bd4e2b7701e2a..0000000000000000000000000000000000000000 --- a/src/lib/gmlmip.ml +++ /dev/null @@ -1,8 +0,0 @@ - - -(* transforms list of gml formulas (diamond?,number,formula) - to list of consequences (positive?,formula), - here positive? means that the formula must be true in order to make the - given conjunct of modalities true *) -external gml_rules : (bool*int*int) list -> (int*bool) list list list = "gmlRules_stub" -external pml_rules : (bool*int*int*int) list -> (int*bool) list list list = "pmlRules_stub" diff --git a/src/lib/gmlmip.mli b/src/lib/gmlmip.mli deleted file mode 100644 index 0a4c5535ac1ddfd62fd91f0739eba9ec2ba10a5c..0000000000000000000000000000000000000000 --- a/src/lib/gmlmip.mli +++ /dev/null @@ -1,10 +0,0 @@ -(* transforms list of gml formulas (diamond?,number,formula) - to list of consequences (formula,positive?), - here positive? means that the formula must be true in order to make the - given conjunct of modalities true *) -val gml_rules : (bool*int*int) list -> (int*bool) list list list -(* transforms list of pml formulas (diamond?,nominator,denominator,formula) - to list of consequences (formula,positive?), - here positive? means that the formula must be true in order to make the - given conjunct of modalities true *) -val pml_rules : (bool*int*int*int) list -> (int*bool) list list list diff --git a/src/lib/gmlmip_stub.c b/src/lib/gmlmip_stub.c deleted file mode 100644 index 996f38ed19c2faacd7a68cee3baf908be31aa3c1..0000000000000000000000000000000000000000 --- a/src/lib/gmlmip_stub.c +++ /dev/null @@ -1,130 +0,0 @@ -#define __STDC_LIMIT_MACROS -#define __STDC_FORMAT_MACROS - -#include <utility> // for pair -#include <vector> -#include <set> - -extern "C" { - #include <caml/mlvalues.h> - #include <caml/alloc.h> - #include <caml/memory.h> - #include <caml/custom.h> -} - -#include "GMLMIP-0.1/onestep.h" - -// -using namespace std; - -extern "C" { - CAMLprim value gmlRules_stub(value modalities); - CAMLprim value pmlRules_stub(value modalities); -} - -template<class T> -value set2CamlList(const set<T>& vec, value (*f)(const T&)) { - CAMLparam0(); - CAMLlocal2( cli, cons ); - cli = Val_emptylist; - - for (typename set<T>::const_reverse_iterator it = vec.rbegin(); - it != vec.rend(); - ++it) - { - cons = caml_alloc(2, 0); - - Store_field( cons, 0, f(*it) ); // head - Store_field( cons, 1, cli ); // tail - - cli = cons; - } - - return cli ; -} - - - -static CAMLprim value pair2caml(const int& t) { - CAMLparam0(); - CAMLlocal1( abc ); - abc = caml_alloc(2, 0); - bool neg = t < 0; - Store_field( abc, 0, Val_int((neg ?(-t) : t) - 1)); - Store_field( abc, 1, Val_bool(!neg)); - return abc; -} - -static CAMLprim value set2caml(const set<int>& vt) { - return set2CamlList(vt, pair2caml); -} - -static CAMLprim value setset2caml(const set<set<int> >& vt) { - return set2CamlList(vt, set2caml); -} - -static void printModVec(FILE* f, const vector<pair<pair<bool,int>,int> >& modvec) { - fprintf(f, "GML-Input: /\\ ("); - for (int i = 0; i < modvec.size(); i++) { - bool isdia = modvec[i].first.first; - int cnt = modvec[i].first.second; - int underl = modvec[i].second; - if (i > 0) fprintf(f, ","); - if (isdia) { - fprintf(f, " <%d> p%d", cnt, underl); - } else { - fprintf(f, " [%d] p%d", cnt, underl); - } - } - fprintf(f, " )\n"); -} - -CAMLprim value gmlRules_stub(value modalities) { - // parse caml-modalities to a C++ vector - CAMLparam1( modalities ); - value block = modalities; - vector<pair<pair<bool,int>,int> > modvec; - while (Is_block(block)) { - CAMLlocal3( vpos, vcnt, vformula ); - vpos = Field(Field(block, 0), 0); - vcnt = Field(Field(block, 0), 1); - vformula = Field(Field(block, 0), 2); - modvec.push_back(make_pair(make_pair( - Bool_val(vpos), - Int_val(vcnt)), - 1+Int_val(vformula))); - block = Field(block, 1); - } - // Do one rule step and save result in rulevec - GMLConclusion rulevec = gmlmip_onestep_gml(modvec); - // convert rulevec into ocaml list of pairs - CAMLlocal1( res ); - res = set2CamlList(rulevec, setset2caml); - CAMLreturn( res ); -} - -CAMLprim value pmlRules_stub(value modalities) { - // parse caml-modalities to a C++ vector - CAMLparam1( modalities ); - value block = modalities; - vector<pair<pair<bool,pair<int,int> >,int> > modvec; - while (Is_block(block)) { - CAMLlocal4( vpos, vnom, vdenom, vformula ); - vpos = Field(Field(block, 0), 0); - vnom = Field(Field(block, 0), 1); - vdenom = Field(Field(block, 0), 2); - vformula = Field(Field(block, 0), 3); - modvec.push_back(make_pair(make_pair( - Bool_val(vpos), - make_pair(Int_val(vnom),Int_val(vdenom))), - 1+Int_val(vformula))); - block = Field(block, 1); - } - // Do one rule step and save result in rulevec - GMLConclusion rulevec = gmlmip_onestep_pml(modvec); - // convert rulevec into ocaml list of pairs - CAMLlocal1( res ); - res = set2CamlList(rulevec, setset2caml); - CAMLreturn( res ); -} -