@Override public Expr make(ItemList list) { BuilderLib.checkLength(3,4, list, "substr: wanted 2 or 3 arguments: got: "+numArgs(list)) ; Expr ex = buildExpr(list.get(1)) ; Expr x = buildExpr(list.get(2)) ; Expr y = null ; if ( list.size() == 4 ) y = buildExpr(list.get(3)) ; return new E_StrSubstring(ex, x, y) ; } } ;
public static void addPair(ItemList list, Item key, Item value) { Item pair = makePair(key, value) ; list.add(pair) ; }
@Override public Expr make(final ItemList list) { ItemList x = list.cdr(); // drop "count" boolean distinct = startsWithDistinct(x) ; if ( distinct ) x = x.cdr(); BuilderLib.checkLength(0, 1, x, "Broken syntax: "+list.shortString()) ; Aggregator agg = null ; if ( x.size() == 0 ) agg = AggregatorFactory.createCount(distinct) ; else { Expr expr = BuilderExpr.buildExpr(x.get(0)) ; agg = AggregatorFactory.createCountExpr(distinct, expr) ; } return new ExprAggregator(null, agg) ; } };
public static void checkTag(ItemList list, String tag) { if ( list.size() == 0 ) broken(list, "Empty list"); if ( !list.get(0).isSymbolIgnoreCase(tag) ) broken(list, "List does not start (" + tag + "...) : " + list.shortString()); }
private void init(Item stats) { if ( !stats.isTagged(STATS) ) throw new ARQException("Not a tagged '"+STATS+"'") ; ItemList list = stats.getList().cdr(); // Skip tag if ( list.car().isTagged(META) ) { // Process the meta tag. Item elt1 = list.car(); list = list.cdr(); // Move list on // Get count. Item x = Item.find(elt1.getList(), COUNT) ; if ( x != null ) count = x.getList().get(1).asInteger() ; } while (!list.isEmpty()) { Item elt = list.car() ; list = list.cdr(); onePattern(elt) ; } }
public static Item createList(int line, int column) { Item item = new Item(line, column) ; item.list = new ItemList(line, column) ; return item ; }
@Override public Expr make(final ItemList list) { ItemList x = list.cdr(); // drop "agg" if ( x.size() == 0 ) BuilderLib.broken(list, "Missing IRI for aggregate") ; Item z = x.car() ; if ( ! z.isNodeURI() ) BuilderLib.broken(list, "Not an IRI for aggregate: "+z) ; x = x.cdr() ; boolean distinct = startsWithDistinct(x) ; if ( distinct ) x = x.cdr(); ExprList e = buildExprListUntagged(x, 0) ; Aggregator agg = AggregatorFactory.createCustom(z.getNode().getURI(), distinct, e) ; return new ExprAggregator(null, agg) ; } } ;
private static void buildNamedExpr(Item item, VarExprList varExprList) { if ( item.isNode() ) { Var v = BuilderNode.buildVar(item) ; varExprList.add(v) ; return ; } if ( !item.isList() || item.getList().size() != 2 ) BuilderLib.broken(item, "Not a var or var/expression pair") ; ItemList list = item.getList() ; if ( list.size() == 1 ) { Var v = BuilderNode.buildVar(list.car()) ; varExprList.add(v) ; return ; } if ( list.size() != 2 ) BuilderLib.broken(list, "Not a var or var/expression pair") ; Var var = BuilderNode.buildVar(list.get(0)) ; Expr expr = BuilderExpr.buildExpr(list.get(1)) ; varExprList.add(var, expr) ; }
@Override protected boolean endOfDecl(ItemList list, Item item) { // Both (base...) and (prefix...) have one decl item if ( declList == list && list.size() == 2 ) { declList = null ; return true ; } return false ; }
public static void checkLength(int len1, int len2, ItemList list, String msg) { if ( list.size() >= len1 && list.size() <= len2 ) return; if ( msg == null ) msg = "Wrong number of arguments: (" + len1 + "-" + len2 + ")/" + list.size() + " : " + list.shortString(); else msg = msg + " : " + list.shortString(); broken(list, msg); }
public static Graph buildGraph(Graph graph, ItemList list) { if ( !list.isEmpty() && list.get(0).isSymbol() ) { if ( list.get(0).isSymbol(Tags.tagGraph) ) list = list.cdr(); } for ( Item item : list ) { BuilderLib.checkList(item); Triple triple = buildTriple(item.getList()); graph.add(triple); } return graph; }