python4ply
python4ply is a Python parser for the Python language. The grammar definition uses PLY, a parser system for Python modelled on yacc/lex. The parser rules use the "compiler" module from the standard library to build a Python AST and to generate byte code for .pyc file.
You might use python4ply to experiment with variations in the Python language. The PLY-based lexer and parser are much easier to change than the C implementation Python itself uses or even the ones written in Python which are part of the standard library. This tutorial walks through examples of how to make changes in different levels of the system
To give you an idea of what it can do, here are some examples from the tutorial:
# integers with optional underscores separators amount = 20_000_000 print "You owe me", amount, "dollars"
# sytax-level support for decimals % cat div.py # div.py print "float", 1.0 % 0.1 print "decimal", 0d1.0 % 0d0.1 % python compile.py -e div.py float 0.1 decimal 0.0 %
# Perl-like regex creation and match operator for line in open("python_yacc.py"): if line =~ m/def (?P<name>\w+) *(?P<args>\(.*\)) *:/: print repr($1), repr($args)
Links
- Download python4ply-1.0.tar.gz
- Leave and read public comments
- Read the tutorial
- What is python4ply?
- Reminiscing, fabrications, and warnings
- Getting started
- Numbers like 1_000_000 - changing the lexer
- Numbers expressed in binary
- Syntax support for decimal numbers
- Creating regular expression pattern objects
- Adding a match operator
- Accessing matched groups via $1 and $name variables
- Checking assert clauses
- Code coverage
- Which lines aren't covered?
- Other things
License
(This is the MIT License with the serial numbers scratched off and my name written in in crayon. I would prefer "share and enjoy" but apparently that isn't a legally acceptable.) Copyright (c) 2008 Andrew DalkeDalke Scientific Software, AB Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
See Also
EasyExtend - "a system for creating extension languages for Python"
Copyright © 2001-2020 Andrew Dalke Scientific AB