# HG changeset patch
# User Sylvain Thénault <sylvain.thenault@logilab.fr>
# Date 1305725267 -7200
#      Wed May 18 15:27:47 2011 +0200
# Node ID 56dbd4ec5137e19c56b33a8334df5712900d2d92
# Parent  a574133725258188c211fcc4a31b0ead93b20561
fix parsing of negative float (closes #63421)

diff --git a/ChangeLog b/ChangeLog
--- 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
--- 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
--- 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
--- 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):