Upload
eldora
View
36
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
Mitchell McMullenPaul Nguyen
SWAN
• 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)
Overview
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.
AstMethods• Big collection of Method signatures, used
for reflection/indirection to PythonOps.
ConnectionStatement (Nonquery)Expression (Query)
AstMethods
PythonOps• Pretty much another layer of indirection,
and a repository for some helper functions.
ConnectionStatement (Nonquery)Expression (Query)
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.
PySwanSqlRunnerConnectionStatement (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!
Questions?