| Version 1.3 |
| ------------------------------ |
| 12/10/02: jmdyck |
| Various minor adjustments to the code that Dave checked in today. |
| Updated test/yacc_{inf,unused}.exp to reflect today's changes. |
| |
| 12/10/02: beazley |
| Incorporated a variety of minor bug fixes to empty production |
| handling and infinite recursion checking. Contributed by |
| Michael Dyck. |
| |
| 12/10/02: beazley |
| Removed bogus recover() method call in yacc.restart() |
| |
| Version 1.2 |
| ------------------------------ |
| 11/27/02: beazley |
| Lexer and parser objects are now available as an attribute |
| of tokens and slices respectively. For example: |
| |
| def t_NUMBER(t): |
| r'\d+' |
| print t.lexer |
| |
| def p_expr_plus(t): |
| 'expr: expr PLUS expr' |
| print t.lexer |
| print t.parser |
| |
| This can be used for state management (if needed). |
| |
| 10/31/02: beazley |
| Modified yacc.py to work with Python optimize mode. To make |
| this work, you need to use |
| |
| yacc.yacc(optimize=1) |
| |
| Furthermore, you need to first run Python in normal mode |
| to generate the necessary parsetab.py files. After that, |
| you can use python -O or python -OO. |
| |
| Note: optimized mode turns off a lot of error checking. |
| Only use when you are sure that your grammar is working. |
| Make sure parsetab.py is up to date! |
| |
| 10/30/02: beazley |
| Added cloning of Lexer objects. For example: |
| |
| import copy |
| l = lex.lex() |
| lc = copy.copy(l) |
| |
| l.input("Some text") |
| lc.input("Some other text") |
| ... |
| |
| This might be useful if the same "lexer" is meant to |
| be used in different contexts---or if multiple lexers |
| are running concurrently. |
| |
| 10/30/02: beazley |
| Fixed subtle bug with first set computation and empty productions. |
| Patch submitted by Michael Dyck. |
| |
| 10/30/02: beazley |
| Fixed error messages to use "filename:line: message" instead |
| of "filename:line. message". This makes error reporting more |
| friendly to emacs. Patch submitted by François Pinard. |
| |
| 10/30/02: beazley |
| Improvements to parser.out file. Terminals and nonterminals |
| are sorted instead of being printed in random order. |
| Patch submitted by François Pinard. |
| |
| 10/30/02: beazley |
| Improvements to parser.out file output. Rules are now printed |
| in a way that's easier to understand. Contributed by Russ Cox. |
| |
| 10/30/02: beazley |
| Added 'nonassoc' associativity support. This can be used |
| to disable the chaining of operators like a < b < c. |
| To use, simply specify 'nonassoc' in the precedence table |
| |
| precedence = ( |
| ('nonassoc', 'LESSTHAN', 'GREATERTHAN'), # Nonassociative operators |
| ('left', 'PLUS', 'MINUS'), |
| ('left', 'TIMES', 'DIVIDE'), |
| ('right', 'UMINUS'), # Unary minus operator |
| ) |
| |
| Patch contributed by Russ Cox. |
| |
| 10/30/02: beazley |
| Modified the lexer to provide optional support for Python -O and -OO |
| modes. To make this work, Python *first* needs to be run in |
| unoptimized mode. This reads the lexing information and creates a |
| file "lextab.py". Then, run lex like this: |
| |
| # module foo.py |
| ... |
| ... |
| lex.lex(optimize=1) |
| |
| Once the lextab file has been created, subsequent calls to |
| lex.lex() will read data from the lextab file instead of using |
| introspection. In optimized mode (-O, -OO) everything should |
| work normally despite the loss of doc strings. |
| |
| To change the name of the file 'lextab.py' use the following: |
| |
| lex.lex(lextab="footab") |
| |
| (this creates a file footab.py) |
| |
| |
| Version 1.1 October 25, 2001 |
| ------------------------------ |
| |
| 10/25/01: beazley |
| Modified the table generator to produce much more compact data. |
| This should greatly reduce the size of the parsetab.py[c] file. |
| Caveat: the tables still need to be constructed so a little more |
| work is done in parsetab on import. |
| |
| 10/25/01: beazley |
| There may be a possible bug in the cycle detector that reports errors |
| about infinite recursion. I'm having a little trouble tracking it |
| down, but if you get this problem, you can disable the cycle |
| detector as follows: |
| |
| yacc.yacc(check_recursion = 0) |
| |
| 10/25/01: beazley |
| Fixed a bug in lex.py that sometimes caused illegal characters to be |
| reported incorrectly. Reported by Sverre Jørgensen. |
| |
| 7/8/01 : beazley |
| Added a reference to the underlying lexer object when tokens are handled by |
| functions. The lexer is available as the 'lexer' attribute. This |
| was added to provide better lexing support for languages such as Fortran |
| where certain types of tokens can't be conveniently expressed as regular |
| expressions (and where the tokenizing function may want to perform a |
| little backtracking). Suggested by Pearu Peterson. |
| |
| 6/20/01 : beazley |
| Modified yacc() function so that an optional starting symbol can be specified. |
| For example: |
| |
| yacc.yacc(start="statement") |
| |
| Normally yacc always treats the first production rule as the starting symbol. |
| However, if you are debugging your grammar it may be useful to specify |
| an alternative starting symbol. Idea suggested by Rich Salz. |
| |
| Version 1.0 June 18, 2001 |
| -------------------------- |
| Initial public offering |
| |