@@ -33,7 +33,10 @@ $graphic = $printable # $white
3333@sym = $ alpha_ [ $alpha $digit \_ \' ] *
3434@string = \" ($ printable # \" )* \"
3535@label = \`\{ ($ printable # \} )* \}\`
36-
36+ @declit = $ digit[ \_ $digit] *
37+ @binlit = 0[ bB] $ bindigit[ \_ $bindigit] *
38+ @octlit = 0[ oO] $ octdigit[ \_ $octdigit] *
39+ @hexlit = 0[ xX] $ hexdigit[ \_ $hexdigit] *
3740
3841tokens:-
3942-- Whitespace insensitive
@@ -112,11 +115,11 @@ tokens:-
112115<state_dclabel> "#root-integrity" { mkL TokenDCRootInteg }
113116<state_dclabel> "#null-confidentiality" { mkL TokenDCNullConf }
114117<state_dclabel> "#null-integrity" { mkL TokenDCNullInteg }
115- <0> $ digit [ \_ $digit ] * { mkLs (\s -> TokenNum ( read ( filter (/ ='_') s))) }
116- -- TODO: Improve lexing of the below integer literal matches . 2025-08-24; ASL .
117- <0> 0 [ bB ] $ bindigit [ \_ $bindigit ] * { mkLs (\s -> TokenNum ( fst ( head ( readBin ( filter (/ ='_') ( drop 2 s)))))) }
118- <0> 0 [ oO ] $ octdigit [ \_ $octdigit ] * { mkLs (\s -> TokenNum ( fst ( head ( readOct ( filter (/ ='_') ( drop 2 s)))))) }
119- <0> 0 [ xX ] $ hexdigit [ \_ $hexdigit ] * { mkLs (\s -> TokenNum ( fst ( head ( readHex ( filter (/ ='_' ) ( drop 2 s ))))) ) }
118+ <0> @declit { mkLs (\s -> TokenNum ( read ( filter (/ ='_') s))) }
119+ <0> @binlit { mkLs (\s -> TokenNum ( fst ( head ( readBin ( filter (/ ='_' ) ( drop 2 s )))))) }
120+ <0> @octlit { mkLs (\s -> TokenNum ( fst ( head ( readOct ( filter (/ ='_') ( drop 2 s)))))) }
121+ <0> @hexlit { mkLs (\s -> TokenNum ( fst ( head ( readHex ( filter (/ ='_') ( drop 2 s)))))) }
122+ <0> ( @declit | @binlit | @octlit | @hexlit ) @sym { \( _, _, _, s ) _ -> lexerError ( "Invalid literal " ++ s ) }
120123<0> [ \< ][ \< ] { mkL TokenBinShiftLeft }
121124<0> [ \> ][ \> ] { mkL TokenBinShiftRight }
122125<0> [ \~ ][ \> ][ \> ] { mkL TokenBinZeroShiftRight }
@@ -393,7 +396,6 @@ lexerError msg =
393396 where
394397 trim = reverse . dropWhile ( == ' ') . reverse . dropWhile ( == ' ')
395398
396-
397399-- we use a custom version of monadScan so that we have full
398400-- control over the error reporting; this one is based on
399401-- the built-in alexMonadScan
0 commit comments