private static string GetClassName(IASTNode querySource) { switch (querySource.Type) { case HqlSqlWalker.IDENT: return(querySource.Text); case HqlSqlWalker.DOT: return(BuildPath(querySource)); default: // TODO throw new NotSupportedException($"{querySource.ToString()} {querySource.ToStringTree()}"); } }
public static void TestParser() { string s = "(996 + 1.2 - 6 * (prev - 1) / prev - 3 * 5 * 13.6 / ext / k)"; StringReader reader = new StringReader(s); TokenStream ts = new TokenStream(reader); ts.AddTokenizers( new IdTokenizer(), new DecimalTokenizer(), new DigitTokenizer(), new StringTokenizer(), new NameTokenizer() ); Parser parser = CreateProgramParser(); NestedEnv env = Buildin.CreateBuindinEnv(); List <IASTNode> res = new List <IASTNode>(); Console.Write(">>> "); while ((s = Console.ReadLine()) != ".exit") { ts.Reset(new StringReader(s)); if (!parser.Parse(ts, res) || res.Count == 0) { Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("Parse failed"); Console.ResetColor(); } else { IASTNode node = res[0].Reduce(); Console.ForegroundColor = ConsoleColor.Green; Console.WriteLine("Parse succeeded"); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine(node.ToString()); Console.ResetColor(); string result = node.GetValue(null, env).ToString(); Console.WriteLine(); Console.ForegroundColor = ConsoleColor.Blue; Console.WriteLine("==> " + result); Console.ResetColor(); //PrintAST(node); } res.Clear(); Console.Write(">>> "); } }
public void Replace(IASTNode originalNode, IASTNode replace) { if (!InnerList.Contains(originalNode)) { throw new ArgumentException("Tried to replace inexistent node " + originalNode.ToString()); } int index = InnerList.IndexOf(originalNode); InnerList.RemoveAt(index); if (replace != null) { PrepareNode(replace); InnerList.Insert(index, replace); } }
public override string AsString() => "(" + string.Join(", ", Params) + ") => " + Body.ToString();