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))); }
// 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); }