コード例 #1
0
        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;
        }
コード例 #2
0
 public override void EnterIfStatement([NotNull] CmanParser.IfStatementContext context)
 {
     _nodes.Push(new ASTIfStatementNode(context, _nodes.Peek()));
 }
コード例 #3
0
 public ASTIfStatementNode(CmanParser.IfStatementContext context, ASTNode parent)
     : base(parent)
 {
     SetLocation(context);
 }