@@ -193,6 +193,7 @@ ESyntaxError = class(Exception)
193
193
property PosXY: TTokenPoint read FPosXY write FPosXY;
194
194
end ;
195
195
196
+ TptTokenKinds = set of TptTokenKind;
196
197
TmwSimplePasPar = class (TObject)
197
198
private
198
199
FOnMessage: TMessageEvent;
@@ -214,7 +215,7 @@ TmwSimplePasPar = class(TObject)
214
215
protected
215
216
procedure Expected (Sym: TptTokenKind); virtual ;
216
217
procedure ExpectedEx (Sym: TptTokenKind); overload; virtual ;
217
- procedure ExpectedEx (Syms: array of TptTokenKind ); overload; virtual ;
218
+ procedure ExpectedEx (const Syms: TptTokenKinds ); overload; virtual ;
218
219
procedure ExpectedFatal (Sym: TptTokenKind); virtual ;
219
220
procedure HandlePtCompDirect (Sender: TmwBasePasLex); virtual ;
220
221
procedure HandlePtDefineDirect (Sender: TmwBasePasLex); virtual ;
@@ -782,18 +783,24 @@ procedure TmwSimplePasPar.Expected(Sym: TptTokenKind);
782
783
NextToken;
783
784
end ;
784
785
785
- procedure TmwSimplePasPar.ExpectedEx (Syms: array of TptTokenKind );
786
+ procedure TmwSimplePasPar.ExpectedEx (const Syms: TptTokenKinds );
786
787
var
787
- Sym, S: TptTokenKind;
788
- Found: boolean;
789
- begin
790
- Found:= false;
791
- for S in Syms do begin
792
- Found:= (S = Lexer.ExID);
793
- if (Found) then break;
794
- end ;
795
- FOnMessage(Self, meError, Format(rsExpected, [' EX:' + TokenName(Sym), FLexer.Token]),
788
+ Sym: TptTokenKind;
789
+ Symbols: string;
790
+ Optional: string;
791
+ begin
792
+ if (Lexer.ExID in Syms) then NextToken
793
+ else if (Lexer.TokenID = ptNull) or Assigned(FOnMessage) then begin
794
+ for Sym in Syms do begin
795
+ Symbols:= Symbols + Optional + TokenName(Sym);
796
+ Optional:= ' or ' ;
797
+ end ;
798
+ if (Lexer.TokenID = ptNull) then
799
+ raise ESyntaxError.CreatePos(Format(rsExpected, [Symbols, rsEndOfFile]), FLexer.PosXY)
800
+ else if Assigned(FOnMessage) then begin
801
+ FOnMessage(Self, meError, Format(rsExpected, [' EX:' + Symbols, FLexer.Token]),
796
802
FLexer.PosXY.X, FLexer.PosXY.Y);
803
+ end ;
797
804
end ;
798
805
end ;
799
806
0 commit comments