diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l
index 8b0952103e7a070441255b1bdb473ede1f439db6..6fe3af8369c8f69ed4bc65e840a15035587b037e 100644
--- a/src/backend/parser/scan.l
+++ b/src/backend/parser/scan.l
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.38 1998/04/08 06:35:00 thomas Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.39 1998/05/09 23:15:20 thomas Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -148,12 +148,13 @@ self			[,()\[\].;$\:\+\-\*\/\<\>\=\|]
 op_and_self		[\~\!\@\#\%\^\&\|\`\?\$\:\+\-\*\/\<\>\=]
 operator		{op_and_self}+
 
-xminteger		{integer}/-
-xmreal			{real}/{space}*-{digit}
 xmstop			-
 
-integer			-?{digit}+
-real			-?{digit}+\.{digit}+([Ee][-+]?{digit}+)?
+integer			[\-]?{digit}+
+/*
+real			[\-]?{digit}+\.{digit}+([Ee][-+]?{digit}+)?
+*/
+real			[\-]?(((({digit}*\.{digit}+)|({digit}+\.{digit}*))([Ee][-+]?{digit}+)?)|({digit}+[Ee][-+]?{digit}+))
 
 param			\${integer}
 
@@ -291,7 +292,8 @@ other			.
 
 {typecast}		{ return TYPECAST; }
 
-{self}/-[\.0-9]	{
+{self}/{space}*-[\.0-9]	{
+					BEGIN(xm);
 					return (yytext[0]);
 				}
 {self}			{ 	return (yytext[0]); }
@@ -311,6 +313,7 @@ other			.
 					return (PARAM);
 				}
 
+
 {identifier}/{space}*-{number}	{
 					int i;
 					ScanKeyword		*keyword;
@@ -386,6 +389,8 @@ other			.
 					CheckFloat8Val(yylval.dval);
 					return (FCONST);
 				}
+
+
 {identifier}	{
 					int i;
 					ScanKeyword		*keyword;