private void SetNumericalExpression(IdentifierValueNode identifierValueNode, ExpressionNode expressionNode, SymbolType expressionType) { switch (expressionType) { case SymbolType.Float: { FloatValueNode floatValueNode = new FloatValueNode(); ExpressionEvaluator <float> expressionEvaluator = new ExpressionEvaluator <float>(new FloatCalculator(expressionNode.Token)); expressionNode.Accept(expressionEvaluator); floatValueNode.Value = expressionEvaluator.Result; identifierValueNode.ValueNode = floatValueNode; break; } case SymbolType.Integer: { IntValueNode intValueNode = new IntValueNode(); ExpressionEvaluator <int> expressionEvaluator = new ExpressionEvaluator <int>(new IntCalculator(expressionNode.Token)); expressionNode.Accept(expressionEvaluator); intValueNode.Value = expressionEvaluator.Result; identifierValueNode.ValueNode = intValueNode; break; } } }
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 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 VisitGridAssignStatement([NotNull] CoronaParser.GridAssignStatementContext context) { BuildValueAst valueVisitor = new BuildValueAst(); try { IdentifierValueNode id = new IdentifierValueNode(context.ID().GetText()); GridValueNode gridpoint = (GridValueNode)valueVisitor.Visit(context.gridPoint()); return(new GridAssignmentStatementNode(gridpoint, id)); } catch (TheLanguageErrorException e) { throw new TheLanguageErrorException("Grid assignment statement", e); } }
private void AddIdentifierElement(IdentifierValueNode node, List <ValueNode> values) { Symbol sym = Stbl.st.Retrieve(node.Label); if (sym != null) { values.Add(sym switch { VariableSymbol <int> v => new IntValueNode(v.Value), VariableSymbol <string> v => new StringValueNode(v.Value), VariableSymbol <StateSymbol> v => new StateValueNode(v.Value), StateSymbol s => new StateValueNode(s), _ => throw new TheLanguageErrorException($"Unexpected variable type \"{ sym.GetType().Name }\""), });
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); } }
public void Visit(IdentifierValueNode identifierValueNode) { SymbolTableEntry entry; try { entry = symbolTable.RetrieveSymbolInParentScope(identifierValueNode.Identifier); } catch (Exception e) { DazelLogger.EmitError(e.Message, identifierValueNode.Token); return; } if (entry is VariableSymbolTableEntry variableSymbolTableEntry) { ExpressionNode expression = variableSymbolTableEntry.ValueNode; SetNumericalExpression(identifierValueNode, expression, entry.Type); } SymbolTableEntry symbolTableEntry = symbolTable.RetrieveSymbolInParentScope(identifierValueNode.Identifier); typeHandler.SetType(symbolTableEntry.Type, identifierValueNode.Token); }
public void Visit(IdentifierValueNode identifierValueNode) { sb.Append(identifierValueNode.Identifier); }
public ReturnMemberNode(IdentifierValueNode id, ValueNode value) { ID = id; Value = value; }
public MemberAssignmentStatementNode(GridValueNode gridPoint, IdentifierValueNode memberID, ValueNode value) { GridPoint = gridPoint; MemberID = memberID; Value = value; }
public void Visit(IdentifierValueNode identifierValueNode) { }
public ReturnStatementNode(IdentifierValueNode id) { Identifier = id; }
public GridAssignmentStatementNode(GridValueNode gridPoint, IdentifierValueNode id) { GridPoint = gridPoint; Identifier = id; }
public void Visit(IdentifierValueNode identifierValueNode) { identifierValueNode.ValueNode.Accept(this); }
public IdentifierAssignmentStatementNode(IdentifierValueNode id, ValueNode value) { Identifier = id; Value = value; }
public AdvancedReturnStatementNode(IdentifierValueNode id, List <ReturnMemberNode> returnMembers) : base(id) { ReturnMembers = returnMembers; }