Example #1
0
        public override void ExitSubStatement([NotNull] CmanParser.SubStatementContext context)
        {
            ASTSubStatementNode  procNode;
            ASTBodyStatementNode bodyNode = null;

            if (_nodes.Peek() is ASTBodyStatementNode)
            {
                bodyNode = (ASTBodyStatementNode)_nodes.Pop();
            }
            if (_nodes.Peek() is ASTArgListNode argListNode)
            {
                _nodes.Pop();
                procNode         = (ASTSubStatementNode)_nodes.Pop();
                procNode.ArgList = argListNode;
            }
            else
            {
                procNode = (ASTSubStatementNode)_nodes.Pop();
            }
            if (bodyNode != null)
            {
                procNode.Body = bodyNode;
            }

            var compileUnitNode = (ASTCompileUnitNode)_nodes.Peek();

            compileUnitNode.AddProcedure(procNode);
        }
Example #2
0
 public override void EnterSubStatement([NotNull] CmanParser.SubStatementContext context)
 {
     _nodes.Push(new ASTSubStatementNode(context, (ASTCompileUnitNode)_nodes.Peek()));
 }