Skip to content

Commit 69c370e

Browse files
Support binary integers and underscores (Delphi 11)
1 parent 6818fde commit 69c370e

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

Source/SimpleParser/SimpleParser.Lexer.pas

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ TmwBasePasLex = class(TObject)
231231
procedure AmpersandOpProc;
232232
procedure AsciiCharProc;
233233
procedure AnsiProc;
234+
procedure BinaryIntegerProc;
234235
procedure BorProc;
235236
procedure BraceCloseProc;
236237
procedure BraceOpenProc;
@@ -1255,12 +1256,13 @@ procedure TmwBasePasLex.MakeMethodTables;
12551256
#1..#9, #11, #12, #14..#32: FProcTable[I] := SpaceProc;
12561257
'#': FProcTable[I] := AsciiCharProc;
12571258
'$': FProcTable[I] := IntegerProc;
1259+
'%': FProcTable[I] := BinaryIntegerProc;
12581260
#39: FProcTable[I] := StringProc;
12591261
'0'..'9': FProcTable[I] := NumberProc;
12601262
'A'..'Z', 'a'..'z', '_': FProcTable[I] := IdentProc;
12611263
'{': FProcTable[I] := BraceOpenProc;
12621264
'}': FProcTable[I] := BraceCloseProc;
1263-
'!', '"', '%', '&', '('..'/', ':'..'@', '['..'^', '`', '~':
1265+
'!', '"', '&', '('..'/', ':'..'@', '['..'^', '`', '~':
12641266
begin
12651267
case I of
12661268
'(': FProcTable[I] := RoundOpenProc;
@@ -1433,6 +1435,14 @@ procedure TmwBasePasLex.BraceCloseProc;
14331435
FOnMessage(Self, meError, 'Illegal character', PosXY.X, PosXY.Y);
14341436
end;
14351437

1438+
procedure TmwBasePasLex.BinaryIntegerProc;
1439+
begin
1440+
Inc(FBuffer.Run);
1441+
FTokenID := ptIntegerConst;
1442+
while CharInSet(FBuffer.Buf[FBuffer.Run], ['0', '1', '_']) do
1443+
Inc(FBuffer.Run);
1444+
end;
1445+
14361446
procedure TmwBasePasLex.BorProc;
14371447
var
14381448
BeginRun: Integer;
@@ -1863,7 +1873,7 @@ procedure TmwBasePasLex.IntegerProc;
18631873
begin
18641874
Inc(FBuffer.Run);
18651875
FTokenID := ptIntegerConst;
1866-
while CharInSet(FBuffer.Buf[FBuffer.Run], ['0'..'9', 'A'..'F', 'a'..'f']) do
1876+
while CharInSet(FBuffer.Buf[FBuffer.Run], ['0'..'9', 'A'..'F', 'a'..'f', '_']) do
18671877
Inc(FBuffer.Run);
18681878
end;
18691879

@@ -1944,7 +1954,7 @@ procedure TmwBasePasLex.NumberProc;
19441954
begin
19451955
Inc(FBuffer.Run);
19461956
FTokenID := ptIntegerConst;
1947-
while CharInSet(FBuffer.Buf[FBuffer.Run], ['0'..'9', '.', 'e', 'E']) do
1957+
while CharInSet(FBuffer.Buf[FBuffer.Run], ['0'..'9', '.', 'e', 'E', '_']) do
19481958
begin
19491959
case FBuffer.Buf[FBuffer.Run] of
19501960
'.':

Test/Snippets/numbers.pas

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
unit constset;
2+
3+
interface
4+
5+
implementation
6+
7+
procedure Test;
8+
var
9+
A,B,C: Integer;
10+
D: Double;
11+
begin
12+
A := 123123_;
13+
B := $_1241_3_;
14+
C := %_01011;
15+
D := 12_3_.12_3_;
16+
A := 1____________23123_;
17+
B := $_12_________41_3_;
18+
end;
19+
20+
end.

0 commit comments

Comments
 (0)