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.0.0.tar.gz
$ tar xjf ptk-1.0.0.tar.bz2; cd ptk-1.0.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.

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.0.0.tar.gz (231.9 kB view details)

Uploaded Source

File details

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

File metadata

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

File hashes

Hashes for ptk-1.0.0.tar.gz
Algorithm Hash digest
SHA256 15435bd0f3d23b1c8e721e811563f3a93ac6cf7faf9696239afaba4583645a0f
MD5 ab710d4ac464b86760c1d62d7dc41d3d
BLAKE2b-256 893a16403476682aa97ce63f63bce961456e8209ef71510c18f5916cc4a3494e

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