Ignore:
Timestamp:
Aug 15, 2017, 11:25:25 PM (20 months ago)
Author:
faldebey
Message:

different updates to CoRE

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/combine/stringGen.cpp

    r5518 r5613  
    2323#include <locale>
    2424#include <codecvt>
    25 #include <stdlib.h>     /* srand, rand */
     25#include <stdlib.h>
    2626#include <time.h>
    2727#include <UCD/resolve_properties.h>
     
    3434using namespace llvm;
    3535
    36 std::vector<std::string> StringGenerator::references;
    3736
    3837const std::vector<std::string> split(const std::string &s, char delim) {
     
    4746}
    4847
    49 // void printVec(std::vector<string> v){
    50 //      bool notFirst = false;
    51 //      for (auto s : v){
    52 //              if (notFirst){
    53 //                      cout << ",";
    54 //              }
    55 //              cout << s;
    56 //      }
    57 // }
    5848vector<string> appendRtoL(std::vector<string> LHS, std::vector<string> RHS){
    5949        std::copy(RHS.begin(), RHS.end(), std::back_inserter(LHS));
     
    153143                                break;
    154144                        case Name::Type::UnicodeProperty: {
     145                if (re_name->getName() == "whitespace"){
     146                    retVec.push_back(" ");
     147                    break;
     148                }
    155149                                UCD::UnicodeSet ucs = UCD::resolveUnicodeSet(re_name);
    156150                                for (auto i : ucs){
     
    173167                        case Name::Type::Reference:
    174168                        {
    175                                 for (unsigned i = 1; i<10; i++){
    176                                         string ref = "\\" + to_string(i);
     169                bool found = false;
     170                                for (unsigned i = 0; i < references.size(); i++){
     171                                        string ref = "\\" + to_string(i+1);
    177172                                        if (ref == re_name->getName()){
    178                                                 retVec.push_back(references[i-1]);
     173                                                retVec.push_back(references[i]);
     174                        found = true;
    179175                                        }
    180176                                }
     177                if (!found){
     178                    cerr << "reference not found\n";
     179                }
    181180                                break;
    182181                        }
     
    187186        //Do Nothing
    188187    } else if (Diff* diff = dyn_cast<Diff>(re)) {
     188
    189189        std::vector<string> set = getDiff(generate(diff->getLH()), generate(diff->getRH()));
    190190        retVec = appendRtoL(retVec, set);
     191
    191192    } else if (Intersect* x = dyn_cast<Intersect>(re)) {
     193
    192194        std::vector<string> set = getIntersect(generate(x->getLH()), generate(x->getRH()));
    193195        retVec = appendRtoL(retVec, set);
     196
    194197    } else if (Rep* re_rep = dyn_cast<Rep>(re)) {
     198
    195199        int lb = re_rep->getLB();
    196200        int ub = (re_rep->getUB() == Rep::UNBOUNDED_REP) ? lb + 100 : re_rep->getUB();
     
    198202       
    199203        int range = (ub - lb) + 1;
    200         int random = (lb == 0 && ub != 0)? rand() % ub : rand() % range + lb;
     204        int random = (lb == 0)? rand() % ub : rand() % range + lb;
    201205       
    202206        std::vector<string> set = generate(re_rep->getRE());
     
    207211        }
    208212        retVec.push_back(ret);
     213
    209214    } else if (Seq* re_seq = dyn_cast<Seq>(re)) {
    210         bool comma = false;
     215
    211216        for (RE * re : *re_seq) {
    212             if (comma) {
    213                 // retVec.push_back(",");
    214             }
    215217            std::vector<string> set = generate(re);
    216             // printVec(set);
     218           
    217219            if (!set.empty()){
    218220                    int random = rand() % set.size();
    219221                    retVec.push_back(set[random]);
    220222                }
    221             comma = true;
    222 
    223223        }
    224224    } else if (isa<Start>(re) || isa<End>(re)) {
     
    227227        retVec = getAllCodepoints();
    228228    } else {
    229         retVec.push_back("???");
     229        cerr << "RE type not recognised\n";
    230230    }
    231231    return retVec;
Note: See TracChangeset for help on using the changeset viewer.