1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruvernamespace Antlr3.Runtime.Test.Composition
2324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver{
3324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    using System;
4324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    using Antlr.Runtime;
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    using Antlr.Runtime.Tree;
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    internal class Program
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    {
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        private static void _Main(string[] args)
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        {
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // input "x = 2*(3+3)"
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            ICharStream input;
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (args.Length > 0)
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if (args[0].Equals("-i"))
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    if (args.Length > 1)
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    {
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        input = new ANTLRFileStream(args[1]);
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    else
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    {
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        throw new Exception("No input file specified.");
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                else
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                {
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    input = new ANTLRStringStream(args[0]);
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            else
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            {
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                input = new ANTLRInputStream(Console.OpenStandardInput());
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var lex = new VecMathLexer(input);
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var tokens = new CommonTokenStream(lex);
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var g = new VecMathParser(tokens);
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            IAstRuleReturnScope<CommonTree> r = g.prog();
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            CommonTree t = r.Tree;
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            Console.WriteLine("Original tree:   " + t.ToStringTree());
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var simplify = new Simplify(new CommonTreeNodeStream(t));
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            t = (CommonTree)simplify.Downup(t);
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var reduce = new Reduce(new CommonTreeNodeStream(t));
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            t = (CommonTree)reduce.Downup(t);
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            Console.WriteLine("Simplified tree: " + t.ToStringTree());
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            Console.ReadKey();
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
55