@Override public NodeValue eval(List<NodeValue> args) { Node arg = NodeFunctions.checkAndGetStringLiteral("REGEX", args.get(0)) ; NodeValue vPattern = args.get(1) ; NodeValue vFlags = ( args.size() == 2 ? null : args.get(2) ) ; RegexEngine regex = regexEngine ; if ( regex == null ) regex = makeRegexEngine(vPattern, vFlags) ; boolean b = regex.match(arg.getLiteralLexicalForm()) ; return b ? NodeValue.TRUE : NodeValue.FALSE ; }
@Override public NodeValue exec(Binding binding, ExprList args, String uri, FunctionEnv env) { if ( myArgs != args ) throw new ARQInternalErrorException("matches: Arguments have changed since checking") ; Expr expr = args.get(0) ; E_Regex regexEval = regex ; if ( regexEval == null ) { Expr e1 = args.get(1) ; Expr e2 = null ; if ( args.size() == 3 ) e2 = args.get(2) ; String pattern = e1.eval(binding, env).getString() ; String flags = (e2==null)?null : e2.eval(binding, env).getString() ; regexEval = new E_Regex(expr, pattern, flags) ; // Cache if the pattern is fixed and the flags are fixed or non-existant if ( e1 instanceof NodeValue && ( e2 == null || e2 instanceof NodeValue ) ) regex = regexEval ; } NodeValue nv = regexEval.eval(binding, env) ; return nv ; }
public E_Regex(Expr expr, Expr pattern, Expr flags) { super(name, expr, pattern, flags) ; init(pattern, flags) ; }
public NodeValue exec(Binding binding, ExprList args, String uri, FunctionEnv env) { if ( myArgs != args ) throw new ARQInternalErrorException("matches: Arguments have changed since checking") ; Expr expr = args.get(0) ; E_Regex regexEval = regex ; if ( regexEval == null ) { Expr e1 = args.get(1) ; Expr e2 = null ; if ( args.size() == 3 ) e2 = args.get(2) ; String pattern = e1.eval(binding, env).getString() ; String flags = (e2==null)?null : e2.eval(binding, env).getString() ; regexEval = new E_Regex(expr, pattern, flags) ; // Cache if the pattern is fixed and the flags are fixed or non-existant if ( e1 instanceof NodeValue && ( e2 == null || e2 instanceof NodeValue ) ) regex = regexEval ; } NodeValue nv = regexEval.eval(binding, env) ; return nv ; }
public E_Regex(Expr expr, Expr pattern, Expr flags) { super(name, expr, pattern, flags) ; init(pattern, flags) ; }
@Override public NodeValue eval(List<NodeValue> args) { NodeValue v = args.get(0) ; NodeValue vPattern = args.get(1) ; NodeValue vFlags = ( args.size() == 2 ? null : args.get(2) ) ; if ( ! v.isString() ) throw new ExprEvalException("REGEX: "+v+" is not a string") ; RegexEngine regex = regexEngine ; if ( regex == null ) regex = makeRegexEngine(vPattern, vFlags) ; boolean b = regex.match(v.getString()) ; return b ? NodeValue.TRUE : NodeValue.FALSE ; }
@Override public Expr make(ItemList list) { BuilderLib.checkLength(3, 4, list, "Regex: wanted 2 or 3 arguments") ; Expr expr = buildExpr(list.get(1)) ; Expr pattern = buildExpr(list.get(2)) ; Expr flags = null ; if ( list.size() != 3 ) flags = buildExpr(list.get(3)) ; return new E_Regex(expr, pattern, flags) ; } };
private void init(Expr pattern, Expr flags) { if ( pattern.isConstant() && pattern.getConstant().isString() && ( flags==null || flags.isConstant() ) ) regexEngine = makeRegexEngine(pattern.getConstant(), (flags==null)?null:flags.getConstant()) ; }
public Expr make(ItemList list) { BuilderLib.checkLength(3, 4, list, "Regex: wanted 2 or 3 arguments") ; Expr expr = buildExpr(list.get(1)) ; Expr pattern = buildExpr(list.get(2)) ; Expr flags = null ; if ( list.size() != 3 ) flags = buildExpr(list.get(3)) ; return new E_Regex(expr, pattern, flags) ; } };
public static RegexEngine makeRegexEngine(NodeValue vPattern, NodeValue vFlags) { if ( ! vPattern.isString() ) throw new ExprException("REGEX: Pattern is not a string: "+vPattern) ; if ( vFlags != null && ! vFlags.isString() ) throw new ExprException("REGEX: Pattern flags are not a string: "+vFlags) ; String s = (vFlags==null)?null:vFlags.getString() ; return makeRegexEngine(vPattern.getString(), s) ; }
final public Expr RegexExpression() throws ParseException { Expr expr ; Expr patExpr = null ; Expr flagsExpr = null ; jj_consume_token(REGEX); jj_consume_token(LPAREN); expr = Expression(); jj_consume_token(COMMA); patExpr = Expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: jj_consume_token(COMMA); flagsExpr = Expression(); break; default: jj_la1[68] = jj_gen; ; } jj_consume_token(RPAREN); {if (true) return new E_Regex(expr, patExpr, flagsExpr) ;} throw new Error("Missing return statement in function"); }
private void init(Expr pattern, Expr flags) { if ( pattern.isConstant() && pattern.getConstant().isString() && ( flags==null || flags.isConstant() ) ) regexEngine = makeRegexEngine(pattern.getConstant(), (flags==null)?null:flags.getConstant()) ; }
final public Expr RegexExpression() throws ParseException { Expr expr ; Expr patExpr = null ; Expr flagsExpr = null ; jj_consume_token(REGEX); jj_consume_token(LPAREN); expr = Expression(); jj_consume_token(COMMA); patExpr = Expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: jj_consume_token(COMMA); flagsExpr = Expression(); break; default: jj_la1[134] = jj_gen; ; } jj_consume_token(RPAREN); {if (true) return new E_Regex(expr, patExpr, flagsExpr) ;} throw new Error("Missing return statement in function"); }
public static RegexEngine makeRegexEngine(NodeValue vPattern, NodeValue vFlags) { if ( ! vPattern.isString() ) throw new ExprException("REGEX: Pattern is not a string: "+vPattern) ; if ( vFlags != null && ! vFlags.isString() ) throw new ExprException("REGEX: Pattern flags are not a string: "+vFlags) ; String s = (vFlags==null)?null:vFlags.getString() ; return makeRegexEngine(vPattern.getString(), s) ; }
final public Expr RegexExpression() throws ParseException { Expr expr ; Expr patExpr = null ; Expr flagsExpr = null ; jj_consume_token(REGEX); jj_consume_token(LPAREN); expr = Expression(); jj_consume_token(COMMA); patExpr = Expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: jj_consume_token(COMMA); flagsExpr = Expression(); break; default: jj_la1[147] = jj_gen; ; } jj_consume_token(RPAREN); {if (true) return new E_Regex(expr, patExpr, flagsExpr) ;} throw new Error("Missing return statement in function"); }
final public Expr RegexExpression() throws ParseException { Expr expr ; Expr patExpr = null ; Expr flagsExpr = null ; jj_consume_token(REGEX); jj_consume_token(LPAREN); expr = Expression(); jj_consume_token(COMMA); patExpr = Expression(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: jj_consume_token(COMMA); flagsExpr = Expression(); break; default: jj_la1[68] = jj_gen; ; } jj_consume_token(RPAREN); {if (true) return new E_Regex(expr, patExpr, flagsExpr) ;} throw new Error("Missing return statement in function"); }