From b5e81a0d27da103e5e771f78a319bae1cfa1703c Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Thu, 5 Mar 2015 15:03:04 -0500 Subject: Hexadecimal integer literals, contributed by Gabriel Riba --- src/urweb.lex | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/urweb.lex') diff --git a/src/urweb.lex b/src/urweb.lex index 716c44ba..e1ffd1c3 100644 --- a/src/urweb.lex +++ b/src/urweb.lex @@ -182,6 +182,7 @@ cid = [A-Z][A-Za-z0-9_]*; ws = [\ \t\012\r]; intconst = [0-9]+; realconst = [0-9]+\.[0-9]*; +hexconst = 0x[0-9A-F]{1,8}; notags = ([^<{\n(]|(\([^\*<{\n]))+; xcom = ([^\-]|(-[^\-]))+; oint = [0-9][0-9][0-9]; @@ -541,6 +542,12 @@ xint = x[0-9a-fA-F][0-9a-fA-F]; {id} => (Tokens.SYMBOL (yytext, pos yypos, pos yypos + size yytext)); {cid} => (Tokens.CSYMBOL (yytext, pos yypos, pos yypos + size yytext)); + {hexconst} => (case StringCvt.scanString (Int64.scan StringCvt.HEX) (String.extract (yytext, 2, NONE)) of + SOME x => Tokens.INT (x, pos yypos, pos yypos + size yytext) + | NONE => (ErrorMsg.errorAt' (pos yypos, pos yypos) + ("Expected hexInt, received: " ^ yytext); + continue ())); + {intconst} => (case Int64.fromString yytext of SOME x => Tokens.INT (x, pos yypos, pos yypos + size yytext) | NONE => (ErrorMsg.errorAt' (pos yypos, pos yypos) -- cgit v1.2.3