[Ironpython-users] Modifying ASTs when embedding IronPython
Tuomas Utrecht
tuomas.utrecht at gmail.com
Thu Mar 1 21:31:39 CET 2012
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!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20120301/a1b214e7/attachment.html>
More information about the Ironpython-users
mailing list