public static void Main(string[] args) { ICharStream input; if (args.Length > 0) { input = new ANTLRFileStream(args[0]); } else { input = new ANTLRReaderStream(Console.In); } // BUILD AST PolyLexer lex = new PolyLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); PolyParser parser = new PolyParser(tokens); PolyParser.poly_return r = parser.poly(); Console.Out.WriteLine("tree=" + ((ITree)r.Tree).ToStringTree()); // DIFFERENTIATE CommonTreeNodeStream nodes = new CommonTreeNodeStream(r.Tree); nodes.TokenStream = tokens; PolyDifferentiator differ = new PolyDifferentiator(nodes); PolyDifferentiator.poly_return r2 = differ.poly(); Console.Out.WriteLine("d/dx=" + ((ITree)r2.Tree).ToStringTree()); // SIMPLIFY / NORMALIZE nodes = new CommonTreeNodeStream(r2.Tree); nodes.TokenStream = tokens; Simplifier reducer = new Simplifier(nodes); Simplifier.poly_return r3 = reducer.poly(); Console.Out.WriteLine("simplified=" + ((ITree)r3.Tree).ToStringTree()); // CONVERT BACK TO POLYNOMIAL nodes = new CommonTreeNodeStream(r3.Tree); nodes.TokenStream = tokens; PolyPrinter printer = new PolyPrinter(nodes); PolyPrinter.poly_return r4 = printer.poly(); Console.Out.WriteLine(r4.ST); }
public static void Main(string[] args) { ICharStream input; if ( args.Length>0 ) { input = new ANTLRFileStream(args[0]); } else { input = new ANTLRReaderStream(Console.In); } // BUILD AST PolyLexer lex = new PolyLexer(input); CommonTokenStream tokens = new CommonTokenStream(lex); PolyParser parser = new PolyParser(tokens); PolyParser.poly_return r = parser.poly(); Console.Out.WriteLine("tree="+((ITree)r.Tree).ToStringTree()); // DIFFERENTIATE CommonTreeNodeStream nodes = new CommonTreeNodeStream(r.Tree); nodes.TokenStream = tokens; PolyDifferentiator differ = new PolyDifferentiator(nodes); PolyDifferentiator.poly_return r2 = differ.poly(); Console.Out.WriteLine("d/dx="+((ITree) r2.Tree).ToStringTree()); // SIMPLIFY / NORMALIZE nodes = new CommonTreeNodeStream(r2.Tree); nodes.TokenStream = tokens; Simplifier reducer = new Simplifier(nodes); Simplifier.poly_return r3 = reducer.poly(); Console.Out.WriteLine("simplified="+((ITree) r3.Tree).ToStringTree()); // CONVERT BACK TO POLYNOMIAL nodes = new CommonTreeNodeStream(r3.Tree); nodes.TokenStream = tokens; PolyPrinter printer = new PolyPrinter(nodes); PolyPrinter.poly_return r4 = printer.poly(); Console.Out.WriteLine(r4.ST); }
private void ViewAST_Click(object sender, Win.RoutedEventArgs e) { TabItem tab = (TabItem)TabsNav.SelectedItem; if (tab != null) { string code = ((ICSharpCode.AvalonEdit.TextEditor)tab.Content).Text; PolyParser parser = new PolyParser(code); CodeTree tree = parser.ParseCode(); if (tree == null) { try { new ErrorsViewer(new PolyToolkit.Debug.PolyLog(parser.Log, parser.LexLog)).ShowDialog(); } catch { } } else { new SyntaxTreeViewer(tree).ShowDialog(); } } }