|
37 | 37 | _closepar = intern("closepar") |
38 | 38 | _openbracket = intern("openbracket") |
39 | 39 | _closebracket = intern("closebracket") |
| 40 | +_inf = intern("inf") |
| 41 | +_nan = intern("nan") |
40 | 42 | _identifier = intern("identifier") |
41 | 43 | _whitespace = intern("whitespace") |
42 | 44 | _comma = intern("comma") |
@@ -164,6 +166,8 @@ class Parser: |
164 | 166 | (_closepar, pytools.lex.RE(r"\)")), |
165 | 167 | (_openbracket, pytools.lex.RE(r"\[")), |
166 | 168 | (_closebracket, pytools.lex.RE(r"\]")), |
| 169 | + (_inf, pytools.lex.RE(r"inf")), |
| 170 | + (_nan, pytools.lex.RE(r"nan")), |
167 | 171 | (_identifier, pytools.lex.RE(r"[@$a-z_A-Z_][@$a-zA-Z_0-9]*")), |
168 | 172 | (_whitespace, pytools.lex.RE("[ \n\t]*")), |
169 | 173 | (_comma, pytools.lex.RE(",")), |
@@ -193,6 +197,14 @@ def parse_terminal(self, pstate): |
193 | 197 | return self.parse_float(pstate.next_str_and_advance()) |
194 | 198 | elif next_tag is _imaginary: |
195 | 199 | return complex(pstate.next_str_and_advance()) |
| 200 | + elif next_tag is _inf: |
| 201 | + from math import inf |
| 202 | + assert pstate.next_str_and_advance() == "inf" |
| 203 | + return inf |
| 204 | + elif next_tag is _nan: |
| 205 | + from math import nan |
| 206 | + assert pstate.next_str_and_advance() == "nan" |
| 207 | + return nan |
196 | 208 | elif next_tag is _identifier: |
197 | 209 | return primitives.Variable(pstate.next_str_and_advance()) |
198 | 210 | elif next_tag is _if: |
|
0 commit comments