lexer (not-HL), add dedicated bin literal scanner

This commit is contained in:
Basile Burg 2016-04-03 21:09:31 +02:00
parent 1655300dfe
commit 589713def8
1 changed files with 55 additions and 18 deletions

View File

@ -675,6 +675,59 @@ begin
continue; continue;
end; end;
// binary literals
if (reader.head^ = '0') then
begin
reader.saveBeginning;
identifier += reader.head^;
if reader.Next^ in ['b', 'B'] then
begin
identifier += reader.head^;
while reader.Next^ in ['0','1','_'] do
identifier += reader.head^;
if (reader.head[0..1] = 'LU') or
(reader.head[0..1] = 'Lu') or
(reader.head[0..1] = 'UL') or
(reader.head[0..1] = 'uL') then
begin
identifier += reader.head[0..1];
reader.Next;
reader.Next;
end else
if reader.head^ in ['L','u','U'] then
begin
identifier += reader.head^;
reader.Next;
end;
if isWhite(reader.head^) or isOperator1(reader.head^) or
isSymbol(reader.head^) then
begin
addToken(ltkNumber);
if callBackDoStop then
exit;
continue;
end
else
begin
while true do
begin
if isWhite(reader.head^) or isOperator1(reader.head^) or
isSymbol(reader.head^) or isOutOfBound then
begin
addToken(ltkIllegal);
break;
if callBackDoStop then
exit;
end;
identifier += reader.head^;
reader.Next;
end;
continue;
end;
end else
reader.previous;
end;
// check negative float '-0.' // check negative float '-0.'
if (reader.head^ = '-') then if (reader.head^ = '-') then
begin begin
@ -702,27 +755,11 @@ begin
// + exponent // + exponent
// float .xxxx // float .xxxx
// binary/hex numbr/float // hex numbr/float
if (reader.head^ = '0') then if (reader.head^ = '0') then
begin begin
reader.saveBeginning; reader.saveBeginning;
identifier += reader.head^; identifier += reader.head^;
if (reader.Next^ in ['b', 'B']) then
begin
identifier += reader.head^;
while isBit(reader.Next^) or (reader.head^ = '_') do
begin
if isOutOfBound then
exit;
identifier += reader.head^;
end;
addToken(ltkNumber);
if callBackDoStop then
exit;
continue;
end
else
reader.previous;
if (reader.Next^ in ['x', 'X']) then if (reader.Next^ in ['x', 'X']) then
begin begin
identifier += reader.head^; identifier += reader.head^;