+ fun hexnumber (yyt, yyp) =
+ let
+ val t = String.extract (yyt, 2, NONE)
+ val ext = ParseState.ext (yyp, yyp + size yyt)
+ val numOpt = StringCvt.scanString (Word32.scan StringCvt.HEX) t
+ handle Overflow =>
+ ( ErrorMsg.error ext
+ ("integral constant `" ^ yyt ^ "' too large") ;
+ NONE )
+ in
+ case numOpt
+ of NONE => ( ErrorMsg.error ext
+ ("cannot parse integral constant `" ^ yyt ^ "'");
+ Tokens.INTNUM (Word32Signed.ZERO, yyp, yyp + size yyt) )
+ | SOME n => Tokens.INTNUM (n,yyp,yyp + size yyt)
+ end