public object VisitExprAST([NotNull] ExprASTContext context) { Visit(context.term(0)); for (int i = 1; i < context.term().Length; i++) { Visit(context.term(i)); string instruction = "BINARY_"; if (context.addop(i - 1).GetText() == "+") { instruction += "ADD"; } else { instruction += "SUBSTRACT"; } AddLine(instruction); } return(null); }
public object VisitExprAST([NotNull] ExprASTContext context) { if (context.term().Length == 1) { string type = (string)Visit(context.term(0)); if (type != "int") { if (context.SUB() == null) { return(type); } else if (type != null) { InsertError(context.SUB().Symbol, "La expresión '" + context.term()[0].GetText() + "'no es un número y no se puede negar"); return(null); } } else { return(type); } } else if (context.term().Length > 1) { bool allInts = context.term().ToList().All(term => { string type = (string)Visit(term); if (type != "int") { InsertError(term.Start, $"El término '{term.GetText()}' no es un número entero. Solo se permite el uso de '+' o '-' con números enteros"); } return(type == "int"); }); return(allInts ? "int" : null); } return(null); }