Package org.eclipse.imp.pdb.facts

Examples of org.eclipse.imp.pdb.facts.ISet


  public void exitedProduction(Object production, boolean filtered, Object environment) {
  }

  public IConstructor filterAmbiguity(IConstructor ambCluster, Object environment) {
    ISet alts = (ISet) ambCluster.get("alternatives");
   
    if (alts.size() == 0) {
      return null;
    }
   
    Environment env = (Environment) environment;
   
    Result<IValue> var = env.getVariable("amb");
   
    if (var != null && var instanceof ICallableValue) {
      Type type = RascalTypeFactory.getInstance().nonTerminalType(ambCluster);
      ICallableValue func = (ICallableValue) var;
      try {
        Result<IValue> result = func.call(
            new Type[] {TF.setType(type)}, new IValue[] {alts}, null
        );
       
        if (result.getType().isBottom()) {
          return ambCluster;
        }
        IConstructor r = (IConstructor) result.getValue();
        if (TreeAdapter.isAmb(r)) {
          ISet returnedAlts = TreeAdapter.getAlternatives(r);
          if (returnedAlts.size() == 1) {
            return (IConstructor) returnedAlts.iterator().next();
          }
          else if (returnedAlts.size() == 0) {
            return null;
          }
          else {
            return r;
          }
View Full Code Here


    return initialized;
  }
 
  @SuppressWarnings("unused")
  private IConstructor resolveImports(IRascalMonitor monitor, IConstructor moduleParseTree) {
    ISet imports = (ISet) eval.call(monitor, "importedModules", moduleParseTree);
   
    eval.getStdErr().println("imports: " + imports);
   
    IMapWriter mw = VF.mapWriter();
   
View Full Code Here

    if (maxDepth <= 0 || (stRandom.nextInt(2) == 0)) {
      return writer.done();
    } else {
      RandomValueTypeVisitor visitor = descend();
      ISet set = (ISet) visitor.generate(type);

      IValue element = null;
      int recursionGuard = 0; // Domain of set can be small.
      while ((element == null || set.contains(element))
          && recursionGuard < 1000) {
        recursionGuard += 1;
        element = visitor.generate(type.getElementType());
      }
View Full Code Here

      try {
        eval.setCurrentEnvt(env);
        env.setInitialized(true);

        eval.event("defining syntax");
        ISet rules = Modules.getSyntax(top);
        for (IValue rule : rules) {
          evalImport(eval, (IConstructor) rule);
        }

        eval.event("importing modules");
        ISet imports = Modules.getImports(top);
        for (IValue mod : imports) {
          evalImport(eval, (IConstructor) mod);
        }

        eval.event("extending modules");
        ISet extend = Modules.getExtends(top);
        for (IValue mod : extend) {
          evalImport(eval, (IConstructor) mod);
        }

        eval.event("generating modules");
        ISet externals = Modules.getExternals(top);
        for (IValue mod : externals) {
          evalImport(eval, (IConstructor) mod);
        }
      }
      finally {
View Full Code Here

          return antiquotes.get(TreeAdapter.yield(tree)).asAnnotatable().setAnnotation("holeType", type);
        }
       
        private IConstructor retrieveHoleType(IConstructor tree) {
          IConstructor prod = TreeAdapter.getProduction(tree);
          ISet attrs = ProductionAdapter.getAttributes(prod);

          for (IValue attr : attrs) {
            if (((IConstructor) attr).getConstructorType() == Factory.Attr_Tag) {
              IValue arg = ((IConstructor) attr).get(0);
             
View Full Code Here

 
  /**
   * @return the remaining subject set elements that are available to be matched
   */
  private ISet available(){
    ISet avail = availableSetElements;
    for(int j = 0; j < currentVar; j++){
      if(isSetVar(j)){
        if(varVal[j] != null)
          avail = avail.subtract((ISet)varVal[j]);
      } else {
        if(varVal[j] != null)
          avail = avail.delete(varVal[j]);
      }
    }
    return avail;
  }
View Full Code Here

          }
          else {
            // Var #i is not a set variable.
            if(availableSetElements.getType().isSet()){
              // Var #i should match single element in elements
              ISet set = (ISet) availableSetElements;
              assert set.size() == 1;
              varVal[0] = elem = set.iterator().next();
            } else {
              varVal[0] = elem = availableSetElements;
              //varVal[i] = ctx.getValueFactory().set(elem.getType()).insert(elem); // TODO: Should this be  a set?
            }
          }

          varPat[0].initMatch(ResultFactory.makeResult(elem.getType(), elem, ctx));
          hasNext = varPat[0].hasNext();
        }
      }
     
      currentVar = 0;
      if(!makeGen(currentVar, availableSetElements)){
        return false;
      }
    } else {
      currentVar = nVar - 1;
    }
    hasNext = true;

    if(debug)System.err.println("\nStart assigning Vars for " + this + ":= " + subject);

    if (patternSize == 1 && (isSetVar(0) || availableSetElements.size() == 1)) {
      if (varPat[0].hasNext() && varPat[0].next()) {
        return true;
      }
     
      return false;
    }
   
    main:
    do {
      if (ctx.isInterrupted()) {
        throw new InterruptException(ctx.getStackTrace(), ctx.getCurrentAST().getLocation());
      }
     
      if(debug)System.err.println("\n=== MAIN: Pattern = " + this ":= " + subject + "\ncurrentVar[" + currentVar + "]=" + varName[currentVar]);
      if(debug)printVars();
      IValue v = null;
      boolean b = false;
      if(isNested[currentVar]){
        if(varPat[currentVar].hasNext()){
          b = varPat[currentVar].next();
          if(b)
            v = varVal[currentVar];
        } else if(varGen[currentVar].hasNext()){
          v = (IValue) varGen[currentVar].next();
          Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
          varPat[currentVar].initMatch(r);
          b = varPat[currentVar].next();
          if(b)
            varVal[currentVar] = v;
        }
      } else if(isSetVar[currentVar]){
          if(varGen[currentVar].hasNext()){
            v = (IValue) varGen[currentVar].next();
            Result<IValue> r = ResultFactory.makeResult(v.getType().lub(setSubjectType), v, ctx);
            varPat[currentVar].initMatch(r);
            b = varPat[currentVar].next();
            if(b){
              varVal[currentVar] = v;
              ctx.getCurrentEnvt().storeVariable(varName[currentVar], r);
              if(debug)System.err.println("Store in " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType() + " / " +
              ctx.getCurrentEnvt().getVariable(varName[currentVar]).getType());
            }
          }
      } else if(isBinding[currentVar]){
        if(varGen[currentVar].hasNext()){
          v = (IValue) varGen[currentVar].next();
         
          Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
          varPat[currentVar].initMatch(r);
          b = varPat[currentVar].next();
          if(b){
            varVal[currentVar] = v;
            ctx.getCurrentEnvt().storeVariable(varName[currentVar], r);
            if(debug)System.err.println("Store in " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType() + " / " +
                ctx.getCurrentEnvt().getVariable(varName[currentVar]).getType());
          }
        }
      } else   if(varPat[currentVar] instanceof QualifiedNamePattern && ((QualifiedNamePattern)varPat[currentVar] ).isAnonymous()){
          if(varGen[currentVar].hasNext()){
            v = (IValue) varGen[currentVar].next();
            Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
            varPat[currentVar].initMatch(r);
            b = varPat[currentVar].next();
            if(b){
              varVal[currentVar] = v;
            }
          }
      } else if(!isBinding[currentVar] && (varPat[currentVar] instanceof QualifiedNamePattern || varPat[currentVar] instanceof TypedVariablePattern&& varGen[currentVar].hasNext()){
          v = (IValue) varGen[currentVar].next();
          Result<IValue> r = ResultFactory.makeResult(v.getType(), v, ctx);
          varPat[currentVar].initMatch(r);
          b = varPat[currentVar].next();
          System.err.println("Try match " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType());
          if(b){
            varVal[currentVar] = v;
            System.err.println("Matches " + varName[currentVar] + ": " + r + " / " + v + " / " + v.getType());
          }
       
      } else {
       
        System.err.println("CANNOT HANDLE THIS 2");
      }
     
      //if(debug) System.err.println("currentVar[" + currentVar + "] = " +  varName[currentVar] + "; v = " + v + "; type: " + v.getType() + "; matchPatternElement = " + b);
      if(b){
        currentVar++;
        ISet avail = available();
        if(currentVar <= nVar - 1){
          if(!makeGen(currentVar, avail)){
            varGen[currentVar] = null;
            currentVar--;
          }
          continue main;
        } else {
          if(!avail.isEmpty()){
            if(debug)System.err.println("nomatch: currentVar = " + currentVar + " avail = " + available());
            currentVar--;
            continue main;
          }
          hasNext = unexploredAlternatives();
View Full Code Here

    }
    if (isSeq(symbol)) {
      return "(" + toString(getSymbols(symbol), ' ', withLayout) + ")";
    }
    if (isAlt(symbol)) {
      ISet alts = getAlternatives(symbol);
      StringBuilder b = new StringBuilder();
      b.append("(");
      boolean first = true;
      for (IValue elem : alts) {
        if (!first) {
          first = false;
          b.append(" | ");
        }
        b.append(toString((IConstructor) elem, withLayout));
      }
      b.append(")");
      return b.toString();
    }
    if (isLayouts(symbol)) {
      return withLayout ? "layout[" + symbol.get("name") + "]" : "";
    }
    if (isLiteral(symbol)) {
      return '"' + ((IString) symbol.get("string")).getValue() + '"';
    }
    if (isCILiteral(symbol)) {
      return '\'' + ((IString) symbol.get("string")).getValue() + '\'';
    }
    if (isParameterizedSort(symbol) || isParameterizedLex(symbol)) {
      StringBuilder b = new StringBuilder();
      b.append(getName(symbol));
      IList params = (IList) symbol.get("parameters");
      b.append('[');
      b.append(toString(params, ',', withLayout));
      b.append(']');
      return b.toString();
    }
    if (isStartSort(symbol)) {
      return "start[" + toString(getStart(symbol), withLayout) + "]";
    }
    if (isParameter(symbol)) {
      return "&" + getName(symbol);
    }
   
    if (isInt(symbol) || isStr(symbol) || isReal(symbol) || isBool(symbol) || isRat(symbol)
        || isNode(symbol) || isValue(symbol) || isVoid(symbol) || isNum(symbol) || isDatetime(symbol) || isLoc(symbol)) {
      return symbol.getName();
    }
   
    if (isSet(symbol) || isList(symbol) || isBag(symbol) || isReifiedType(symbol)) {
      return symbol.getName() + "[" + toString((IConstructor) symbol.get("symbol"), withLayout) + "]";
    }
   
    if (isRel(symbol) || isListRel(symbol) || isTuple(symbol)) {
      StringBuilder b = new StringBuilder();
      b.append(symbol.getName());
      IList symbols = (IList) symbol.get("symbols");
      b.append('[');
      b.append(toString(symbols, ',', withLayout));
      b.append(']');
      return b.toString();
    }
   
    if (isMap(symbol)) {
      return symbol.getName() + "[" + toString((IConstructor) symbol.get("from"), withLayout) + "," + toString((IConstructor) symbol.get("to"), withLayout) + "]";
    }
   
    if (isConditional(symbol)) {
      ISet conditions = getConditions(symbol);
      StringBuilder b = new StringBuilder();
      // first prefix conditions
      for (IValue elem : conditions) {
        IConstructor cond = (IConstructor) elem;
        switch (cond.getConstructorType().getName()) {
View Full Code Here

   
    /**
     * @return <code>true</code> if has breakable tag, otherwise <code>false</code>
     */
    private static boolean hasBreakableAttributeTag(IConstructor production) {
      ISet attributes = ProductionAdapter.getAttributes(production);
      return attributes != null
          && attributes.contains(VF.constructor(Factory.Attr_Tag,VF.node("breakable")));
    }   
View Full Code Here

      return attributes != null
          && attributes.contains(VF.constructor(Factory.Attr_Tag,VF.node("breakable")));
    }   
     
    private static String[] getChildProductionNamesForPushDown(IConstructor production) {
      ISet attributes = ProductionAdapter.getAttributes(production);

      String[] result = {};
      for (IValue attributeValue : attributes) {
       
        if (attributeValue.getType().isAbstractData() && !attributeValue.getType().isBottom()) {
View Full Code Here

TOP

Related Classes of org.eclipse.imp.pdb.facts.ISet

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.