public override StatementNode VisitAdvancedReturn([NotNull] CoronaParser.AdvancedReturnContext context) { BuildValueAst valueVisitor = new BuildValueAst(); try { IdentifierValueNode id = (IdentifierValueNode)valueVisitor.Visit(context.identifierValue()); // Get returnMembers List <ReturnMemberNode> returnMembers = new List <ReturnMemberNode>(); foreach (var rMember in context.returnMember()) { // Get ReturnMember value ValueNode value; if (rMember.expr() != null) { value = new BuildExpressionAst().Visit(rMember.expr()); } else { value = new StringValueNode(rMember.STRING().GetText()); } // Add new ReturnMember to list returnMembers.Add(new ReturnMemberNode( (IdentifierValueNode)valueVisitor.Visit(rMember.identifierValue()), value) ); } return(new AdvancedReturnStatementNode(id, returnMembers)); } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Return statement", e); } }
public override StatementNode VisitMemberAssignStatement([NotNull] CoronaParser.MemberAssignStatementContext context) { BuildValueAst valueVisitor = new BuildValueAst(); BuildExpressionAst exprVisitor = new BuildExpressionAst(); try { // Get GridPoint GridValueNode gridPoint = null; if (context.gridPoint() != null) { gridPoint = (GridValueNode)valueVisitor.Visit(context.gridPoint()); } // Get Member IdentifierValueNode memberID = new IdentifierValueNode(context.identifierValue().GetText()); // Get value ValueNode value; if (context.expr() != null) { value = exprVisitor.Visit(context.expr()); } else { value = new StringValueNode(context.STRING().GetText()); } return(new MemberAssignmentStatementNode(gridPoint, memberID, value)); } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Member assignment statement", e); } }
public override StatementNode VisitIterationStatement([NotNull] CoronaParser.IterationStatementContext context) { BuildExpressionAst exprVisitor = new BuildExpressionAst(); IterationStatementNode node = new IterationStatementNode(); try { // Visit expressions node.Conditioner = exprVisitor.Visit(context.conditioner); // Visit statement node.Statement = Visit(context.statement()); } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Iteration statement", e); } return(node); }
public override StatementNode VisitMatchStatement([NotNull] CoronaParser.MatchStatementContext context) { BuildValueAst valueVisitor = new BuildValueAst(); BuildExpressionAst exprVisitor = new BuildExpressionAst(); // Visit each of the different elements to match against List <ValueNode> elements = new List <ValueNode>(); foreach (var e in context.matchElement()) { try { if (e.member() != null) { elements.Add(valueVisitor.Visit(e.member())); } else if (e.gridPoint() != null) { elements.Add(valueVisitor.Visit(e.gridPoint())); } else if (e.expr() != null) { elements.Add(exprVisitor.Visit(e.expr())); } } catch (TheLanguageErrorException excep) { throw new TheLanguageErrorException("Match statement value", excep); } } // Visit each CaseStatement List <CaseStatementNode> caseStatements = new List <CaseStatementNode>(); try { foreach (CoronaParser.CaseStatementContext c in context.caseStatement()) { caseStatements.Add((CaseStatementNode)Visit(c)); } } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Match statement", e); } return(new MatchStatementNode(elements, caseStatements)); }
public override ValueNode VisitGridPoint(CoronaParser.GridPointContext context) { BuildExpressionAst exprVisitor = new BuildExpressionAst(); // Extract the two expressions CoronaParser.ExprContext[] exprs = context.expr(); ExpressionNode first = exprVisitor.Visit(exprs[0]); ExpressionNode second = exprVisitor.Visit(exprs[1]); // Extract member if present IdentifierValueNode member = null; if (context.member() != null) { member = (IdentifierValueNode)Visit(context.member()); } return(new GridValueNode(first, second, member)); }
public override StatementNode VisitIdentifierAssignStatement([NotNull] CoronaParser.IdentifierAssignStatementContext context) { BuildValueAst valueVisitor = new BuildValueAst(); BuildExpressionAst exprVisitor = new BuildExpressionAst(); try { IdentifierValueNode id = valueVisitor.Visit(context.identifierValue()) as IdentifierValueNode; // Get value ValueNode value; if (context.expr() != null) { value = exprVisitor.Visit(context.expr()); } else { value = new StringValueNode(context.STRING().GetText()); } return(new IdentifierAssignmentStatementNode(id, value)); } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Identifier assignment statement", e); } }