Ejemplo n.º 1
0
 public FuncLite(string Name, LiteEnv Env, SyntaxParamListStatementNode ParamList, SyntaxBlockStatementNode Block)
     : base(Name)
 {
     this.Env_       = Env;
     this.ParamList_ = ParamList;
     this.Block_     = Block;
 }
Ejemplo n.º 2
0
        public LiteValue Visit(SyntaxBlockStatementNode Node, LiteEnv Env)
        {
            var Val = LiteValue.Nil;

            foreach (var Child in Node.GetChildren())
            {
                Val = Child.Accept(this, Env);
                //Logger.DInfo($"{Child} => {Val}");
                if (Child.GetType() == SyntaxNodeType.ReturnStatement)
                {
                    return(Val);
                }
                if (Val.IsError())
                {
                    break;
                }
            }
            return(Val);
        }
Ejemplo n.º 3
0
        // block ::= "{" [ statement ] { ";" [ statement ] } "}"
        private SyntaxBlockStatementNode ParseBlockNode()
        {
            if (!TokenStream_.TakeExpect(TokenType.Delimiter, "{", out Token NextTok))
            {
                ExitCode_ = new ExitUnexpectedSymbolCode(NextTok);
                return(null);
            }

            var BlockNode = new SyntaxBlockStatementNode();

            while (!TokenStream_.IsEnd())
            {
                var Tok = TokenStream_.Peek();
                if (Tok.Type == TokenType.Delimiter)
                {
                    TokenStream_.Take();
                    switch (Tok.Code)
                    {
                    case "}":
                        return(BlockNode);

                    case ";":
                        continue;

                    default:
                        break;
                    }
                    ExitCode_ = new ExitUnexpectedSymbolCode(Tok);
                    return(null);
                }

                var Node = ParseStatementNode();
                BlockNode.AddNode(Node);
            }

            ExitCode_ = new ExitFailedCode("end of file");
            return(null);
        }
Ejemplo n.º 4
0
 public SyntaxFunctionNode(string FuncName, SyntaxParamListStatementNode ParamListNode, SyntaxBlockStatementNode BlockNode)
     : base(ParamListNode, BlockNode)
 {
     FuncName_ = FuncName;
 }
Ejemplo n.º 5
0
 public SyntaxWhileStatementNode(SyntaxNode ExprNode, SyntaxBlockStatementNode BlockNode)
     : base(ExprNode, BlockNode)
 {
 }
Ejemplo n.º 6
0
 public SyntaxIfStatementNode(SyntaxNode ExprNode, SyntaxBlockStatementNode BlockNode, SyntaxNode ElseNode)
     : base(ExprNode, BlockNode, ElseNode)
 {
 }