mirror of https://gitlab.com/basile.b/dexed.git
lexer (not-HL), add dedicated bin literal scanner
This commit is contained in:
parent
1655300dfe
commit
589713def8
|
|
@ -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^;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue