TjsArray ParseArray(TextReader r) { TjsParser.Token token = null; List <TjsValue> inner = new List <TjsValue>(); do { // 读取一个值 TjsValue val = Parse(r); // 直接返回错误 if (val == null) { return(null); } inner.Add(val); // 读取其后的符号 token = GetNext(r); if (token.t == TokenType.Symbol) { if (token.val == "]") { // 读取完毕 TjsArray ret = new TjsArray(inner); return(ret); } else if (token.val != ",") { // 错误的符号 ShowError("Expect a Comma"); break; } } else { // 错误的符号 ShowError("Expect a Symbol"); break; } } while (token.t != TokenType.Unknow); ShowError("Array Parsing Failed"); ShowError(token); return(null); }
public TjsValue Parse(TextReader r) { TjsParser.Token token = null; do { token = GetNext(r); if (token.t == TokenType.Number) { // 解析出数字 TjsNumber ret = token.ToTjsNumber(); if (ret == null) { // 数字格式错误 ShowError("Invalid Number"); break; } return(ret); } else if (token.t == TokenType.String) { // 解析出字符串 TjsString ret = token.ToTjsString(); if (ret == null) { // 字符串格式错误 ShowError("Invalid String"); break; } return(ret); } else if (token.t == TokenType.Symbol) { // 兼容2.28 if (token.val == "(const)" || token.val == "int" || token.val == "string") { // 啥也不干 } else if (token.val == "void") { // 解析出空值 return(new TjsVoid()); } else if (token.val == "%[") { // 返回字典 TjsDict ret = ParseDict(r); return(ret); } else if (token.val == "[") { // 返回数组 TjsArray ret = ParseArray(r); return(ret); } else { // 无效的符号 ShowError("Invalid Symbol"); break; } } } while (token.t != TokenType.Unknow); if (token.t != TokenType.Unknow) { ShowError("Value Parsing Failed"); ShowError(token); } return(null); }