diff --git a/ChangeLog b/ChangeLog index a574133725258188c211fcc4a31b0ead93b20561_Q2hhbmdlTG9n..56dbd4ec5137e19c56b33a8334df5712900d2d92_Q2hhbmdlTG9n 100644 --- a/ChangeLog +++ b/ChangeLog @@ -6,6 +6,7 @@ * support for CAST function * support for regexp-based pattern matching using a REGEXP operator * may now GROUPBY functions / column number +* fix parsing of negative float 2011-01-12 -- 0.28.0 * enhance rewrite_shared_optional so one can specify where the new identity diff --git a/parser.g b/parser.g index a574133725258188c211fcc4a31b0ead93b20561_cGFyc2VyLmc=..56dbd4ec5137e19c56b33a8334df5712900d2d92_cGFyc2VyLmc= 100644 --- a/parser.g +++ b/parser.g @@ -99,7 +99,7 @@ token QMARK: r'\?' token STRING: r"'([^\'\\]|\\.)*'|\"([^\\\"\\]|\\.)*\"" - token FLOAT: r'\d+\.\d*' + token FLOAT: r'-?\d+\.\d*' token INT: r'-?\d+' token SUBSTITUTE: r'%\([A-Za-z_0-9]+\)s' diff --git a/parser.py b/parser.py index a574133725258188c211fcc4a31b0ead93b20561_cGFyc2VyLnB5..56dbd4ec5137e19c56b33a8334df5712900d2d92_cGFyc2VyLnB5 100644 --- a/parser.py +++ b/parser.py @@ -105,7 +105,7 @@ ('COLALIAS', re.compile('[A-Z][A-Z0-9_]*\\.\\d+')), ('QMARK', re.compile('\\?')), ('STRING', re.compile('\'([^\\\'\\\\]|\\\\.)*\'|\\"([^\\\\\\"\\\\]|\\\\.)*\\"')), - ('FLOAT', re.compile('\\d+\\.\\d*')), + ('FLOAT', re.compile('-?\\d+\\.\\d*')), ('INT', re.compile('-?\\d+')), ('SUBSTITUTE', re.compile('%\\([A-Za-z_0-9]+\\)s')), ] @@ -701,7 +701,7 @@ P = Hercule(HerculeScanner(text)) return runtime.wrap_error_reporter(P, rule) -if __name__ == '__main__': +if __name__ == 'old__main__': from sys import argv, stdin if len(argv) >= 2: if len(argv) >= 3: @@ -710,3 +710,4 @@ f = stdin print parse(argv[1], f.read()) else: print >>sys.stderr, 'Args: <rule> [<filename>]' +# End -- grammar generated by Yapps diff --git a/test/unittest_parser.py b/test/unittest_parser.py index a574133725258188c211fcc4a31b0ead93b20561_dGVzdC91bml0dGVzdF9wYXJzZXIucHk=..56dbd4ec5137e19c56b33a8334df5712900d2d92_dGVzdC91bml0dGVzdF9wYXJzZXIucHk= 100644 --- a/test/unittest_parser.py +++ b/test/unittest_parser.py @@ -157,6 +157,7 @@ 'Any YEAR(XD),COUNT(X) GROUPBY YEAR(XD) ORDERBY YEAR(XD) WHERE X date XD;', 'Any YEAR(XD),COUNT(X) GROUPBY 1 ORDERBY 1 WHERE X date XD;', + 'Any -1.0;', ) class ParserHercule(TestCase):