55 lines
1.6 KiB
C#
55 lines
1.6 KiB
C#
namespace Antlr3.Runtime.Test.Composition
|
|
{
|
|
using System;
|
|
using Antlr.Runtime;
|
|
using Antlr.Runtime.Tree;
|
|
|
|
internal class Program
|
|
{
|
|
private static void _Main(string[] args)
|
|
{
|
|
// input "x = 2*(3+3)"
|
|
|
|
ICharStream input;
|
|
if (args.Length > 0)
|
|
{
|
|
if (args[0].Equals("-i"))
|
|
{
|
|
if (args.Length > 1)
|
|
{
|
|
input = new ANTLRFileStream(args[1]);
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("No input file specified.");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
input = new ANTLRStringStream(args[0]);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
input = new ANTLRInputStream(Console.OpenStandardInput());
|
|
}
|
|
|
|
var lex = new VecMathLexer(input);
|
|
var tokens = new CommonTokenStream(lex);
|
|
var g = new VecMathParser(tokens);
|
|
IAstRuleReturnScope<CommonTree> r = g.prog();
|
|
CommonTree t = r.Tree;
|
|
Console.WriteLine("Original tree: " + t.ToStringTree());
|
|
|
|
var simplify = new Simplify(new CommonTreeNodeStream(t));
|
|
t = (CommonTree)simplify.Downup(t);
|
|
|
|
var reduce = new Reduce(new CommonTreeNodeStream(t));
|
|
t = (CommonTree)reduce.Downup(t);
|
|
|
|
Console.WriteLine("Simplified tree: " + t.ToStringTree());
|
|
Console.ReadKey();
|
|
}
|
|
}
|
|
}
|