|
39 | 39 | _closebracket = intern("closebracket") |
40 | 40 | _true = intern("True") |
41 | 41 | _false = intern("False") |
| 42 | +_inf = intern("inf") |
| 43 | +_nan = intern("nan") |
42 | 44 | _identifier = intern("identifier") |
43 | 45 | _whitespace = intern("whitespace") |
44 | 46 | _comma = intern("comma") |
@@ -168,6 +170,8 @@ class Parser: |
168 | 170 | (_closebracket, pytools.lex.RE(r"\]")), |
169 | 171 | (_true, pytools.lex.RE(r"True")), |
170 | 172 | (_false, pytools.lex.RE(r"False")), |
| 173 | + (_inf, pytools.lex.RE(r"inf")), |
| 174 | + (_nan, pytools.lex.RE(r"nan")), |
171 | 175 | (_identifier, pytools.lex.RE(r"[@$a-z_A-Z_][@$a-zA-Z_0-9]*")), |
172 | 176 | (_whitespace, pytools.lex.RE("[ \n\t]*")), |
173 | 177 | (_comma, pytools.lex.RE(",")), |
@@ -203,6 +207,14 @@ def parse_terminal(self, pstate): |
203 | 207 | elif next_tag is _false: |
204 | 208 | assert pstate.next_str_and_advance() == "False" |
205 | 209 | return False |
| 210 | + elif next_tag is _inf: |
| 211 | + from math import inf |
| 212 | + assert pstate.next_str_and_advance() == "inf" |
| 213 | + return inf |
| 214 | + elif next_tag is _nan: |
| 215 | + from math import nan |
| 216 | + assert pstate.next_str_and_advance() == "nan" |
| 217 | + return nan |
206 | 218 | elif next_tag is _identifier: |
207 | 219 | return primitives.Variable(pstate.next_str_and_advance()) |
208 | 220 | elif next_tag is _if: |
|
0 commit comments