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()}");
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #4
0
 public override string AsString() => "(" + string.Join(", ", Params) + ") => " + Body.ToString();