Err, ummm, ... Are you perhaps trying to reinvent Resolver 1 -- a spreadsheet written in Python? Maybe I misunderstand what you are trying to do, but you may want to look at it, unless you cannot use a commercial product. On Mar 1, 2012 7:58 PM, "Curt Hagenlocher" <c...@hagenlocher.org> wrote:
> I would argue that this is a bad idea. How Python-compatible do you want > this simple Excel-like language to be? If it's really just a small subset > of the full Python language, you may be better off writing a simple parser > that emits Python text as its back end and prevents the users from doing > anything more complicated. This should not be significantly more complex > than what you propose to do. If you really want to offer the full power of > the Python language, then you should consider whether you are doing your > users a disservice by teaching them a language that's almost the same as > Python, but different in just one minor and hard-to-debug respect. > > On Thu, Mar 1, 2012 at 12:31 PM, Tuomas Utrecht > <tuomas.utre...@gmail.com>wrote: > >> Hello, >> >> I apologize if this has been answered elsewhere, but I am unable to find >> anything up to date, or that covers my question in particular. >> >> The short version is: Can I modify the AST of a parsed file before >> compiling/executing in an embedded context? I want to allow simple, >> Excel-like statements to be executed from a .NET application. One major >> hitch is that Excel uses ^ for power whereas Python uses **. Ideally, I >> would be able to catch calls to ^ and replace with ** at compile time. >> >> If this is just not possible without rebuilding IronPython, do let me >> know. >> >> I have gotten as far as the below, although the BinaryExpression node's >> Operator is only gettable. I also am unsure how to take an AST and compile >> it, or if that is even public/allowed. >> >> var engine = Python.CreateEngine(); >> var s = >> HostingHelpers.GetSourceUnit(engine.CreateScriptSourceFromString("3^4")); >> var cc = new CompilerContext(s, new PythonCompilerOptions(), >> ErrorSink.Default); >> var p = Parser.CreateParser(cc, new PythonOptions()); >> PythonAst ast = p.ParseFile(false); >> >> // I originally tried this with a PythonWalker, but this is more >> succinct for the purpose of this example >> SuiteStatement body = (SuiteStatement)ast.Body; >> ExpressionStatement st = (ExpressionStatement)body.Statements[0]; >> BinaryExpression exp = (BinaryExpression) st.Expression; >> //exp.Operator = PythonOperator.Power; // Were it only so easy... >> >> >> Thanks for reading! >> >> _______________________________________________ >> Ironpython-users mailing list >> Ironpython-users@python.org >> http://mail.python.org/mailman/listinfo/ironpython-users >> >> > > _______________________________________________ > Ironpython-users mailing list > Ironpython-users@python.org > http://mail.python.org/mailman/listinfo/ironpython-users > >
_______________________________________________ Ironpython-users mailing list Ironpython-users@python.org http://mail.python.org/mailman/listinfo/ironpython-users