namespace tlang { internal class Parser { public Parser() { } public Node ParseExpression(List tokens,ref int i,bool isFirst=false) { if(i>= tokens.Count) return new ConstNode(new TNumber(0)); if(tokens[i].Text == "{" || isFirst) { if(!isFirst) i++; ScopeNode scopeNode = new ScopeNode(){First=isFirst}; while(i tokens,ref int i) { Node myExpression = ParseSum(tokens,ref i); while(i tokens,ref int i) { Node myExpression = ParseFactor(tokens,ref i); while(i tokens,ref int i) { var token=tokens[i++]; if(token.IsString) return new ConstNode(new TString(token.Text)); if(token.IsChar) { return new ConstNode(new TChar(token.Text.SingleOrDefault())); } long val; if(long.TryParse(token.Text,out val)) { if(i args = new List(); i++; while(i args = new List(); //function call baby while(i(); //function call baby while(i(); //function call baby while(i tokens,ref int i) { Node myExpression = ParseValue(tokens,ref i); while(i{ if(args.Length > 0) { var fileName=args[0].ToString(); if(!string.IsNullOrWhiteSpace(fileName) && Directory.Exists(fileName)) { var dict = new TDictionary(); dict["getIttr"] = new TExternalMethod((args2)=>{ var enumerable=Directory.EnumerateFiles(fileName).GetEnumerator(); TDictionary dict2 = new TDictionary(); dict2["movenext"] = new TExternalMethod((args3)=>{ return new TNumber(enumerable.MoveNext() ? 1 : 0); }); dict2["getCurrent"] = new TExternalMethod((args3)=>{ return new TString(enumerable.Current); }); return dict2; }); return dict; } } return TObject.Null; }); fs["enumerate_dirs"] = new TExternalMethod((args)=>{ if(args.Length > 0) { var fileName=args[0].ToString(); if(!string.IsNullOrWhiteSpace(fileName) && Directory.Exists(fileName)) { var dict = new TDictionary(); dict["getIttr"] = new TExternalMethod((args2)=>{ var enumerable=Directory.EnumerateDirectories(fileName).GetEnumerator(); TDictionary dict2 = new TDictionary(); dict2["movenext"] = new TExternalMethod((args3)=>{ return new TNumber(enumerable.MoveNext() ? 1 : 0); }); dict2["getCurrent"] = new TExternalMethod((args3)=>{ return new TString(enumerable.Current); }); return dict2; }); return dict; } } return TObject.Null; }); env["fs"]=fs; } } }