Ejemplo n.º 1
0
        public LiteValue Visit(SyntaxElementsStatementNode Node, LiteEnv Env)
        {
            var Eles = new LiteValue[Node.GetChildrenNum()];

            for (var Index = 0; Index < Eles.Length; ++Index)
            {
                Eles[Index] = Node.GetChild(Index).Accept(this, Env);
            }

            return(ElementsTable.AddElementsEx(new Elements(Eles)));
        }
Ejemplo n.º 2
0
        // elements ::= "[" [ expr { "," expr } ] "]"
        private SyntaxElementsStatementNode ParseElementsNode()
        {
            if (!TokenStream_.TakeExpect(TokenType.Delimiter, "[", out Token Tok))
            {
                ExitCode_ = new ExitUnexpectedSymbolCode(Tok);
                return(null);
            }

            var Node = new SyntaxElementsStatementNode();

            if (TokenStream_.PeekExpect(TokenType.Delimiter, "]"))
            {
                TokenStream_.Take();
                return(Node);
            }

            while (!TokenStream_.IsEnd())
            {
                var Arg = ParseExprNode();
                if (Arg == null)
                {
                    ExitCode_ = new ExitUnexpectedSymbolCode(TokenStream_.Peek());
                    return(null);
                }

                Node.AddNode(Arg);

                if (!TokenStream_.TakeExpect(TokenType.Delimiter, out Tok))
                {
                    ExitCode_ = new ExitUnexpectedSymbolCode(Tok);
                    return(null);
                }

                if (Tok.Code == "]")
                {
                    return(Node);
                }
                if (Tok.Code == ",")
                {
                    continue;
                }

                ExitCode_ = new ExitUnexpectedSymbolCode(Tok);
            }

            ExitCode_ = new ExitUnexpectedSymbolCode(Tok);
            return(null);
        }