added a more or less common lexer for hex and bin literals

This commit is contained in:
Basile Burg 2016-03-28 05:48:49 +02:00
parent 487241064c
commit 2a36a73f22
2 changed files with 28 additions and 3 deletions

View File

@ -815,6 +815,31 @@ begin
exit;
end else readerReset;
// bin & hex literals
if reader^ = '0' then if readerNext^ in ['b','B', 'x', 'X'] then
begin
fTokKind:= tkNumbr;
readerNext;
if (reader-1)^ in ['b','B'] then
readWhile(reader, fTokStop, ['0','1','_'])
else
readWhile(reader, fTokStop, hexaChars + ['.']);
if not tryReadDelim(reader, fTokStop, 'uL')
then if not tryReadDelim(reader, fTokStop, 'UL')
then if not tryReadDelim(reader, fTokStop, 'Lu')
then if not tryReadDelim(reader, fTokStop, 'LU')
then if reader^ in ['U','L','u', 'p', 'P', 'i'] then
readerNext;
if not isWhite(reader^) and not isOperator1(reader^) and
not isSymbol(reader^) then
begin
fTokKind:= tkError;
readUntilAmong(reader, fTokStop, [#0..#32] + symbChars);
end;
exit;
end
else readerPrev;
// numbers
if (isNumber(reader^)) then
begin

View File

@ -751,7 +751,7 @@ begin
exit;
continue;
end;
if isOperator3(identifier[1..length(identifier)-1]) then
if isOperator3(identifier[1..3]) then
begin
reader.previous;
addToken(ltkOperator);
@ -759,7 +759,7 @@ begin
exit;
continue;
end;
if isOperator2(identifier[1..length(identifier)-2]) then
if isOperator2(identifier[1..2]) then
begin
reader.previous;
reader.previous;
@ -788,7 +788,7 @@ begin
exit;
continue;
end;
if isOperator2(identifier[1..length(identifier)-1]) then
if isOperator2(identifier[1..2]) then
begin
reader.previous;
addToken(ltkOperator);