public override void EnterExpression(FlyParser.ExpressionContext context) { if (context.INT() != null) // Int to operator stack { Code.Int(context.INT().GetText()); } else if (context.NIL() != null) // Null to operator stack { Code.Nil(); } else if (context.parenExp != null) { EnterExpression(context.parenExp); } else if (context.STRING() != null) // Load string to constants, and push to operator stack { Code.String(context.STRING().GetText()); } else if (context.FLOAT() != null) // Float to operator stack { Code.Float(context.FLOAT().GetText()); } else if (context.BOOL() != null) { Code.Bool(context.BOOL().GetText()); } else if (context.ID() != null) { if (context.index != null) { EnterExpression(context.index); Code.VarCall(context.ID().GetText()); Code.ArrayGet(); } else { Code.VarCall(context.ID().GetText()); } } else if (context.callOn != null) { if (Imports.Contains(context.target.GetText())) { var lib = context.target.GetText(); if (context.callOn.methodCall() == null) { throw new Exception("No method call found."); } var method = context.callOn.methodCall().ID().GetText(); var expressions = context.callOn.methodCall().expression(); foreach (var expr in expressions) { EnterExpression(expr); } Code.LibFunctionCall(lib, method); } else { EnterExpression(context.target); EnterExpression(context.callOn); } } else if (context.array() != null) { EnterArray(context.array()); } else if (context.quickArray() != null) { EnterQuickArray(context.quickArray()); } else if (context.unary != null) { EnterExpression(context.right); Code.UnaryOperator(context.unary.Text); } else if (context.left != null && context.right != null && context.op != null) { EnterExpression(context.right); EnterExpression(context.left); Code.BinaryOperator(context.op.Text); } else if (context.left != null && context.right != null && context.comp != null) { EnterExpression(context.right); EnterExpression(context.left); Code.CompareOperator(context.comp.Text); } else if (context.methodCall() != null) { EnterMethodCall(context.methodCall()); } else if (context.varAssignment() != null) { EnterVarAssignment(context.varAssignment()); } else if (context.anonymousMethodDefinition() != null) { EnterAnonymousMethodDefinition(context.anonymousMethodDefinition()); } else if (context.lambdaExpression() != null) { EnterLambdaExpression(context.lambdaExpression()); } else { throw new Exception("Not a valid expression"); } }
/// <summary> /// Exit a parse tree produced by <see cref="FlyParser.expression"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitExpression([NotNull] FlyParser.ExpressionContext context) { }