ANN: Pyacc 0.1 -- Python Yacc Parser

Brian Sabbey sabbey@u.washington.edu
Thu, 30 Jan 2003 22:34:29 -0800 (PST)


Pyacc is a Python interface/extension to the Berkeley Yacc parser
generator. Pyacc reads a grammar, specified with Python documentation
strings (similar to SPARK and PLY), and uses Yacc to produce the LALR(1)
parsing tables. Unlike Yacc, Pyacc does not generate C code for a parser.
Instead, the parser is built into the Pyacc Python module, and no C
compilation is required to create a parser for a new grammar.

I created Pyacc because I wanted a Python parser that:

    * can efficiently parse LALR(1) grammars.
    * allows strings and regular expressions to be embedded directly into the grammar rules.
    * uses function documentation strings to specify grammar rules.
    * is (I imagine) very fast, since most of it is just yacc.
    * does not produce code that needs to be run or compiled.

A simple example:

from pyacc import Parser

def add(t):
    'exp : exp "+" exp'    # literals are put directly into grammar rules
    return t[0] + t[2]

def number(t):
    r'exp : re"\d+" '     # regular expressions are preceded by 're'
    return int(t[0])

print Parser().parse("2+3+4")

==> 9

Pyacc can be obtained from
<a href="http://staff.washington.edu/sabbey/pyacc">http://staff.washington.edu/sabbey/pyacc</a>