[Haskell-cafe] Announce: language-python

Bernie Pope bjpop at csse.unimelb.edu.au
Wed Mar 18 22:49:37 EDT 2009


Language-python provides a parser (and lexer) for Python written in  
Haskell. Currently it only supports version 3 of Python (the most  
recent version), but it will support version 2 in the future.

The parser is implemented using Happy, and the lexer is implemented  
using Alex.

Web page: http://projects.haskell.org/language-python/

Hackage: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/language-python

Darcs: darcs get http://code.haskell.org/language-python/

Example:
$ ghci
Prelude> :m Language.Python.Version3.Parser
Prelude Language.Python.Version3.Parser> parseModule "def inc(x):  
return x + 1\n" []
Right (Module [Fun {fun_name = Ident "inc", fun_args = [Param  
{param_name = Ident "x", param_annotation = Nothing, param_default =  
Nothing}], fun_result_annotation = Nothing, fun_body = [Return  
{return_expr = Just (BinaryOp {operator = Plus, left_op_arg = Var  
(Ident "x"), right_op_arg = Int 1})}]}])

Prelude Language.Python.Version3.Parser> :m  
Language.Python.Version3.Lexer
Prelude Language.Python.Version3.Lexer> lexOneToken "def inc(x):  
return x + 1\n" []
Right (Def (Sloc {sloc_filename = "", sloc_row = 1, sloc_column =  
1})," inc(x): return x + 1\n")

This is the first release of the package (version 0.1.1) and there is  
still much to be improved, in particular:
    - Unicode support is incomplete.
    - Source locations are sub-optimal, and will eventually become  
source spans.
    - The pretty printer needs polish.
    - The parser only supports version 3 of Python. Support for  
Version 2 is a major goal, and should be straightforward.
    - Only minimal performance tuning and correctness testing has been  
performed. Version 0.1.1 is not intended for production use.

Cheers,
Bernie.


More information about the Haskell-Cafe mailing list