annotate ply-3.8/CHANGES @ 7910:7d5f1c5e44b1

<moon__> mkx bin/hfs//erro You have discovered an eerie caven. The air above the dark stone floor is alive with vorices of purple light and dark, boiling clouds. Seemingly bottomless glowing pit mark the surface.
author HackBot
date Sat, 07 May 2016 00:41:47 +0000
parents 343ff337a19b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7267
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1 Version 3.8
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
2 ---------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
3 10/02/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
4 Fixed issues related to Python 3.5. Patch contributed by Barry Warsaw.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
5
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
6 Version 3.7
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
7 ---------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
8 08/25/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
9 Fixed problems when reading table files from pickled data.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
10
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
11 05/07/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
12 Fixed regression in handling of table modules if specified as module
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
13 objects. See https://github.com/dabeaz/ply/issues/63
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
14
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
15 Version 3.6
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
16 ---------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
17 04/25/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
18 If PLY is unable to create the 'parser.out' or 'parsetab.py' files due
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
19 to permission issues, it now just issues a warning message and
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
20 continues to operate. This could happen if a module using PLY
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
21 is installed in a funny way where tables have to be regenerated, but
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
22 for whatever reason, the user doesn't have write permission on
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
23 the directory where PLY wants to put them.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
24
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
25 04/24/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
26 Fixed some issues related to use of packages and table file
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
27 modules. Just to emphasize, PLY now generates its special
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
28 files such as 'parsetab.py' and 'lextab.py' in the *SAME*
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
29 directory as the source file that uses lex() and yacc().
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
30
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
31 If for some reason, you want to change the name of the table
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
32 module, use the tabmodule and lextab options:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
33
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
34 lexer = lex.lex(lextab='spamlextab')
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
35 parser = yacc.yacc(tabmodule='spamparsetab')
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
36
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
37 If you specify a simple name as shown, the module will still be
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
38 created in the same directory as the file invoking lex() or yacc().
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
39 If you want the table files to be placed into a different package,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
40 then give a fully qualified package name. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
41
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
42 lexer = lex.lex(lextab='pkgname.files.lextab')
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
43 parser = yacc.yacc(tabmodule='pkgname.files.parsetab')
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
44
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
45 For this to work, 'pkgname.files' must already exist as a valid
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
46 Python package (i.e., the directories must already exist and be
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
47 set up with the proper __init__.py files, etc.).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
48
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
49 Version 3.5
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
50 ---------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
51 04/21/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
52 Added support for defaulted_states in the parser. A
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
53 defaulted_state is a state where the only legal action is a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
54 reduction of a single grammar rule across all valid input
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
55 tokens. For such states, the rule is reduced and the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
56 reading of the next lookahead token is delayed until it is
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
57 actually needed at a later point in time.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
58
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
59 This delay in consuming the next lookahead token is a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
60 potentially important feature in advanced parsing
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
61 applications that require tight interaction between the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
62 lexer and the parser. For example, a grammar rule change
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
63 modify the lexer state upon reduction and have such changes
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
64 take effect before the next input token is read.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
65
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
66 *** POTENTIAL INCOMPATIBILITY ***
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
67 One potential danger of defaulted_states is that syntax
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
68 errors might be deferred to a a later point of processing
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
69 than where they were detected in past versions of PLY.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
70 Thus, it's possible that your error handling could change
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
71 slightly on the same inputs. defaulted_states do not change
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
72 the overall parsing of the input (i.e., the same grammar is
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
73 accepted).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
74
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
75 If for some reason, you need to disable defaulted states,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
76 you can do this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
77
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
78 parser = yacc.yacc()
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
79 parser.defaulted_states = {}
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
80
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
81 04/21/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
82 Fixed debug logging in the parser. It wasn't properly reporting goto states
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
83 on grammar rule reductions.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
84
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
85 04/20/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
86 Added actions to be defined to character literals (Issue #32). For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
87
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
88 literals = [ '{', '}' ]
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
89
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
90 def t_lbrace(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
91 r'\{'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
92 # Some action
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
93 t.type = '{'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
94 return t
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
95
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
96 def t_rbrace(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
97 r'\}'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
98 # Some action
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
99 t.type = '}'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
100 return t
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
101
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
102 04/19/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
103 Import of the 'parsetab.py' file is now constrained to only consider the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
104 directory specified by the outputdir argument to yacc(). If not supplied,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
105 the import will only consider the directory in which the grammar is defined.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
106 This should greatly reduce problems with the wrong parsetab.py file being
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
107 imported by mistake. For example, if it's found somewhere else on the path
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
108 by accident.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
109
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
110 *** POTENTIAL INCOMPATIBILITY *** It's possible that this might break some
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
111 packaging/deployment setup if PLY was instructed to place its parsetab.py
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
112 in a different location. You'll have to specify a proper outputdir= argument
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
113 to yacc() to fix this if needed.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
114
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
115 04/19/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
116 Changed default output directory to be the same as that in which the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
117 yacc grammar is defined. If your grammar is in a file 'calc.py',
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
118 then the parsetab.py and parser.out files should be generated in the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
119 same directory as that file. The destination directory can be changed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
120 using the outputdir= argument to yacc().
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
121
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
122 04/19/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
123 Changed the parsetab.py file signature slightly so that the parsetab won't
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
124 regenerate if created on a different major version of Python (ie., a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
125 parsetab created on Python 2 will work with Python 3).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
126
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
127 04/16/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
128 Fixed Issue #44 call_errorfunc() should return the result of errorfunc()
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
129
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
130 04/16/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
131 Support for versions of Python <2.7 is officially dropped. PLY may work, but
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
132 the unit tests requires Python 2.7 or newer.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
133
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
134 04/16/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
135 Fixed bug related to calling yacc(start=...). PLY wasn't regenerating the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
136 table file correctly for this case.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
137
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
138 04/16/15: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
139 Added skipped tests for PyPy and Java. Related to use of Python's -O option.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
140
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
141 05/29/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
142 Added filter to make unit tests pass under 'python -3'.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
143 Reported by Neil Muller.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
144
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
145 05/29/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
146 Fixed CPP_INTEGER regex in ply/cpp.py (Issue 21).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
147 Reported by @vbraun.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
148
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
149 05/29/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
150 Fixed yacc validation bugs when from __future__ import unicode_literals
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
151 is being used. Reported by Kenn Knowles.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
152
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
153 05/29/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
154 Added support for Travis-CI. Contributed by Kenn Knowles.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
155
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
156 05/29/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
157 Added a .gitignore file. Suggested by Kenn Knowles.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
158
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
159 05/29/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
160 Fixed validation problems for source files that include a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
161 different source code encoding specifier. Fix relies on
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
162 the inspect module. Should work on Python 2.6 and newer.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
163 Not sure about older versions of Python.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
164 Contributed by Michael Droettboom
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
165
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
166 05/21/13: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
167 Fixed unit tests for yacc to eliminate random failures due to dict hash value
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
168 randomization in Python 3.3
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
169 Reported by Arfrever
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
170
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
171 10/15/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
172 Fixed comment whitespace processing bugs in ply/cpp.py.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
173 Reported by Alexei Pososin.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
174
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
175 10/15/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
176 Fixed token names in ply/ctokens.py to match rule names.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
177 Reported by Alexei Pososin.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
178
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
179 04/26/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
180 Changes to functions available in panic mode error recover. In previous versions
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
181 of PLY, the following global functions were available for use in the p_error() rule:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
182
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
183 yacc.errok() # Reset error state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
184 yacc.token() # Get the next token
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
185 yacc.restart() # Reset the parsing stack
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
186
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
187 The use of global variables was problematic for code involving multiple parsers
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
188 and frankly was a poor design overall. These functions have been moved to methods
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
189 of the parser instance created by the yacc() function. You should write code like
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
190 this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
191
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
192 def p_error(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
193 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
194 parser.errok()
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
195
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
196 parser = yacc.yacc()
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
197
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
198 *** POTENTIAL INCOMPATIBILITY *** The original global functions now issue a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
199 DeprecationWarning.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
200
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
201 04/19/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
202 Fixed some problems with line and position tracking and the use of error
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
203 symbols. If you have a grammar rule involving an error rule like this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
204
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
205 def p_assignment_bad(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
206 '''assignment : location EQUALS error SEMI'''
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
207 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
208
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
209 You can now do line and position tracking on the error token. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
210
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
211 def p_assignment_bad(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
212 '''assignment : location EQUALS error SEMI'''
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
213 start_line = p.lineno(3)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
214 start_pos = p.lexpos(3)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
215
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
216 If the trackng=True option is supplied to parse(), you can additionally get
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
217 spans:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
218
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
219 def p_assignment_bad(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
220 '''assignment : location EQUALS error SEMI'''
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
221 start_line, end_line = p.linespan(3)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
222 start_pos, end_pos = p.lexspan(3)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
223
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
224 Note that error handling is still a hairy thing in PLY. This won't work
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
225 unless your lexer is providing accurate information. Please report bugs.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
226 Suggested by a bug reported by Davis Herring.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
227
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
228 04/18/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
229 Change to doc string handling in lex module. Regex patterns are now first
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
230 pulled from a function's .regex attribute. If that doesn't exist, then
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
231 .doc is checked as a fallback. The @TOKEN decorator now sets the .regex
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
232 attribute of a function instead of its doc string.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
233 Changed suggested by Kristoffer Ellersgaard Koch.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
234
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
235 04/18/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
236 Fixed issue #1: Fixed _tabversion. It should use __tabversion__ instead of __version__
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
237 Reported by Daniele Tricoli
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
238
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
239 04/18/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
240 Fixed issue #8: Literals empty list causes IndexError
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
241 Reported by Walter Nissen.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
242
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
243 04/18/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
244 Fixed issue #12: Typo in code snippet in documentation
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
245 Reported by florianschanda.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
246
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
247 04/18/12: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
248 Fixed issue #10: Correctly escape t_XOREQUAL pattern.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
249 Reported by Andy Kittner.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
250
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
251 Version 3.4
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
252 ---------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
253 02/17/11: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
254 Minor patch to make cpp.py compatible with Python 3. Note: This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
255 is an experimental file not currently used by the rest of PLY.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
256
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
257 02/17/11: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
258 Fixed setup.py trove classifiers to properly list PLY as
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
259 Python 3 compatible.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
260
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
261 01/02/11: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
262 Migration of repository to github.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
263
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
264 Version 3.3
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
265 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
266 08/25/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
267 Fixed issue 15 related to the set_lineno() method in yacc. Reported by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
268 mdsherry.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
269
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
270 08/25/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
271 Fixed a bug related to regular expression compilation flags not being
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
272 properly stored in lextab.py files created by the lexer when running
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
273 in optimize mode. Reported by Bruce Frederiksen.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
274
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
275
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
276 Version 3.2
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
277 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
278 03/24/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
279 Added an extra check to not print duplicated warning messages
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
280 about reduce/reduce conflicts.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
281
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
282 03/24/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
283 Switched PLY over to a BSD-license.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
284
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
285 03/23/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
286 Performance optimization. Discovered a few places to make
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
287 speedups in LR table generation.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
288
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
289 03/23/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
290 New warning message. PLY now warns about rules never
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
291 reduced due to reduce/reduce conflicts. Suggested by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
292 Bruce Frederiksen.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
293
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
294 03/23/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
295 Some clean-up of warning messages related to reduce/reduce errors.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
296
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
297 03/23/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
298 Added a new picklefile option to yacc() to write the parsing
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
299 tables to a filename using the pickle module. Here is how
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
300 it works:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
301
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
302 yacc(picklefile="parsetab.p")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
303
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
304 This option can be used if the normal parsetab.py file is
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
305 extremely large. For example, on jython, it is impossible
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
306 to read parsing tables if the parsetab.py exceeds a certain
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
307 threshold.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
308
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
309 The filename supplied to the picklefile option is opened
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
310 relative to the current working directory of the Python
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
311 interpreter. If you need to refer to the file elsewhere,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
312 you will need to supply an absolute or relative path.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
313
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
314 For maximum portability, the pickle file is written
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
315 using protocol 0.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
316
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
317 03/13/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
318 Fixed a bug in parser.out generation where the rule numbers
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
319 where off by one.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
320
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
321 03/13/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
322 Fixed a string formatting bug with one of the error messages.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
323 Reported by Richard Reitmeyer
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
324
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
325 Version 3.1
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
326 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
327 02/28/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
328 Fixed broken start argument to yacc(). PLY-3.0 broke this
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
329 feature by accident.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
330
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
331 02/28/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
332 Fixed debugging output. yacc() no longer reports shift/reduce
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
333 or reduce/reduce conflicts if debugging is turned off. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
334 restores similar behavior in PLY-2.5. Reported by Andrew Waters.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
335
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
336 Version 3.0
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
337 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
338 02/03/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
339 Fixed missing lexer attribute on certain tokens when
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
340 invoking the parser p_error() function. Reported by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
341 Bart Whiteley.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
342
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
343 02/02/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
344 The lex() command now does all error-reporting and diagonistics
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
345 using the logging module interface. Pass in a Logger object
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
346 using the errorlog parameter to specify a different logger.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
347
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
348 02/02/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
349 Refactored ply.lex to use a more object-oriented and organized
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
350 approach to collecting lexer information.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
351
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
352 02/01/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
353 Removed the nowarn option from lex(). All output is controlled
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
354 by passing in a logger object. Just pass in a logger with a high
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
355 level setting to suppress output. This argument was never
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
356 documented to begin with so hopefully no one was relying upon it.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
357
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
358 02/01/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
359 Discovered and removed a dead if-statement in the lexer. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
360 resulted in a 6-7% speedup in lexing when I tested it.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
361
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
362 01/13/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
363 Minor change to the procedure for signalling a syntax error in a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
364 production rule. A normal SyntaxError exception should be raised
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
365 instead of yacc.SyntaxError.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
366
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
367 01/13/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
368 Added a new method p.set_lineno(n,lineno) that can be used to set the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
369 line number of symbol n in grammar rules. This simplifies manual
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
370 tracking of line numbers.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
371
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
372 01/11/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
373 Vastly improved debugging support for yacc.parse(). Instead of passing
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
374 debug as an integer, you can supply a Logging object (see the logging
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
375 module). Messages will be generated at the ERROR, INFO, and DEBUG
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
376 logging levels, each level providing progressively more information.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
377 The debugging trace also shows states, grammar rule, values passed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
378 into grammar rules, and the result of each reduction.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
379
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
380 01/09/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
381 The yacc() command now does all error-reporting and diagnostics using
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
382 the interface of the logging module. Use the errorlog parameter to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
383 specify a logging object for error messages. Use the debuglog parameter
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
384 to specify a logging object for the 'parser.out' output.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
385
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
386 01/09/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
387 *HUGE* refactoring of the the ply.yacc() implementation. The high-level
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
388 user interface is backwards compatible, but the internals are completely
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
389 reorganized into classes. No more global variables. The internals
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
390 are also more extensible. For example, you can use the classes to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
391 construct a LALR(1) parser in an entirely different manner than
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
392 what is currently the case. Documentation is forthcoming.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
393
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
394 01/07/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
395 Various cleanup and refactoring of yacc internals.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
396
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
397 01/06/09: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
398 Fixed a bug with precedence assignment. yacc was assigning the precedence
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
399 each rule based on the left-most token, when in fact, it should have been
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
400 using the right-most token. Reported by Bruce Frederiksen.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
401
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
402 11/27/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
403 Numerous changes to support Python 3.0 including removal of deprecated
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
404 statements (e.g., has_key) and the additional of compatibility code
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
405 to emulate features from Python 2 that have been removed, but which
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
406 are needed. Fixed the unit testing suite to work with Python 3.0.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
407 The code should be backwards compatible with Python 2.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
408
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
409 11/26/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
410 Loosened the rules on what kind of objects can be passed in as the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
411 "module" parameter to lex() and yacc(). Previously, you could only use
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
412 a module or an instance. Now, PLY just uses dir() to get a list of
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
413 symbols on whatever the object is without regard for its type.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
414
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
415 11/26/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
416 Changed all except: statements to be compatible with Python2.x/3.x syntax.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
417
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
418 11/26/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
419 Changed all raise Exception, value statements to raise Exception(value) for
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
420 forward compatibility.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
421
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
422 11/26/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
423 Removed all print statements from lex and yacc, using sys.stdout and sys.stderr
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
424 directly. Preparation for Python 3.0 support.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
425
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
426 11/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
427 Fixed a bug with referring to symbols on the the parsing stack using negative
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
428 indices.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
429
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
430 05/29/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
431 Completely revamped the testing system to use the unittest module for everything.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
432 Added additional tests to cover new errors/warnings.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
433
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
434 Version 2.5
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
435 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
436 05/28/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
437 Fixed a bug with writing lex-tables in optimized mode and start states.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
438 Reported by Kevin Henry.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
439
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
440 Version 2.4
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
441 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
442 05/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
443 A version number is now embedded in the table file signature so that
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
444 yacc can more gracefully accomodate changes to the output format
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
445 in the future.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
446
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
447 05/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
448 Removed undocumented .pushback() method on grammar productions. I'm
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
449 not sure this ever worked and can't recall ever using it. Might have
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
450 been an abandoned idea that never really got fleshed out. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
451 feature was never described or tested so removing it is hopefully
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
452 harmless.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
453
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
454 05/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
455 Added extra error checking to yacc() to detect precedence rules defined
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
456 for undefined terminal symbols. This allows yacc() to detect a potential
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
457 problem that can be really tricky to debug if no warning message or error
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
458 message is generated about it.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
459
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
460 05/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
461 lex() now has an outputdir that can specify the output directory for
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
462 tables when running in optimize mode. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
463
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
464 lexer = lex.lex(optimize=True, lextab="ltab", outputdir="foo/bar")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
465
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
466 The behavior of specifying a table module and output directory are
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
467 more aligned with the behavior of yacc().
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
468
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
469 05/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
470 [Issue 9]
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
471 Fixed filename bug in when specifying the modulename in lex() and yacc().
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
472 If you specified options such as the following:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
473
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
474 parser = yacc.yacc(tabmodule="foo.bar.parsetab",outputdir="foo/bar")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
475
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
476 yacc would create a file "foo.bar.parsetab.py" in the given directory.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
477 Now, it simply generates a file "parsetab.py" in that directory.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
478 Bug reported by cptbinho.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
479
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
480 05/04/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
481 Slight modification to lex() and yacc() to allow their table files
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
482 to be loaded from a previously loaded module. This might make
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
483 it easier to load the parsing tables from a complicated package
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
484 structure. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
485
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
486 import foo.bar.spam.parsetab as parsetab
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
487 parser = yacc.yacc(tabmodule=parsetab)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
488
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
489 Note: lex and yacc will never regenerate the table file if used
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
490 in the form---you will get a warning message instead.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
491 This idea suggested by Brian Clapper.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
492
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
493
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
494 04/28/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
495 Fixed a big with p_error() functions being picked up correctly
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
496 when running in yacc(optimize=1) mode. Patch contributed by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
497 Bart Whiteley.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
498
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
499 02/28/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
500 Fixed a bug with 'nonassoc' precedence rules. Basically the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
501 non-precedence was being ignored and not producing the correct
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
502 run-time behavior in the parser.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
503
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
504 02/16/08: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
505 Slight relaxation of what the input() method to a lexer will
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
506 accept as a string. Instead of testing the input to see
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
507 if the input is a string or unicode string, it checks to see
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
508 if the input object looks like it contains string data.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
509 This change makes it possible to pass string-like objects
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
510 in as input. For example, the object returned by mmap.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
511
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
512 import mmap, os
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
513 data = mmap.mmap(os.open(filename,os.O_RDONLY),
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
514 os.path.getsize(filename),
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
515 access=mmap.ACCESS_READ)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
516 lexer.input(data)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
517
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
518
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
519 11/29/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
520 Modification of ply.lex to allow token functions to aliased.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
521 This is subtle, but it makes it easier to create libraries and
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
522 to reuse token specifications. For example, suppose you defined
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
523 a function like this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
524
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
525 def number(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
526 r'\d+'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
527 t.value = int(t.value)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
528 return t
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
529
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
530 This change would allow you to define a token rule as follows:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
531
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
532 t_NUMBER = number
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
533
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
534 In this case, the token type will be set to 'NUMBER' and use
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
535 the associated number() function to process tokens.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
536
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
537 11/28/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
538 Slight modification to lex and yacc to grab symbols from both
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
539 the local and global dictionaries of the caller. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
540 modification allows lexers and parsers to be defined using
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
541 inner functions and closures.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
542
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
543 11/28/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
544 Performance optimization: The lexer.lexmatch and t.lexer
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
545 attributes are no longer set for lexer tokens that are not
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
546 defined by functions. The only normal use of these attributes
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
547 would be in lexer rules that need to perform some kind of
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
548 special processing. Thus, it doesn't make any sense to set
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
549 them on every token.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
550
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
551 *** POTENTIAL INCOMPATIBILITY *** This might break code
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
552 that is mucking around with internal lexer state in some
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
553 sort of magical way.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
554
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
555 11/27/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
556 Added the ability to put the parser into error-handling mode
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
557 from within a normal production. To do this, simply raise
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
558 a yacc.SyntaxError exception like this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
559
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
560 def p_some_production(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
561 'some_production : prod1 prod2'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
562 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
563 raise yacc.SyntaxError # Signal an error
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
564
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
565 A number of things happen after this occurs:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
566
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
567 - The last symbol shifted onto the symbol stack is discarded
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
568 and parser state backed up to what it was before the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
569 the rule reduction.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
570
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
571 - The current lookahead symbol is saved and replaced by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
572 the 'error' symbol.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
573
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
574 - The parser enters error recovery mode where it tries
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
575 to either reduce the 'error' rule or it starts
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
576 discarding items off of the stack until the parser
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
577 resets.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
578
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
579 When an error is manually set, the parser does *not* call
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
580 the p_error() function (if any is defined).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
581 *** NEW FEATURE *** Suggested on the mailing list
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
582
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
583 11/27/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
584 Fixed structure bug in examples/ansic. Reported by Dion Blazakis.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
585
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
586 11/27/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
587 Fixed a bug in the lexer related to start conditions and ignored
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
588 token rules. If a rule was defined that changed state, but
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
589 returned no token, the lexer could be left in an inconsistent
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
590 state. Reported by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
591
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
592 11/27/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
593 Modified setup.py to support Python Eggs. Patch contributed by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
594 Simon Cross.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
595
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
596 11/09/07: beazely
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
597 Fixed a bug in error handling in yacc. If a syntax error occurred and the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
598 parser rolled the entire parse stack back, the parser would be left in in
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
599 inconsistent state that would cause it to trigger incorrect actions on
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
600 subsequent input. Reported by Ton Biegstraaten, Justin King, and others.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
601
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
602 11/09/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
603 Fixed a bug when passing empty input strings to yacc.parse(). This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
604 would result in an error message about "No input given". Reported
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
605 by Andrew Dalke.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
606
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
607 Version 2.3
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
608 -----------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
609 02/20/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
610 Fixed a bug with character literals if the literal '.' appeared as the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
611 last symbol of a grammar rule. Reported by Ales Smrcka.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
612
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
613 02/19/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
614 Warning messages are now redirected to stderr instead of being printed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
615 to standard output.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
616
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
617 02/19/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
618 Added a warning message to lex.py if it detects a literal backslash
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
619 character inside the t_ignore declaration. This is to help
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
620 problems that might occur if someone accidentally defines t_ignore
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
621 as a Python raw string. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
622
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
623 t_ignore = r' \t'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
624
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
625 The idea for this is from an email I received from David Cimimi who
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
626 reported bizarre behavior in lexing as a result of defining t_ignore
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
627 as a raw string by accident.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
628
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
629 02/18/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
630 Performance improvements. Made some changes to the internal
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
631 table organization and LR parser to improve parsing performance.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
632
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
633 02/18/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
634 Automatic tracking of line number and position information must now be
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
635 enabled by a special flag to parse(). For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
636
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
637 yacc.parse(data,tracking=True)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
638
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
639 In many applications, it's just not that important to have the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
640 parser automatically track all line numbers. By making this an
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
641 optional feature, it allows the parser to run significantly faster
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
642 (more than a 20% speed increase in many cases). Note: positional
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
643 information is always available for raw tokens---this change only
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
644 applies to positional information associated with nonterminal
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
645 grammar symbols.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
646 *** POTENTIAL INCOMPATIBILITY ***
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
647
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
648 02/18/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
649 Yacc no longer supports extended slices of grammar productions.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
650 However, it does support regular slices. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
651
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
652 def p_foo(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
653 '''foo: a b c d e'''
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
654 p[0] = p[1:3]
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
655
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
656 This change is a performance improvement to the parser--it streamlines
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
657 normal access to the grammar values since slices are now handled in
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
658 a __getslice__() method as opposed to __getitem__().
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
659
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
660 02/12/07: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
661 Fixed a bug in the handling of token names when combined with
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
662 start conditions. Bug reported by Todd O'Bryan.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
663
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
664 Version 2.2
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
665 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
666 11/01/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
667 Added lexpos() and lexspan() methods to grammar symbols. These
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
668 mirror the same functionality of lineno() and linespan(). For
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
669 example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
670
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
671 def p_expr(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
672 'expr : expr PLUS expr'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
673 p.lexpos(1) # Lexing position of left-hand-expression
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
674 p.lexpos(1) # Lexing position of PLUS
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
675 start,end = p.lexspan(3) # Lexing range of right hand expression
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
676
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
677 11/01/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
678 Minor change to error handling. The recommended way to skip characters
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
679 in the input is to use t.lexer.skip() as shown here:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
680
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
681 def t_error(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
682 print "Illegal character '%s'" % t.value[0]
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
683 t.lexer.skip(1)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
684
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
685 The old approach of just using t.skip(1) will still work, but won't
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
686 be documented.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
687
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
688 10/31/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
689 Discarded tokens can now be specified as simple strings instead of
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
690 functions. To do this, simply include the text "ignore_" in the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
691 token declaration. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
692
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
693 t_ignore_cppcomment = r'//.*'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
694
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
695 Previously, this had to be done with a function. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
696
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
697 def t_ignore_cppcomment(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
698 r'//.*'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
699 pass
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
700
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
701 If start conditions/states are being used, state names should appear
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
702 before the "ignore_" text.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
703
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
704 10/19/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
705 The Lex module now provides support for flex-style start conditions
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
706 as described at http://www.gnu.org/software/flex/manual/html_chapter/flex_11.html.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
707 Please refer to this document to understand this change note. Refer to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
708 the PLY documentation for PLY-specific explanation of how this works.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
709
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
710 To use start conditions, you first need to declare a set of states in
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
711 your lexer file:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
712
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
713 states = (
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
714 ('foo','exclusive'),
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
715 ('bar','inclusive')
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
716 )
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
717
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
718 This serves the same role as the %s and %x specifiers in flex.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
719
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
720 One a state has been declared, tokens for that state can be
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
721 declared by defining rules of the form t_state_TOK. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
722
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
723 t_PLUS = '\+' # Rule defined in INITIAL state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
724 t_foo_NUM = '\d+' # Rule defined in foo state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
725 t_bar_NUM = '\d+' # Rule defined in bar state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
726
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
727 t_foo_bar_NUM = '\d+' # Rule defined in both foo and bar
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
728 t_ANY_NUM = '\d+' # Rule defined in all states
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
729
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
730 In addition to defining tokens for each state, the t_ignore and t_error
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
731 specifications can be customized for specific states. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
732
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
733 t_foo_ignore = " " # Ignored characters for foo state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
734 def t_bar_error(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
735 # Handle errors in bar state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
736
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
737 With token rules, the following methods can be used to change states
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
738
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
739 def t_TOKNAME(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
740 t.lexer.begin('foo') # Begin state 'foo'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
741 t.lexer.push_state('foo') # Begin state 'foo', push old state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
742 # onto a stack
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
743 t.lexer.pop_state() # Restore previous state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
744 t.lexer.current_state() # Returns name of current state
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
745
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
746 These methods mirror the BEGIN(), yy_push_state(), yy_pop_state(), and
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
747 yy_top_state() functions in flex.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
748
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
749 The use of start states can be used as one way to write sub-lexers.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
750 For example, the lexer or parser might instruct the lexer to start
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
751 generating a different set of tokens depending on the context.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
752
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
753 example/yply/ylex.py shows the use of start states to grab C/C++
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
754 code fragments out of traditional yacc specification files.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
755
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
756 *** NEW FEATURE *** Suggested by Daniel Larraz with whom I also
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
757 discussed various aspects of the design.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
758
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
759 10/19/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
760 Minor change to the way in which yacc.py was reporting shift/reduce
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
761 conflicts. Although the underlying LALR(1) algorithm was correct,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
762 PLY was under-reporting the number of conflicts compared to yacc/bison
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
763 when precedence rules were in effect. This change should make PLY
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
764 report the same number of conflicts as yacc.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
765
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
766 10/19/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
767 Modified yacc so that grammar rules could also include the '-'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
768 character. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
769
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
770 def p_expr_list(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
771 'expression-list : expression-list expression'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
772
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
773 Suggested by Oldrich Jedlicka.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
774
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
775 10/18/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
776 Attribute lexer.lexmatch added so that token rules can access the re
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
777 match object that was generated. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
778
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
779 def t_FOO(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
780 r'some regex'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
781 m = t.lexer.lexmatch
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
782 # Do something with m
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
783
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
784
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
785 This may be useful if you want to access named groups specified within
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
786 the regex for a specific token. Suggested by Oldrich Jedlicka.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
787
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
788 10/16/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
789 Changed the error message that results if an illegal character
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
790 is encountered and no default error function is defined in lex.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
791 The exception is now more informative about the actual cause of
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
792 the error.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
793
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
794 Version 2.1
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
795 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
796 10/02/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
797 The last Lexer object built by lex() can be found in lex.lexer.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
798 The last Parser object built by yacc() can be found in yacc.parser.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
799
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
800 10/02/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
801 New example added: examples/yply
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
802
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
803 This example uses PLY to convert Unix-yacc specification files to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
804 PLY programs with the same grammar. This may be useful if you
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
805 want to convert a grammar from bison/yacc to use with PLY.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
806
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
807 10/02/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
808 Added support for a start symbol to be specified in the yacc
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
809 input file itself. Just do this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
810
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
811 start = 'name'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
812
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
813 where 'name' matches some grammar rule. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
814
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
815 def p_name(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
816 'name : A B C'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
817 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
818
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
819 This mirrors the functionality of the yacc %start specifier.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
820
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
821 09/30/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
822 Some new examples added.:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
823
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
824 examples/GardenSnake : A simple indentation based language similar
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
825 to Python. Shows how you might handle
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
826 whitespace. Contributed by Andrew Dalke.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
827
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
828 examples/BASIC : An implementation of 1964 Dartmouth BASIC.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
829 Contributed by Dave against his better
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
830 judgement.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
831
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
832 09/28/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
833 Minor patch to allow named groups to be used in lex regular
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
834 expression rules. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
835
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
836 t_QSTRING = r'''(?P<quote>['"]).*?(?P=quote)'''
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
837
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
838 Patch submitted by Adam Ring.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
839
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
840 09/28/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
841 LALR(1) is now the default parsing method. To use SLR, use
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
842 yacc.yacc(method="SLR"). Note: there is no performance impact
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
843 on parsing when using LALR(1) instead of SLR. However, constructing
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
844 the parsing tables will take a little longer.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
845
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
846 09/26/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
847 Change to line number tracking. To modify line numbers, modify
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
848 the line number of the lexer itself. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
849
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
850 def t_NEWLINE(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
851 r'\n'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
852 t.lexer.lineno += 1
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
853
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
854 This modification is both cleanup and a performance optimization.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
855 In past versions, lex was monitoring every token for changes in
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
856 the line number. This extra processing is unnecessary for a vast
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
857 majority of tokens. Thus, this new approach cleans it up a bit.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
858
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
859 *** POTENTIAL INCOMPATIBILITY ***
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
860 You will need to change code in your lexer that updates the line
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
861 number. For example, "t.lineno += 1" becomes "t.lexer.lineno += 1"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
862
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
863 09/26/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
864 Added the lexing position to tokens as an attribute lexpos. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
865 is the raw index into the input text at which a token appears.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
866 This information can be used to compute column numbers and other
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
867 details (e.g., scan backwards from lexpos to the first newline
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
868 to get a column position).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
869
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
870 09/25/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
871 Changed the name of the __copy__() method on the Lexer class
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
872 to clone(). This is used to clone a Lexer object (e.g., if
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
873 you're running different lexers at the same time).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
874
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
875 09/21/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
876 Limitations related to the use of the re module have been eliminated.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
877 Several users reported problems with regular expressions exceeding
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
878 more than 100 named groups. To solve this, lex.py is now capable
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
879 of automatically splitting its master regular regular expression into
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
880 smaller expressions as needed. This should, in theory, make it
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
881 possible to specify an arbitrarily large number of tokens.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
882
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
883 09/21/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
884 Improved error checking in lex.py. Rules that match the empty string
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
885 are now rejected (otherwise they cause the lexer to enter an infinite
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
886 loop). An extra check for rules containing '#' has also been added.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
887 Since lex compiles regular expressions in verbose mode, '#' is interpreted
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
888 as a regex comment, it is critical to use '\#' instead.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
889
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
890 09/18/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
891 Added a @TOKEN decorator function to lex.py that can be used to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
892 define token rules where the documentation string might be computed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
893 in some way.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
894
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
895 digit = r'([0-9])'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
896 nondigit = r'([_A-Za-z])'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
897 identifier = r'(' + nondigit + r'(' + digit + r'|' + nondigit + r')*)'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
898
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
899 from ply.lex import TOKEN
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
900
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
901 @TOKEN(identifier)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
902 def t_ID(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
903 # Do whatever
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
904
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
905 The @TOKEN decorator merely sets the documentation string of the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
906 associated token function as needed for lex to work.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
907
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
908 Note: An alternative solution is the following:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
909
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
910 def t_ID(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
911 # Do whatever
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
912
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
913 t_ID.__doc__ = identifier
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
914
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
915 Note: Decorators require the use of Python 2.4 or later. If compatibility
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
916 with old versions is needed, use the latter solution.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
917
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
918 The need for this feature was suggested by Cem Karan.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
919
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
920 09/14/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
921 Support for single-character literal tokens has been added to yacc.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
922 These literals must be enclosed in quotes. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
923
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
924 def p_expr(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
925 "expr : expr '+' expr"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
926 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
927
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
928 def p_expr(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
929 'expr : expr "-" expr'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
930 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
931
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
932 In addition to this, it is necessary to tell the lexer module about
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
933 literal characters. This is done by defining the variable 'literals'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
934 as a list of characters. This should be defined in the module that
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
935 invokes the lex.lex() function. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
936
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
937 literals = ['+','-','*','/','(',')','=']
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
938
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
939 or simply
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
940
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
941 literals = '+=*/()='
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
942
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
943 It is important to note that literals can only be a single character.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
944 When the lexer fails to match a token using its normal regular expression
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
945 rules, it will check the current character against the literal list.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
946 If found, it will be returned with a token type set to match the literal
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
947 character. Otherwise, an illegal character will be signalled.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
948
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
949
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
950 09/14/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
951 Modified PLY to install itself as a proper Python package called 'ply'.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
952 This will make it a little more friendly to other modules. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
953 changes the usage of PLY only slightly. Just do this to import the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
954 modules
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
955
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
956 import ply.lex as lex
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
957 import ply.yacc as yacc
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
958
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
959 Alternatively, you can do this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
960
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
961 from ply import *
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
962
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
963 Which imports both the lex and yacc modules.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
964 Change suggested by Lee June.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
965
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
966 09/13/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
967 Changed the handling of negative indices when used in production rules.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
968 A negative production index now accesses already parsed symbols on the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
969 parsing stack. For example,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
970
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
971 def p_foo(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
972 "foo: A B C D"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
973 print p[1] # Value of 'A' symbol
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
974 print p[2] # Value of 'B' symbol
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
975 print p[-1] # Value of whatever symbol appears before A
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
976 # on the parsing stack.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
977
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
978 p[0] = some_val # Sets the value of the 'foo' grammer symbol
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
979
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
980 This behavior makes it easier to work with embedded actions within the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
981 parsing rules. For example, in C-yacc, it is possible to write code like
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
982 this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
983
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
984 bar: A { printf("seen an A = %d\n", $1); } B { do_stuff; }
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
985
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
986 In this example, the printf() code executes immediately after A has been
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
987 parsed. Within the embedded action code, $1 refers to the A symbol on
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
988 the stack.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
989
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
990 To perform this equivalent action in PLY, you need to write a pair
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
991 of rules like this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
992
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
993 def p_bar(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
994 "bar : A seen_A B"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
995 do_stuff
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
996
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
997 def p_seen_A(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
998 "seen_A :"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
999 print "seen an A =", p[-1]
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1000
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1001 The second rule "seen_A" is merely a empty production which should be
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1002 reduced as soon as A is parsed in the "bar" rule above. The use
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1003 of the negative index p[-1] is used to access whatever symbol appeared
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1004 before the seen_A symbol.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1005
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1006 This feature also makes it possible to support inherited attributes.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1007 For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1008
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1009 def p_decl(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1010 "decl : scope name"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1011
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1012 def p_scope(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1013 """scope : GLOBAL
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1014 | LOCAL"""
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1015 p[0] = p[1]
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1016
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1017 def p_name(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1018 "name : ID"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1019 if p[-1] == "GLOBAL":
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1020 # ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1021 else if p[-1] == "LOCAL":
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1022 #...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1023
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1024 In this case, the name rule is inheriting an attribute from the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1025 scope declaration that precedes it.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1026
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1027 *** POTENTIAL INCOMPATIBILITY ***
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1028 If you are currently using negative indices within existing grammar rules,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1029 your code will break. This should be extremely rare if non-existent in
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1030 most cases. The argument to various grammar rules is not usually not
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1031 processed in the same way as a list of items.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1032
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1033 Version 2.0
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1034 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1035 09/07/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1036 Major cleanup and refactoring of the LR table generation code. Both SLR
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1037 and LALR(1) table generation is now performed by the same code base with
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1038 only minor extensions for extra LALR(1) processing.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1039
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1040 09/07/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1041 Completely reimplemented the entire LALR(1) parsing engine to use the
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1042 DeRemer and Pennello algorithm for calculating lookahead sets. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1043 significantly improves the performance of generating LALR(1) tables
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1044 and has the added feature of actually working correctly! If you
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1045 experienced weird behavior with LALR(1) in prior releases, this should
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1046 hopefully resolve all of those problems. Many thanks to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1047 Andrew Waters and Markus Schoepflin for submitting bug reports
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1048 and helping me test out the revised LALR(1) support.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1049
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1050 Version 1.8
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1051 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1052 08/02/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1053 Fixed a problem related to the handling of default actions in LALR(1)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1054 parsing. If you experienced subtle and/or bizarre behavior when trying
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1055 to use the LALR(1) engine, this may correct those problems. Patch
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1056 contributed by Russ Cox. Note: This patch has been superceded by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1057 revisions for LALR(1) parsing in Ply-2.0.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1058
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1059 08/02/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1060 Added support for slicing of productions in yacc.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1061 Patch contributed by Patrick Mezard.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1062
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1063 Version 1.7
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1064 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1065 03/02/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1066 Fixed infinite recursion problem ReduceToTerminals() function that
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1067 would sometimes come up in LALR(1) table generation. Reported by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1068 Markus Schoepflin.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1069
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1070 03/01/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1071 Added "reflags" argument to lex(). For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1072
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1073 lex.lex(reflags=re.UNICODE)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1074
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1075 This can be used to specify optional flags to the re.compile() function
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1076 used inside the lexer. This may be necessary for special situations such
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1077 as processing Unicode (e.g., if you want escapes like \w and \b to consult
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1078 the Unicode character property database). The need for this suggested by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1079 Andreas Jung.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1080
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1081 03/01/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1082 Fixed a bug with an uninitialized variable on repeated instantiations of parser
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1083 objects when the write_tables=0 argument was used. Reported by Michael Brown.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1084
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1085 03/01/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1086 Modified lex.py to accept Unicode strings both as the regular expressions for
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1087 tokens and as input. Hopefully this is the only change needed for Unicode support.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1088 Patch contributed by Johan Dahl.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1089
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1090 03/01/06: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1091 Modified the class-based interface to work with new-style or old-style classes.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1092 Patch contributed by Michael Brown (although I tweaked it slightly so it would work
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1093 with older versions of Python).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1094
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1095 Version 1.6
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1096 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1097 05/27/05: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1098 Incorporated patch contributed by Christopher Stawarz to fix an extremely
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1099 devious bug in LALR(1) parser generation. This patch should fix problems
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1100 numerous people reported with LALR parsing.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1101
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1102 05/27/05: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1103 Fixed problem with lex.py copy constructor. Reported by Dave Aitel, Aaron Lav,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1104 and Thad Austin.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1105
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1106 05/27/05: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1107 Added outputdir option to yacc() to control output directory. Contributed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1108 by Christopher Stawarz.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1109
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1110 05/27/05: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1111 Added rununit.py test script to run tests using the Python unittest module.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1112 Contributed by Miki Tebeka.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1113
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1114 Version 1.5
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1115 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1116 05/26/04: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1117 Major enhancement. LALR(1) parsing support is now working.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1118 This feature was implemented by Elias Ioup (ezioup@alumni.uchicago.edu)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1119 and optimized by David Beazley. To use LALR(1) parsing do
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1120 the following:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1121
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1122 yacc.yacc(method="LALR")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1123
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1124 Computing LALR(1) parsing tables takes about twice as long as
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1125 the default SLR method. However, LALR(1) allows you to handle
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1126 more complex grammars. For example, the ANSI C grammar
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1127 (in example/ansic) has 13 shift-reduce conflicts with SLR, but
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1128 only has 1 shift-reduce conflict with LALR(1).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1129
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1130 05/20/04: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1131 Added a __len__ method to parser production lists. Can
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1132 be used in parser rules like this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1133
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1134 def p_somerule(p):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1135 """a : B C D
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1136 | E F"
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1137 if (len(p) == 3):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1138 # Must have been first rule
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1139 elif (len(p) == 2):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1140 # Must be second rule
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1141
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1142 Suggested by Joshua Gerth and others.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1143
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1144 Version 1.4
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1145 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1146 04/23/04: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1147 Incorporated a variety of patches contributed by Eric Raymond.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1148 These include:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1149
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1150 0. Cleans up some comments so they don't wrap on an 80-column display.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1151 1. Directs compiler errors to stderr where they belong.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1152 2. Implements and documents automatic line counting when \n is ignored.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1153 3. Changes the way progress messages are dumped when debugging is on.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1154 The new format is both less verbose and conveys more information than
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1155 the old, including shift and reduce actions.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1156
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1157 04/23/04: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1158 Added a Python setup.py file to simply installation. Contributed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1159 by Adam Kerrison.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1160
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1161 04/23/04: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1162 Added patches contributed by Adam Kerrison.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1163
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1164 - Some output is now only shown when debugging is enabled. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1165 means that PLY will be completely silent when not in debugging mode.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1166
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1167 - An optional parameter "write_tables" can be passed to yacc() to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1168 control whether or not parsing tables are written. By default,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1169 it is true, but it can be turned off if you don't want the yacc
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1170 table file. Note: disabling this will cause yacc() to regenerate
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1171 the parsing table each time.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1172
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1173 04/23/04: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1174 Added patches contributed by David McNab. This patch addes two
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1175 features:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1176
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1177 - The parser can be supplied as a class instead of a module.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1178 For an example of this, see the example/classcalc directory.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1179
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1180 - Debugging output can be directed to a filename of the user's
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1181 choice. Use
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1182
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1183 yacc(debugfile="somefile.out")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1184
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1185
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1186 Version 1.3
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1187 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1188 12/10/02: jmdyck
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1189 Various minor adjustments to the code that Dave checked in today.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1190 Updated test/yacc_{inf,unused}.exp to reflect today's changes.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1191
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1192 12/10/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1193 Incorporated a variety of minor bug fixes to empty production
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1194 handling and infinite recursion checking. Contributed by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1195 Michael Dyck.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1196
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1197 12/10/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1198 Removed bogus recover() method call in yacc.restart()
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1199
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1200 Version 1.2
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1201 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1202 11/27/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1203 Lexer and parser objects are now available as an attribute
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1204 of tokens and slices respectively. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1205
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1206 def t_NUMBER(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1207 r'\d+'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1208 print t.lexer
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1209
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1210 def p_expr_plus(t):
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1211 'expr: expr PLUS expr'
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1212 print t.lexer
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1213 print t.parser
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1214
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1215 This can be used for state management (if needed).
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1216
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1217 10/31/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1218 Modified yacc.py to work with Python optimize mode. To make
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1219 this work, you need to use
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1220
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1221 yacc.yacc(optimize=1)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1222
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1223 Furthermore, you need to first run Python in normal mode
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1224 to generate the necessary parsetab.py files. After that,
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1225 you can use python -O or python -OO.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1226
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1227 Note: optimized mode turns off a lot of error checking.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1228 Only use when you are sure that your grammar is working.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1229 Make sure parsetab.py is up to date!
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1230
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1231 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1232 Added cloning of Lexer objects. For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1233
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1234 import copy
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1235 l = lex.lex()
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1236 lc = copy.copy(l)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1237
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1238 l.input("Some text")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1239 lc.input("Some other text")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1240 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1241
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1242 This might be useful if the same "lexer" is meant to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1243 be used in different contexts---or if multiple lexers
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1244 are running concurrently.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1245
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1246 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1247 Fixed subtle bug with first set computation and empty productions.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1248 Patch submitted by Michael Dyck.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1249
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1250 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1251 Fixed error messages to use "filename:line: message" instead
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1252 of "filename:line. message". This makes error reporting more
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1253 friendly to emacs. Patch submitted by François Pinard.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1254
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1255 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1256 Improvements to parser.out file. Terminals and nonterminals
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1257 are sorted instead of being printed in random order.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1258 Patch submitted by François Pinard.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1259
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1260 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1261 Improvements to parser.out file output. Rules are now printed
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1262 in a way that's easier to understand. Contributed by Russ Cox.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1263
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1264 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1265 Added 'nonassoc' associativity support. This can be used
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1266 to disable the chaining of operators like a < b < c.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1267 To use, simply specify 'nonassoc' in the precedence table
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1268
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1269 precedence = (
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1270 ('nonassoc', 'LESSTHAN', 'GREATERTHAN'), # Nonassociative operators
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1271 ('left', 'PLUS', 'MINUS'),
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1272 ('left', 'TIMES', 'DIVIDE'),
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1273 ('right', 'UMINUS'), # Unary minus operator
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1274 )
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1275
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1276 Patch contributed by Russ Cox.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1277
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1278 10/30/02: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1279 Modified the lexer to provide optional support for Python -O and -OO
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1280 modes. To make this work, Python *first* needs to be run in
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1281 unoptimized mode. This reads the lexing information and creates a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1282 file "lextab.py". Then, run lex like this:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1283
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1284 # module foo.py
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1285 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1286 ...
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1287 lex.lex(optimize=1)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1288
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1289 Once the lextab file has been created, subsequent calls to
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1290 lex.lex() will read data from the lextab file instead of using
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1291 introspection. In optimized mode (-O, -OO) everything should
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1292 work normally despite the loss of doc strings.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1293
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1294 To change the name of the file 'lextab.py' use the following:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1295
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1296 lex.lex(lextab="footab")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1297
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1298 (this creates a file footab.py)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1299
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1300
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1301 Version 1.1 October 25, 2001
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1302 ------------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1303
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1304 10/25/01: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1305 Modified the table generator to produce much more compact data.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1306 This should greatly reduce the size of the parsetab.py[c] file.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1307 Caveat: the tables still need to be constructed so a little more
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1308 work is done in parsetab on import.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1309
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1310 10/25/01: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1311 There may be a possible bug in the cycle detector that reports errors
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1312 about infinite recursion. I'm having a little trouble tracking it
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1313 down, but if you get this problem, you can disable the cycle
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1314 detector as follows:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1315
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1316 yacc.yacc(check_recursion = 0)
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1317
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1318 10/25/01: beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1319 Fixed a bug in lex.py that sometimes caused illegal characters to be
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1320 reported incorrectly. Reported by Sverre Jørgensen.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1321
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1322 7/8/01 : beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1323 Added a reference to the underlying lexer object when tokens are handled by
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1324 functions. The lexer is available as the 'lexer' attribute. This
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1325 was added to provide better lexing support for languages such as Fortran
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1326 where certain types of tokens can't be conveniently expressed as regular
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1327 expressions (and where the tokenizing function may want to perform a
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1328 little backtracking). Suggested by Pearu Peterson.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1329
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1330 6/20/01 : beazley
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1331 Modified yacc() function so that an optional starting symbol can be specified.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1332 For example:
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1333
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1334 yacc.yacc(start="statement")
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1335
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1336 Normally yacc always treats the first production rule as the starting symbol.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1337 However, if you are debugging your grammar it may be useful to specify
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1338 an alternative starting symbol. Idea suggested by Rich Salz.
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1339
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1340 Version 1.0 June 18, 2001
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1341 --------------------------
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1342 Initial public offering
343ff337a19b <ais523> ` tar -xf ply-3.8.tar.gz
HackBot
parents:
diff changeset
1343