Package org.eclipse.imp.pdb.facts

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


    IList children = getSymbols(tree);
    IListWriter writer = ValueFactoryFactory.getValueFactory().listWriter(Factory.Args.getElementType());

    for (int i = 0; i < children.length(); i++) {
      IConstructor kid = (IConstructor) children.get(i);
      if (!SymbolAdapter.isLiteral(kid) && !SymbolAdapter.isCILiteral(kid)) {
        writer.append(kid);
      }
      // skip layout
      i++;
View Full Code Here


  public static boolean isLayout(IConstructor tree) {
    return SymbolAdapter.isLayouts(getType(tree));
  }
 
  public static String getSortName(IConstructor tree) {
    IConstructor rhs = getType(tree);
   
    if (SymbolAdapter.isSort(rhs)
        || SymbolAdapter.isLex(rhs)
        || SymbolAdapter.isLayouts(rhs)
        || SymbolAdapter.isParameterizedSort(rhs)
View Full Code Here

  public static boolean isRegular(IConstructor tree) {
    return tree.getConstructorType() == Factory.Production_Regular;
  }

  public static boolean isSeparatedList(IConstructor tree) {
    IConstructor rhs = getType(tree);
    return SymbolAdapter.isIterPlusSeps(rhs) || SymbolAdapter.isIterStarSeps(rhs);
  }
View Full Code Here

    return getAttributes(tree).contains(wanted);
  }
 
  public static boolean shouldFlatten(IConstructor surrounding, IConstructor nested) {
    if (ProductionAdapter.isList(nested)) {
      IConstructor nestedRhs = ProductionAdapter.getType(nested);
      IConstructor surroundingRhs = ProductionAdapter.getType(surrounding);
     
      if (SymbolAdapter.isEqual(surroundingRhs, nestedRhs)) {
        return true;
      }
     
View Full Code Here

      return vf.constructor(Factory.Symbol_Seq, list);
     
    }
   
    if (name.equals("opt")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      return vf.constructor(Factory.Symbol_Opt, arg);
    }
   
    if (name.equals("alt")) {
      ISet set = vf.set(Factory.Symbol);
      Expression.Set arg = (Set) x.getArguments().get(0);
      for(Expression y: arg.getElements()){
        set = set.insert(y.accept(this));
      }
      return vf.constructor(Factory.Symbol_Alt, set);
    }
   
    if (name.equals("tuple")) {
      java.util.List<Expression> args = x.getArguments();
      IConstructor head = args.get(0).accept(this);
      IList rest = vf.list(Factory.Symbol);
      for (Expression arg: ((Expression.List)args.get(1)).getElements()) {
        rest = rest.append(arg.accept(this));
      }
      return vf.constructor(Factory.Symbol_Tuple, head, rest);
    }
   
    if (name.equals("sort")) {
      StringConstant.Lexical arg = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      String str = arg.getString();
      str = str.substring(1, str.length() - 1);
      return vf.constructor(Factory.Symbol_Sort, vf.string(str));
    }
   
    if (name.equals("layouts")) {
      StringConstant.Lexical arg = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      String str = arg.getString();
      str = str.substring(1, str.length() - 1);
      return vf.constructor(Factory.Symbol_LayoutX, vf.string(str));
    }
   

    if (name.equals("iter")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      return vf.constructor(Factory.Symbol_IterPlus, arg);
    }
   
    if (name.equals("iter-star")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      return vf.constructor(Factory.Symbol_IterStar, arg);
    }
   
    if (name.equals("iter-star-seps")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      Expression.List args = (Expression.List) x.getArguments().get(1);
      IList seps = vf.list(Factory.Args);
      for (Expression elem: args.getElements()) {
        seps = seps.append(elem.accept(this));
      }
      return vf.constructor(Factory.Symbol_IterStarSepX, arg, seps);
    }
   
    if (name.equals("iter-seps")) {
      IConstructor arg = x.getArguments().get(0).accept(this);
      Expression.List args = (Expression.List) x.getArguments().get(1);
      IList seps = vf.list(Factory.Args);
      for (Expression elem: args.getElements()) {
        seps = seps.append(elem.accept(this));
      }
      return vf.constructor(Factory.Symbol_IterSepX, arg, seps);
    }

    if (name.equals("parameterized-sort")) {
      java.util.List<Expression> args = x.getArguments();
      StringConstant.Lexical sort = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      IList rest = vf.list(Factory.Symbol);
      for (Expression arg: ((Expression.List)args.get(1)).getElements()) {
        rest = rest.append(arg.accept(this));
      }
      return vf.constructor(Factory.Symbol_ParameterizedSort, vf.string(sort.getString()), rest);
     
    }
   
    if (name.equals("lit")) {
      StringConstant.Lexical arg = (org.rascalmpl.ast.StringConstant.Lexical)
        x.getArguments().get(0).getLiteral().getStringLiteral().getConstant();
      // TODO: escaping etc.
      return vf.constructor(Factory.Symbol_Lit, vf.string(arg.getString()));
    }
   
    if (name.equals("char-class")) {
      java.util.List<Expression> args = x.getArguments();
      IList ranges = vf.list(Factory.CharRange);
      for (Expression arg: ((Expression.List)args.get(0)).getElements()) {
        ranges = ranges.append(arg.accept(this));
      }
      return vf.constructor(Factory.Symbol_CharClass, ranges);
    }
   
    if (name.equals("single")) {
View Full Code Here

    // isSubtypeOf does not know about concrete syntax types
    // so deal with it here explicitly
    if (declaredType instanceof NonTerminalType) {
      Type subjectType = subject.getValue().getType();
      if (subjectType.isSubtypeOf(Factory.Tree) && ((IConstructor)subject.getValue()).getConstructorType() == Factory.Tree_Appl) {
        IConstructor tree = (IConstructor)subject.getValue();

        NonTerminalType nt = (NonTerminalType)declaredType;
       
        IConstructor declaredSymbol = nt.getSymbol();
        Type subjectNT = RascalTypeFactory.getInstance().nonTerminalType(tree);
       
        if(subjectNT.isSubtypeOf(nt)) {
          if(TreeAdapter.isList(tree)) {
            if(TreeAdapter.getArgs(tree).isEmpty()) {
View Full Code Here

      assert anchors.get(obj) != - 1;
      return values.constructor(Node_reference, values.integer(anchors.get(obj)));
    }
    visited.put(obj, true);
   
    IConstructor result;
    if (obj instanceof Object[]) {
      IListWriter w = values.listWriter(Node);
      for (Object elt: (Object[])obj) {
        w.append(loadRec(elt, anchors, visited, ctx));
      }
      result = values.constructor(Node_sequence, w.done());
    }
    else if (obj instanceof List) {
      IListWriter w = values.listWriter(Node);
      for (Object elt: (List<Object>)obj) {
        w.append(loadRec(elt, anchors, visited, ctx));
      }
      result = values.constructor(Node_sequence, w.done());
    }
    else if (obj instanceof Map) {
      IMapWriter w = values.mapWriter(Node, Node);
      Map<Object, Object> m = (Map<Object,Object>)obj;
      for (Map.Entry<Object,Object> e: m.entrySet()) {
        w.put(loadRec(e.getKey(), anchors, visited, ctx), loadRec(e.getValue(), anchors, visited, ctx));
      }
      result = values.constructor(Node_mapping, w.done());
    }
    else {
      throw RuntimeExceptionFactory.illegalArgument(
          values.string(obj.toString() + " (class=" + obj.getClass() + ")"),
          ctx.getCurrentAST(), ctx.getStackTrace());
    }
    if (anchors.get(obj) != -1) {
      result = result.asAnnotatable().setAnnotation(ANCHOR_ANNO, values.integer(anchors.get(obj)));
    }
    return result;
  }
View Full Code Here

 
  @SuppressWarnings("unchecked")
  private void setProperties(IFigureConstructionEnv env, IList props) {
    for (IValue v : props) {
      HashMap<Properties,PropertyValue> addIn;
      IConstructor c = (IConstructor) v;
      String pname = c.getName();
      if(pname.startsWith("_child")){
        continue;
      }
      if(pname.equals("std")){
        c = (IConstructor)c.get(0);
        pname = c.getName();
        addIn = stdValues;
      } else {
        addIn = explicitValues;
      }
      Properties prop = Properties.propertyLookup.get(pname);
      if(prop == null){
        System.out.printf("Cannot find %s !\n", pname);
      }
      else {
        PropertyValue val = prop.producePropertyValue(c.get(0), this, env);
        if(addIn.containsKey(prop)){
          System.out.printf("Combining!\n");
          addIn.put(prop, new CombinedProperty(addIn.get(prop),val,prop.combine));
        } else {
          addIn.put(prop, val);
View Full Code Here

    super(properties);
    this.nodes = new ArrayList<SpringGraphNode>();
    this.env = fpa.getCallBackEnv();
    registered = new HashMap<String,SpringGraphNode>();
    for(IValue v : nodes){
      IConstructor c = (IConstructor) v;
      Figure fig = FigureFactory.make(fpa, c, properties, null);
      String name = fig.prop.getStr(ID);

      if(name.length() == 0)
        throw RuntimeExceptionFactory.figureException("Id property should be defined", v, fpa.getRascalContext().getCurrentAST(), fpa.getRascalContext().getStackTrace());

      SpringGraphNode node = new SpringGraphNode(this, name, fig);
      this.nodes.add(node);
      register(name, node);
    }

    this.edges = new ArrayList<SpringGraphEdge>();
    for (IValue v : edges) {
      IConstructor c = (IConstructor) v;
      PropertyManager pm = c.arity() > 2 ? new PropertyManager(fpa, properties, (IList) c.get(2)) : properties;
      SpringGraphEdge e = FigureFactory.makeSpringGraphEdge(this, fpa, c, pm);
      this.edges.add(e);
      e.getFrom().addOut(e.getTo());
      e.getTo().addIn(e.getFrom());
    }
View Full Code Here

   
    public static Figure[] makeList(IFigureConstructionEnv env, IValue list, PropertyManager properties, IList childProps){
      IList elems = (IList)list;
      Figure[] result = new Figure[elems.length()];
      for (int i = 0; i < elems.length(); i++) {
        IConstructor c = (IConstructor)elems.get(i);
      result[i] = FigureFactory.make(env, c, properties, childProps);
    }
      return result;
    }
View Full Code Here

TOP

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

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.