-
Notifications
You must be signed in to change notification settings - Fork 17
/
index.html
536 lines (489 loc) · 27.3 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>CPython Compilers</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
<!-- Le styles -->
<link href="css/bootstrap-2.1.0.min.css" rel="stylesheet">
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
.sidebar-nav {
padding: 9px 0;
}
</style>
<link href="css/bootstrap-responsive-2.1.0.min.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<link rel="stylesheet" href="style.css" type="text/css" />
<link rel="shortcut icon" href="img/ico/favicon.ico">
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="img/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="img/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="img/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="img/ico/apple-touch-icon-57-precomposed.png">
</head>
<body>
<a href="https://github.com/pydata/compilers-webpage"><img style="position: fixed; top: 0; right: 0; border: 0; z-index: 1040" src="https://s3.amazonaws.com/github/ribbons/forkme_right_gray_6d6d6d.png" alt="Fork me on GitHub"></a>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="#">CPython</a>
<div class="nav-collapse">
<ul class="nav">
<li class="active"><a href="index.html">Packages</a></li>
<li><a href="research.html">Research</a></li>
<li><a href="resources.html">Resources</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<p><span class="center"></p>
<hr/>
<h1 id="cpython-compiler-tools">CPython Compiler Tools</h1>
<p><br/></p>
<div class="figure">
<img src="logo_med.png" />
</div>
<hr/>
<p></span></p>
<h1 id="parsers">Parsers</h1>
<h5 id="ply">Ply</h5>
<p>PLY is an implementation of lex and yacc parsing tools for Python.</p>
<ul>
<li><a href="http://dabeaz.com/ply">Website</a></li>
<li><a href="http://dabeaz.com/ply/ply.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LALR(1)</span>
</div>
<h5 id="pyparsing">PyParsing</h5>
<p>The pyparsing module is an alternative approach to creating and executing simple grammars, vs. the traditional lex/yacc approach, or the use of regular expressions. The pyparsing module provides a library of classes that client code uses to construct the grammar directly in Python code.</p>
<ul>
<li><a href="http://pyparsing.wikispaces.com/">Website</a></li>
<li><a href="http://pyparsing.wikispaces.com/Documentation">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LL(1)</span>
</div>
<h5 id="parsimonious">Parsimonious</h5>
<p>Parsimonious aims to be the fastest arbitrary-lookahead parser written in pure Python. It's based on parsing expression grammars (PEGs), which means you feed it a simplified sort of EBNF notation. Parsimonious was designed to undergird a MediaWiki parser that wouldn't take 5 seconds or a GB of RAM to do one page.</p>
<ul>
<li><a href="https://github.com/erikrose/parsimonious">Website</a></li>
<li><a href="https://github.com/erikrose/parsimonious">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">PEG</span>
</div>
<h5 id="funcparserlib">funcparserlib</h5>
<p>funcparserlib is a parser combinator library.</p>
<ul>
<li><a href="https://code.google.com/p/funcparserlib/">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LL(*)</span>
</div>
<h5 id="spark">Spark</h5>
<p>SPARK stands for the Scanning, Parsing, and Rewriting Kit. It formerly had no name, and was referred to as the "little language framework."</p>
<ul>
<li><a href="http://pages.cpsc.ucalgary.ca/~aycock/spark/">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Earley</span>
</div>
<h5 id="pgen2">pgen2</h5>
<p>pgen2 is a pure Python implementation of the Python parser generator, pgen. It forms the basis for <a href="https://github.com/mythonlang/mython">Mython</a>, the extensible variant of the Python programming language.</p>
<ul>
<li><a href="https://github.com/mythonlang/pgen2">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LL(1)</span>
</div>
<h5 id="pgenmodule.c">pgenmodule.c</h5>
<p>Much like the parser module exposes the Python parser, this pgenmodule.c exposes the parser generator used to create the Python parser, pgen, to Python iteslf. Proposed in PEP 269.</p>
<ul>
<li><a href="https://code.google.com/p/basil/source/browse/trunk/basil/parsing/pgenmodule.c">Website</a></li>
</ul>
<h5 id="antlr">ANTLR</h5>
<p>ANTLR is a Java parser generator framework that can emit Python parsers.</p>
<ul>
<li><a href="http://www.antlr.org/">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LL(1+)</span>
</div>
<h2 id="syntax-definition">Syntax Definition</h2>
<h5 id="asdl">ASDL</h5>
<p>The Zephyr Abstract Syntax Description Lanuguage (ASDL) is a language designed to describe the tree-like data structures in compilers. Its main goal is to provide a method for compiler components written in different languages to interoperate. ASDL makes it easier for applications written in a variety of programming languages to communicate complex recursive data structures.</p>
<ul>
<li><a href="http://asdl.sourceforge.net">Website</a></li>
</ul>
<h5 id="asdl_py">asdl_py</h5>
<ul>
<li><a href="https://github.com/luizribeiro/gython/blob/master/ast/asdl_py.py">Website</a></li>
</ul>
<h2 id="metaprogramming">Metaprogramming</h2>
<h5 id="mython">Mython</h5>
<p>Mython is an extensible variant of the Python programming language. Mython makes Python extensible by adding two things: parametric quotation statement, and compile-time metaprogramming. The parametric quote statement is simply syntactic sugar for saying "run some function on this embedded string". Compile-time metaprogramming allows you to evaluate that function on the embedded string at compile time. This gives you added choice, both in terms of what your code looks like, and when you want to evaluate that code.</p>
<ul>
<li><a href="http://www.mython.org">Website</a></li>
<li><a href="https://github.com/mythonlang/mython">Source</a></li>
</ul>
<h5 id="basil">Basil</h5>
<p>Basil is a metaprogramming framework and playground for Python variants.</p>
<ul>
<li><a href="https://code.google.com/p/basil/">Website</a></li>
</ul>
<h5 id="cog">Cog</h5>
<p>Cog is a Python source generation library. Cog transforms files in a very simple way: it finds chunks of Python code embedded in them, executes the Python code, and inserts its output back into the original file. The file can contain whatever text you like around the Python code.</p>
<ul>
<li><a href="http://nedbatchelder.com/code/cog/">Website</a></li>
</ul>
<h2 id="code-generation">Code Generation</h2>
<h5 id="llvmpy">LLVMPy</h5>
<p>llvmpy is a Python wrapper around the llvm C++ library which allows simple access to compiler tools.</p>
<ul>
<li><a href="http://www.llvmpy.org/">Website</a></li>
<li><a href="http://www.llvmpy.org/llvmpy-doc/0.10.2/index.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LLVM</span>
</div>
<h5 id="llvm-cbuilder">llvm-cbuilder</h5>
<p>llvm-cbuilder is a Python DSL for constructing higher level LLVM logic.</p>
<ul>
<li><a href="https://github.com/llvmpy/llvmpy/tree/master/llvm_cbuilder">Website</a></li>
<li><a href="https://github.com/llvmpy/llvmpy/blob/master/README_LLVM_CBUILDER.md">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">LLVM</span>
</div>
<h5 id="cgen">cgen</h5>
<p>C/C++ source generation from an AST for CUDA and OpenCL.</p>
<ul>
<li><a href="https://github.com/inducer/cgen">Website</a></li>
<li><a href="http://documen.tician.de/cgen/index.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">C</span> <span class="badge badge-success">C++</span>
</div>
<h5 id="codepy">CodePy</h5>
<p>CodePy is a C/C++ metaprogramming toolkit for Python. It handles two aspects of native-code metaprogramming, Generating C/C++ source code and Compiling this source code and dynamically loading it into the Python interpreter.</p>
<ul>
<li><a href="https://github.com/inducer/codepy">Website</a></li>
<li><a href="http://documen.tician.de/codepy/index.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">C</span> <span class="badge badge-success">C++</span>
</div>
<h2 id="compilers">Compilers</h2>
<h5 id="cython">Cython</h5>
<p>The Cython language is a superset of the Python language that additionally supports calling C functions and declaring C types on variables and class attributes. This allows the compiler to generate very efficient C code from Cython code. The C code is generated once and then compiles with all major C/C++ compilers.</p>
<ul>
<li><a href="http://www.cython.org">Website</a></li>
<li><a href="http://docs.cython.org">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C</span>
</div>
<h5 id="theano">Theano</h5>
<p>Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently and with transparent use of a GPU.</p>
<ul>
<li><a href="http://deeplearning.net/software/theano/">Website</a></li>
<li><a href="http://deeplearning.net/software/theano/#documentation">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C++</span> <span class="badge badge-success">Target: CUDA</span>
</div>
<h5 id="numba">Numba</h5>
<p>Numba is a NumPy aware dynamic compiler for Python. It creates LLVM bit-code from Python syntax and then creates a wrapper around that bitcode to call from Python.</p>
<ul>
<li><a href="http://numba.pydata.org/numba-doc/0.6/index.html">Website</a></li>
<li><a href="https://github.com/numba/numba">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: LLVM</span>
</div>
<h5 id="numbapro">NumbaPro</h5>
<p>NumbaPro is a proprietary Continuum Analytics product that compiles NumPy expressions to native code with support for parallel execution on multiple cores and GPU hardware. NumbaPro also comes with CUDA Python which supports CUDA programming with Python syntax.</p>
<ul>
<li><a href="https://store.continuum.io/cshop/numbapro">Website</a></li>
<li><a href="http://docs.continuum.io/numbapro/index.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: LLVM</span> <span class="badge badge-success">Target: CUDA PTX</span>
</div>
<h5 id="copperhead">Copperhead</h5>
<p>Copperhead is a project to bring data parallelism to Python. Copperhead defines a small functional, data parallel subset of Python, which is then dynamically compiled and executed on parallel platforms. Currently, Copperhead targets NVIDIA GPUs, as well as multicore CPUs through OpenMP and Threading Building Blocks (TBB).</p>
<ul>
<li><a href="http://copperhead.github.com/">Website</a></li>
<li><a href="http://copperhead.github.com/doc/index.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C++</span>
</div>
<h5 id="shedskin">Shedskin</h5>
<p>Shed Skin is an experimental compiler, that can translate pure, but implicitly statically typed Python programs into optimized C++. It can generate stand-alone programs or extension modules that can be imported and used in larger Python programs.</p>
<ul>
<li><a href="https://code.google.com/p/shedskin/">Website</a></li>
<li><a href="https://code.google.com/p/shedskin/wiki/docs">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C</span>
</div>
<h5 id="parakeet">Parakeet</h5>
<p>Parakeet is a runtime compiler for numerical Python. It creates specialized versions of a function for distinct input types and translates array expressions and NumPy library calls into data parallel operators. The current backend uses LLVM but GPU support is in the works.</p>
<ul>
<li><a href="https://github.com/iskandr/parakeet">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: LLVM</span>
</div>
<h5 id="llpython">LLPython</h5>
<p>The primary goal of the llpython package is to provide a Python dialect/subset that maps directly to LLVM code.</p>
<ul>
<li><a href="https://github.com/llvmpy/llvmpy/tree/master/llpython">Website</a></li>
<li><a href="http://www.llvmpy.org/llvmpy-doc/0.10.1/doc/llpython/index.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: LLVM</span>
</div>
<h5 id="nuitka">Nuitka</h5>
<p>Right now Nuitka is a good replacement for the Python interpreter and compiles every construct that CPython 2.6 and 2.7 offer. It translates the Python into a C++ program that then uses "libpython" to execute in the same way as CPython does, in a very compatible way.</p>
<ul>
<li><a href="http://nuitka.net/pages/overview.html">Website</a></li>
<li><a href="http://nuitka.net/doc/user-manual.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C++</span>
</div>
<h5 id="ocl">ocl</h5>
<p>ocl is a minimalist library that dynamically (at run time) converts decorated Python functions into C99, OpenCL, or JavaScript. In the C99 case, it also uses distutils to compile the functions to machine language and allow you to run the compiled ones instead of the interpreted ones. In the OpenCL case you can run the compiled ones using pyOpenCL.</p>
<ul>
<li><a href="https://github.com/mdipierro/ocl">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C</span> <span class="badge badge-success">Target: Javascript</span>
</div>
<h5 id="pythran">pythran</h5>
<p>Pythran is a python to c++ compiler for a subset of the python language. It takes a python module annotated with a few interface description and turns it into a native python module with the same interface, but (hopefully) faster.</p>
<ul>
<li><a href="http://pythonhosted.org/pythran/">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Target: C++11</span>
</div>
<h2 id="interpreters">Interpreters</h2>
<h5 id="mypy">MyPy</h5>
<p>The mypy programming language is an experimental Python variant that aims to combine the benefits of dynamic (or "duck") typing and static typing.</p>
<ul>
<li><a href="http://www.mypy-lang.org/">Website</a></li>
<li><a href="http://www.mypy-lang.org/overview.html">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">VM: Alore</span>
</div>
<h5 id="pypy">PyPy</h5>
<p>PyPy is a fast, compliant alternative implementation of the Python language supporting a variety of language extensions and code generation paths.</p>
<div class="block">
<span class="badge badge-success">VM: PyPy runtime</span>
</div>
<ul>
<li><a href="http://pypy.org/">Website</a></li>
</ul>
<h5 id="tinypy">tinypy</h5>
<p>TinyPy is a minimalist implementation of python in 64k of code.</p>
<ul>
<li><a href="https://code.google.com/p/tinypy/">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">VM: Custom</span>
</div>
<h2 id="vms">VMs</h2>
<h5 id="byterun">Byterun</h5>
<p>Byterun is a pure-Python implementation of a Python bytecode execution virtual machine.</p>
<ul>
<li><a href="https://github.com/nedbat/byterun">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Python</span>
</div>
<h5 id="falcon">falcon</h5>
<p>Falcon is an extension module for Python which implements a optimized, register machine based interpreter, inside of your interpreter.</p>
<ul>
<li><a href="https://github.com/rjpower/falcon">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">C++</span>
</div>
<h2 id="gpu-interfaces">GPU Interfaces</h2>
<h5 id="pyopencl">PyOpenCL</h5>
<p>PyOpenCL lets you access the OpenCL parallel computation API from Python</p>
<ul>
<li><a href="http://mathema.tician.de/software/pyopencl">Website</a></li>
<li><a href="http://documen.tician.de/pyopencl/">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">CUDA</span>
</div>
<h5 id="pycuda">PyCuda</h5>
<p>PyCUDA lets you access Nvidia‘s CUDA parallel computation API from Python.</p>
<ul>
<li><a href="http://mathema.tician.de/software/pycuda">Website</a></li>
<li><a href="http://documen.tician.de/pycuda/">Docs</a></li>
</ul>
<div class="block">
<span class="badge badge-success">OpenCL</span>
</div>
<h2 id="bytecode-utilities">Bytecode Utilities</h2>
<h5 id="bytecodeassembler">BytecodeAssembler</h5>
<p>BytecodeAssembler is a simple bytecode assembler module that handles most low-level bytecode generation details like jump offsets, stack size tracking, line number table generation, constant and variable name index tracking, etc. That way, you can focus your attention on the desired semantics of your bytecode instead of on these mechanical issues.</p>
<ul>
<li><a href="http://peak.telecommunity.com/DevCenter/BytecodeAssembler">Website</a></li>
<li><a href="http://peak.telecommunity.com/DevCenter/BytecodeAssembler#toc">Docs</a></li>
</ul>
<h5 id="byteplay">Byteplay</h5>
<p>Byteplay lets you convert Python code objects into equivalent objects which are easy to play with, and lets you convert those objects back into living Python code objects. It's useful for applying crazy transformations on Python functions, and is also useful in learning Python byte code intricacies.</p>
<ul>
<li><a href="https://code.google.com/p/byteplay/">Website</a></li>
<li><a href="http://wiki.python.org/moin/ByteplayDoc">Docs</a></li>
</ul>
<h5 id="unwind">Unwind</h5>
<p>Unwind provides a universal disassembler that is able to disassemble *.pyc files from both Python 2 and Python 3.</p>
<ul>
<li><a href="https://github.com/evanw/unwind">Website</a></li>
</ul>
<h5 id="maynard">Maynard</h5>
<p>Maynard is a Python bytecode dissasembler/assembler as well as a variety of utilities for working with python by</p>
<ul>
<li><a href="https://bitbucket.org/larry/maynard">Source</a></li>
</ul>
<h2 id="ast-utilities">AST Utilities</h2>
<h5 id="codegen.py">codegen.py</h5>
<p>codegen.py is a small script to translate Python AST to Python source.</p>
<ul>
<li><a href="http://eli.thegreenplace.net/wp-content/uploads/2009/11/codegen.py">Website</a></li>
</ul>
<h5 id="meta">Meta</h5>
<p>A Pure Python module containing a framework to manipulate and analyze python ast's and bytecode.</p>
<ul>
<li><a href="https://github.com/srossross/Meta">Website</a></li>
</ul>
<h5 id="astoptimizer">astoptimizer</h5>
<p>astoptimizer is an optimizer for Python code working on the Abstract Syntax Tree (AST, high-level representration). It does as much work as possible at compile time.</p>
<ul>
<li><a href="https://bitbucket.org/haypo/astoptimizer">Website</a></li>
</ul>
<h2 id="type-utilities">Type Utilities</h2>
<h5 id="rpython">RPython</h5>
<p>RPython is a restricted subset of Python that is amenable to static analysis. RPython is a core part of the PyPy compiler infastructure.</p>
<ul>
<li><a href="https://bitbucket.org/pypy/pypy">Website</a></li>
<li><a href="http://doc.pypy.org/en/latest/translation.html">Docs</a></li>
</ul>
<h5 id="python-typelanguage">python-typelanguage</h5>
<p>Python-typelanguage provides a type language for communicating about Python programs and values. Humans communicating to other humans, humans communicating to the computer, and even the computer communicating to humans (via type inference and run-time contract checking).</p>
<ul>
<li><a href="https://github.com/kennknowles/python-typelanguage">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Ad-hoc</span> <span class="badge badge-success">Local</span>
</div>
<h5 id="python-type-inference">python-type-inference</h5>
<p>Python-type-inference is a Hindley-Milner type inference engine for Python with an OCaml implementation.</p>
<ul>
<li><a href="https://code.google.com/p/python-type-inference/">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Hindley-Milner</span> <span class="badge badge-success">Global</span> <span class="badge badge-success">Local</span>
</div>
<h5 id="starkiller">starkiller</h5>
<h2 id="optimization-and-rewriting">Optimization and Rewriting</h2>
<h5 id="pyrewrite">PyRewrite</h5>
<p>Pyrewrite aims to be a small term rewrite library written in pure Python, it is heavily inspired by the StrategoXT project and intended for rewriting ATerm like expression grammars.</p>
<ul>
<li><a href="https://github.com/ContinuumIO/pyrewrite">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Strategic Combinators</span>
</div>
<h5 id="strategies">strategies</h5>
<p>Strategies is a library for control flow programming with higher order functions that loosely resembles the Stratego language.</p>
<ul>
<li><a href="https://github.com/logpy/strategies">Website</a></li>
</ul>
<div class="block">
<span class="badge badge-success">Strategic Combinators</span>
</div>
<h2 id="control-flow">Control Flow</h2>
<p>LLPython has 0-CFA analysis for a subset of Python bytecode.</p>
<div class="block">
<span class="badge badge-success">0-CFA</span>
</div>
<ul>
<li><a href="https://github.com/llvmpy/llvmpy/blob/master/llpython/byte_control.py#L13">Website</a></li>
</ul>
<h2 id="static-analysis">Static Analysis</h2>
<h5 id="pylint">PyLint</h5>
<p>Pylint is a Python static checker.</p>
<ul>
<li><a href="https://pypi.python.org/pypi/pylint">Website</a></li>
</ul>
<h2 id="language-tools">Language Tools</h2>
<h5 id="bitey">bitey</h5>
<p>Bitey is a LLVM import tool and ctypes wrapper.</p>
<ul>
<li><a href="https://github.com/dabeaz/bitey">Website</a></li>
</ul>
<h5 id="nobitey">nobitey</h5>
<p>nobitey is a tool to load LLVM compiled bitcode and autogenerate a ctypes binding.</p>
<ul>
<li><a href="https://github.com/llvmpy/llvmpy/blob/master/llpython/nobitey.py">Website</a></li>
</ul>
<h5 id="pycparser">PyCParser</h5>
<p>PyCParser is a C99 compatable parser written in pure Python, capable of parsing C source files and C header files.</p>
<ul>
<li><a href="http://pypi.python.org/pypi/pycparser">Website</a></li>
</ul>
<h5 id="six">Six</h5>
<p>Six is a Python 2-3 compatability layer that offers a variety of compatability mappings for language level features including AST ,parsing, and bytecode.</p>
<ul>
<li><a href="http://pythonhosted.org/six/#syntax-compatibility">Website</a></li>
</ul>
<h2 id="other-language-implementations">Other Language Implementations</h2>
<hr/>
<h5 id="lispy">Lispy</h5>
<p>Lispy is a Scheme Interpreter in Python</p>
<ul>
<li><a href="http://norvig.com/lispy.html">Website</a></li>
</ul>
<h5 id="bob-scheme">Bob Scheme</h5>
<p>Bob is a suite of implementations of the Scheme language in Python.</p>
<ul>
<li><a href="https://code.google.com/p/bobscheme/">Website</a></li>
</ul>
<h5 id="mini-c">Mini-C</h5>
<p>Mini-C is a compiler for a subset of the C programming language written in Python.</p>
<ul>
<li><a href="http://people.cs.uchicago.edu/~varmaa/mini_c/">Website</a></li>
</ul>
<h5 id="retroforth">Retroforth</h5>
<p>Retro is a concatenative, stack based language with roots in Forth</p>
<ul>
<li><a href="https://code.google.com/p/retro-language/source/browse/vm/complete/retro.py">Website</a></li>
</ul>
</div>
<script type="text/javascript" src="js/lib/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="js/lib/bootstrap-2.1.0.min.js"></script>
</body>
</html>