Fixed the C-- lexer to comply with the standard on hex escape sequences.
authorMichael D. Adams <t-madams@microsoft.com>
Thu, 10 May 2007 15:03:50 +0000 (15:03 +0000)
committerMichael D. Adams <t-madams@microsoft.com>
Thu, 10 May 2007 15:03:50 +0000 (15:03 +0000)
The C-- standard [1] says in Section 3.3.5 "Character literals" that:
 - the hex escape sequence "must contain at least one and
   at most two hexdigits."
 - the octal escape sequence "must contain at least one and
   at most three octdigits."

[1] Norman Ramsey, Simon Peyton Jones, and Christian Lindig.
    "The C-- Language Specication, Version 2.0 ( CVS Revision 1.128 )"
    <http://www.cminusminus.org/extern/man2.pdf>

compiler/cmm/CmmLex.x

index ee05122..cc47796 100644 (file)
@@ -56,7 +56,7 @@ $namechar  = [$namebegin $digit]
 
 @floating_point = @decimal \. @decimal @exponent? | @decimal @exponent
 
 
 @floating_point = @decimal \. @decimal @exponent? | @decimal @exponent
 
-@escape      = \\ ([abfnrt\\\'\"\?] | x @hexadecimal | @octal)
+@escape      = \\ ([abfnrt\\\'\"\?] | x $hexit{1,2} | $octit{1,3})
 @strchar     = ($printable # [\"\\]) | @escape
 
 cmm :-
 @strchar     = ($printable # [\"\\]) | @escape
 
 cmm :-