150 likes | 258 Views
SWAN. Mitchell McMullen Paul Nguyen. Python written entirely in C #. Can access all .NET libraries and Silverlight. Created by the same guy as Jython . No design documentation or developer’s guide for source code =( . IronPySwan. Added Oracle Database Connectivity.
E N D
SWAN Mitchell McMullen Paul Nguyen
Python written entirely in C#. • Can access all .NET libraries and Silverlight. • Created by the same guy as Jython. • No design documentation or developer’s guide for source code =(
IronPySwan • Added Oracle Database Connectivity. • Embedded SQL commands/queries. • Allows arbitrary python expressions within SQL commands/queries. (Using back ticks)
Tokenizer • Breaks up the source code into tokens. • IronPython uses a mostly hand-written tokenizer and parser. • Some token recognition code is auto-generated. MAKECONNECT _________________ ______________ INSERT
Parser • Identifies tokens as they come in. • Implements the Python (BNF) grammar directly. • Constructs the Python AST.
MSAstNode Declaration • This is where a statement/expression is turned into a node fit for the AST. • The statement/expression’s Reduce() method is called, which returns a simpler node. • Typically, reduce() links to implementation code.
Connection AstMethods Statement (Nonquery) Expression (Query) • Big collection of Method signatures, used for reflection/indirection to PythonOps. AstMethods
Connection PythonOps Statement (Nonquery) Expression (Query) • Pretty much another layer of indirection, and a repository for some helper functions.
Runtime Behavior • This is the implementation-ey kind of stuff. In the end, this is where the heavy lifting for each method call is located. • We have one class, PySwanSqlRunner, which houses the connection and passes the final SQL strings on to the database. • These methods are executed by the interpreter.
Connection PySwanSqlRunner Statement (Nonquery) Expression (Query)
Stuff That Still Really Needs Work • Error handling is pretty primitive. • No RDF. (Sorry, Dr. Cannata!!) • SQL must be well-formed.
Programming Language Terms • Terminal/Nonterminal (Tokenizer.cs). • Abstract Syntax Tree (Parser.cs). • Parse tree is implicitly built. (Parser.cs) • Python.g BNF is implemented directly (Parser.cs • Some SQL involved.
Demonstration • Hope you enjoy!