public override void ExitIfStatement([NotNull] CmanParser.IfStatementContext context) { ASTBodyStatementNode elseBody = null; ASTBodyStatementNode trueBody = null; IASTExprNode condition = null; if (_nodes.Peek() is ASTBodyStatementNode) { var tmp = _nodes.Pop(); if (_nodes.Peek() is ASTBodyStatementNode) { elseBody = (ASTBodyStatementNode)tmp; trueBody = (ASTBodyStatementNode)_nodes.Pop(); condition = (IASTExprNode)_nodes.Pop(); } else { trueBody = (ASTBodyStatementNode)tmp; condition = (IASTExprNode)_nodes.Pop(); } } else { condition = (IASTExprNode)_nodes.Pop(); //((ASTIfStatementNode)_nodes.Peek()).Condition = condition; } //TODO: ifnode не привязывает к себе ноды var ifNode = (ASTIfStatementNode)_nodes.Peek(); ifNode.Condition = condition; ifNode.TrueBody = trueBody; ifNode.ElseBody = elseBody; return; }
public override void EnterIfStatement([NotNull] CmanParser.IfStatementContext context) { _nodes.Push(new ASTIfStatementNode(context, _nodes.Peek())); }
public ASTIfStatementNode(CmanParser.IfStatementContext context, ASTNode parent) : base(parent) { SetLocation(context); }