public override object VisitSimpleExpr([NotNull] SLangGrammarParser.SimpleExprContext context) { Visit(context.term()); if (context.simpleExpr() != null) { var op = context.AddOp() ?? context.SubOp() ?? context.BoolOr(); cppText.Write($" {op.GetText()} "); Visit(context.simpleExpr()); } return(null); }
public override object VisitSimpleExpr([NotNull] SLangGrammarParser.SimpleExprContext context) { if (context.simpleExpr() != null) { var leftResultType = (Visit(context.term()) as ExpressionResult)?.Type; var rightResultType = (Visit(context.simpleExpr()) as ExpressionResult)?.Type; var opToken = context.AddOp() ?? context.SubOp() ?? context.BoolOr(); var allowedTypes = new[] { SlangSimpleType.Int, SlangSimpleType.Real }; if (context.BoolOr() == null && (leftResultType is SlangSimpleType lt && rightResultType is SlangSimpleType rt && lt.Equals(rt) && allowedTypes.Contains(lt))) { return(new ExpressionResult(leftResultType, ExpressionValueType.Value)); } if (context.BoolOr() != null && (leftResultType is SlangSimpleType ltB && rightResultType is SlangSimpleType rtB && ltB.Equals(rtB) && ltB.Equals(SlangSimpleType.Boolean))) { return(new ExpressionResult(leftResultType, ExpressionValueType.Value)); } ThrowInvalidTypesForBinaryOperationException(opToken.Symbol, file, leftResultType, rightResultType); } return(Visit(context.term()) as ExpressionResult); }
/// <summary> /// Exit a parse tree produced by <see cref="SLangGrammarParser.simpleExpr"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitSimpleExpr([NotNull] SLangGrammarParser.SimpleExprContext context) { }
/// <summary> /// Visit a parse tree produced by <see cref="SLangGrammarParser.simpleExpr"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitSimpleExpr([NotNull] SLangGrammarParser.SimpleExprContext context) { return(VisitChildren(context)); }