@Override public String evaluate(EvaluationContext ctx) { return EvalHelper.normalizeVariableName( getText() ); }
public static NameDefNode newNameDefNode(ParserRuleContext ctx, String name) { return new NameDefNode( ctx, name ); }
public String evaluateName(EvaluationContext ctx) { return (String) this.name.evaluate( ctx ); }
@Override public DirectCompilerResult visit(IterationContextNode n) { DirectCompilerResult iterName = n.getName().accept(this); DirectCompilerResult iterExpr = n.getExpression().accept(this); Expressions.namedLambda( iterName.getExpression(), n.getName().getText()); Expressions.NamedLambda exprLambda = Expressions.namedLambda(
@Override public DirectCompilerResult visit(FunctionDefNode n) { MethodCallExpr list = Expressions.list(); n.getFormalParameters() .stream() .map(fp -> fp.accept(this)) .map(DirectCompilerResult::getExpression) .forEach(list::addArgument); if (n.isExternal()) { List<String> paramNames = n.getFormalParameters().stream() .map(BaseNode::getText) .collect(Collectors.toList()); return Functions.declaration( n, list, Functions.external(paramNames, n.getBody())); } else { DirectCompilerResult body = n.getBody().accept(this); return Functions.declaration(n, list, body.getExpression()).withFD(body); } }
assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getParts(), is( notNullValue() ) ); assertThat( name.getParts().size(), is( 5 ) ); assertThat( entry.getName().getText(), is("a variable with in keyword") ); assertThat( entry.getValue(), is( instanceOf( NumberNode.class ) ) ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName(); assertThat( name.getParts(), is( notNullValue() ) ); assertThat( name.getParts().size(), is( 2 ) ); assertThat( entry.getName().getText(), is("another variable") ); assertThat( entry.getValue(), is( instanceOf( InfixOpNode.class ) ) ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName(); assertThat( name.getParts(), is( notNullValue() ) ); assertThat( name.getParts().size(), is( 3 ) ); assertThat( entry.getName().getText(), is("another in variable") ); assertThat( entry.getValue(), is( instanceOf( InfixOpNode.class ) ) );
@Override public DirectCompilerResult visit(NamedParameterNode n) { DirectCompilerResult name = n.getName().accept(this); DirectCompilerResult expr = n.getExpression().accept(this); return DirectCompilerResult.of( Expressions.namedParameter(name.getExpression(), expr.getExpression()), BuiltInType.UNKNOWN).withFD(name).withFD(expr); }
assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getParts(), is( notNullValue() ) ); assertThat( name.getParts().size(), is( 5 ) ); assertThat( entry.getName().getText(), is("a non-string key") ); assertThat( entry.getValue(), is( instanceOf( InfixOpNode.class ) ) ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName(); assertThat( name.getParts(), is( notNullValue() ) ); assertThat( name.getParts().size(), is( 9 ) ); assertThat( entry.getName().getText(), is("a key.with + /' odd chars") ); assertThat( entry.getValue(), is( instanceOf( RangeNode.class ) ) );
@Override public DirectCompilerResult visit(NameDefNode n) { StringLiteralExpr expr = Expressions.stringLiteral(EvalHelper.normalizeVariableName(n.getText())); return DirectCompilerResult.of(expr, BuiltInType.STRING); }
@Override public Object evaluate(EvaluationContext ctx) { String n = name.evaluate( ctx ); Object val = expression.evaluate( ctx ); return new NamedParameter( n, val ); }
public static NameDefNode newNameDefNode(ParserRuleContext ctx, List<String> tokens) { return new NameDefNode( ctx, tokens ); }
@Test public void testFunctionDefinition() { String inputExpression = "{ is minor : function( person's age ) person's age < 21 }"; BaseNode ctxbase = parse( inputExpression ); assertThat( ctxbase, is( instanceOf( ContextNode.class ) ) ); assertThat( ctxbase.getText(), is( inputExpression ) ); ContextNode ctx = (ContextNode) ctxbase; assertThat( ctx.getEntries().size(), is( 1 ) ); ContextEntryNode entry = ctx.getEntries().get( 0 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getText(), is("is minor") ); assertThat( entry.getValue(), is( instanceOf( FunctionDefNode.class ) ) ); assertThat( entry.getValue().getText(), is("function( person's age ) person's age < 21") ); FunctionDefNode isMinorFunc = (FunctionDefNode) entry.getValue(); assertThat( isMinorFunc.getFormalParameters().size(), is( 1 ) ); assertThat( isMinorFunc.getFormalParameters().get( 0 ).getText(), is( "person's age" ) ); assertThat( isMinorFunc.isExternal(), is( false ) ); assertThat( isMinorFunc.getBody(), is( instanceOf( InfixOpNode.class ) ) ); }
@Override public Object evaluate(EvaluationContext ctx) { List<String> params = formalParameters.stream().map( p -> p.evaluate( ctx ) ).collect( Collectors.toList() ); if( external ) { try {
@Test public void testForExpression() { String inputExpression = "for item in order.items return item.price * item.quantity"; BaseNode forbase = parse( inputExpression ); assertThat( forbase, is( instanceOf( ForExpressionNode.class ) ) ); assertThat( forbase.getText(), is( inputExpression ) ); assertThat( forbase.getResultType(), is( BuiltInType.LIST ) ); ForExpressionNode forExpr = (ForExpressionNode) forbase; assertThat( forExpr.getIterationContexts().size(), is( 1 ) ); assertThat( forExpr.getExpression(), is( instanceOf( InfixOpNode.class ) ) ); assertThat( forExpr.getExpression().getText(), is( "item.price * item.quantity" ) ); IterationContextNode ic = forExpr.getIterationContexts().get( 0 ); assertThat( ic.getName().getText(), is("item") ); assertThat( ic.getExpression(), is( instanceOf( QualifiedNameNode.class ) ) ); assertThat( ic.getExpression().getText(), is("order.items") ); }
@Test public void testFunctionInvocationNamedParams() { String inputExpression = "my.test.Function( named parameter 1 : x+10, named parameter 2 : \"foo\" )"; BaseNode functionBase = parse( inputExpression ); assertThat( functionBase, is( instanceOf( FunctionInvocationNode.class ) ) ); assertThat( functionBase.getText(), is( inputExpression ) ); FunctionInvocationNode function = (FunctionInvocationNode) functionBase; assertThat( function.getName(), is( instanceOf( QualifiedNameNode.class ) ) ); assertThat( function.getName().getText(), is( "my.test.Function" ) ); assertThat( function.getParams(), is( instanceOf( ListNode.class ) ) ); assertThat( function.getParams().getElements().size(), is( 2 ) ); assertThat( function.getParams().getElements().get( 0 ), is( instanceOf( NamedParameterNode.class ) ) ); assertThat( function.getParams().getElements().get( 1 ), is( instanceOf( NamedParameterNode.class ) ) ); NamedParameterNode named = (NamedParameterNode) function.getParams().getElements().get( 0 ); assertThat( named.getText(), is( "named parameter 1 : x+10" ) ); assertThat( named.getName().getText(), is( "named parameter 1" ) ); assertThat( named.getExpression(), is( instanceOf( InfixOpNode.class ) ) ); assertThat( named.getExpression().getText(), is( "x+10" ) ); named = (NamedParameterNode) function.getParams().getElements().get( 1 ); assertThat( named.getText(), is( "named parameter 2 : \"foo\"" ) ); assertThat( named.getName().getText(), is( "named parameter 2" ) ); assertThat( named.getExpression(), is( instanceOf( StringNode.class ) ) ); assertThat( named.getExpression().getText(), is( "\"foo\"" ) ); }
@Test public void testNestedContexts2() { String inputExpression = "{ an applicant : { " + " home address : {" + " street name: \"broadway st\"," + " city : \"New York\" " + " } " + " },\n " + " street : an applicant.home address.street name \n" + "}"; BaseNode ctxbase = parse( inputExpression ); assertThat( ctxbase, is( instanceOf( ContextNode.class ) ) ); assertThat( ctxbase.getText(), is( inputExpression ) ); ContextNode ctx = (ContextNode) ctxbase; assertThat( ctx.getEntries().size(), is( 2 ) ); ContextEntryNode entry = ctx.getEntries().get( 1 ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); assertThat( entry.getResultType(), is( BuiltInType.STRING ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getText(), is("street") ); assertThat( entry.getValue(), is( instanceOf( QualifiedNameNode.class ) ) ); QualifiedNameNode qnn = (QualifiedNameNode) entry.getValue(); assertThat( qnn.getParts().get( 0 ).getText(), is("an applicant") ); assertThat( qnn.getParts().get( 1 ).getText(), is("home address") ); assertThat( qnn.getParts().get( 2 ).getText(), is("street name") ); }
assertThat( named.getName().getText(), is( "outputs" ) ); assertThat( named.getExpression(), is( instanceOf( StringNode.class ) ) ); assertThat( named.getExpression().getText(), is( "\"Applicant Risk Rating\"" ) ); assertThat( named.getName().getText(), is( "input expression list" ) ); assertThat( named.getExpression(), is( instanceOf( ListNode.class ) ) ); assertThat( named.getName().getText(), is( "rule list" ) ); assertThat( named.getExpression(), is( instanceOf( ListNode.class ) ) ); assertThat( named.getName().getText(), is( "hit policy" ) ); assertThat( named.getExpression(), is( instanceOf( StringNode.class ) ) ); assertThat( named.getExpression().getText(), is( "\"Unique\"" ) );
assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getText(), is("trigonometric cosine") ); assertThat( entry.getValue(), is( instanceOf( FunctionDefNode.class ) ) ); assertThat( entry.getValue().getText(), is("function( angle ) external {" assertThat( cos.getFormalParameters().get( 0 ).getText(), is( "angle" ) ); assertThat( cos.isExternal(), is( true ) ); assertThat( cos.getBody(), is( instanceOf( ContextNode.class ) ) );
assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); NameDefNode name = (NameDefNode) entry.getName(); assertThat( name.getText(), is("a value") ); assertThat( entry.getValue(), is( instanceOf( NumberNode.class ) ) ); assertThat( entry.getResultType(), is( BuiltInType.NUMBER ) ); assertThat( entry.getName(), is( instanceOf( NameDefNode.class ) ) ); name = (NameDefNode) entry.getName(); assertThat( name.getText(), is( "an applicant" ) ); assertThat( entry.getValue(), is( instanceOf( ContextNode.class ) ) );