Skip to main content

LR(1) parsing framework for Python

Project description

PTK - (c) Jérôme Laheurte 2015

What is PTK ?

PTK is a LR(1) parser “generator” for Python. It is not actually a “generator” in the sense that it doesn’t output source code, using Python’s dynamic nature to build everything it needs at runtime instead.

This code is licensed under the GNU LGPL version 3.

Supported platforms

All unit tests pass on the following platforms/Python version:

Linux

OSX

Windows

2.7

X

X

X

3.2

X

X

3.3

X

3.4

X

3.5

X

See the Buildbot for details.

Although Python 2.6 is not officially supported, it does work with a few minor code modifications, namely replacing functools.total_ordering with the backport to 2.6.

Installation

Using pip:

$ pip install -U ptk

From source:

$ wget https://pypi.python.org/packages/source/p/ptk/ptk-1.1.0.tar.gz
$ tar xjf ptk-1.1.0.tar.bz2; cd ptk-1.1.0
$ sudo python ./setup.py install

Sample usage

Four-operations integer calculator:

from ptk.parser import LRParser, production, leftAssoc
from ptk.lexer import ReLexer, token
import operator, six

@leftAssoc('+', '-')
@rightAssoc('*', '/')
class Parser(LRParser, ReLexer):
    @token('[1-9][0-9]*')
    def number(self, tok):
        tok.value = int(tok.value)
    @production('E -> number<n>')
    def litteral(self, n):
        return n
    @production('E -> "-" E<val>', priority='*')
    def minus(self, val):
        return -val
    @production('E -> "(" E<val> ")"')
    def paren(self, val):
        return val
    @production('E -> E<left> "+"<op> E<right>')
    @production('E -> E<left> "-"<op> E<right>')
    @production('E -> E<left> "*"<op> E<right>')
    @production('E -> E<left> "/"<op> E<right>')
    def binaryop(self, left, op, right):
        return {
            '+': operator.add,
            '-': operator.sub,
            '*': operator.mul,
            '/': operator.floordiv
            }[op](left, right)

parser = Parser()
while True:
    expr = six.moves.input('> ')
    print parser.parse(expr)

Code samples

The samples subdirectory in the source tree contains the aforementioned calculator and a script that generates a skeleton Python file from a Yacc or Bison grammar file.

API documentation

The full documentation is hosted here.

Changelog

Version 1.1.0:

  • Added repeat operators (‘*’, ‘+’, ‘?’) in production syntax.

  • Support for more yacc/bison declarations in yacc2py sample (most are actually ignored)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ptk-1.1.0.tar.gz (232.4 kB view details)

Uploaded Source

File details

Details for the file ptk-1.1.0.tar.gz.

File metadata

  • Download URL: ptk-1.1.0.tar.gz
  • Upload date:
  • Size: 232.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ptk-1.1.0.tar.gz
Algorithm Hash digest
SHA256 37b96439b5ecd72abd4e04cadb7169437ada34a9b3d9ef04b94be779ff5851c4
MD5 097690fb95824ff94ba2d9154e435970
BLAKE2b-256 54a3496491f22df3ae8584ffc49b7c6be9bd6147695a27b89448efc942a411d3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page