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

Reply via email to