@@ -193,6 +193,7 @@ ESyntaxError = class(Exception)
193193 property PosXY: TTokenPoint read FPosXY write FPosXY;
194194 end ;
195195
196+ TptTokenKinds = set of TptTokenKind;
196197 TmwSimplePasPar = class (TObject)
197198 private
198199 FOnMessage: TMessageEvent;
@@ -214,7 +215,7 @@ TmwSimplePasPar = class(TObject)
214215 protected
215216 procedure Expected (Sym: TptTokenKind); virtual ;
216217 procedure ExpectedEx (Sym: TptTokenKind); overload; virtual ;
217- procedure ExpectedEx (Syms: array of TptTokenKind ); overload; virtual ;
218+ procedure ExpectedEx (const Syms: TptTokenKinds ); overload; virtual ;
218219 procedure ExpectedFatal (Sym: TptTokenKind); virtual ;
219220 procedure HandlePtCompDirect (Sender: TmwBasePasLex); virtual ;
220221 procedure HandlePtDefineDirect (Sender: TmwBasePasLex); virtual ;
@@ -782,18 +783,24 @@ procedure TmwSimplePasPar.Expected(Sym: TptTokenKind);
782783 NextToken;
783784end ;
784785
785- procedure TmwSimplePasPar.ExpectedEx (Syms: array of TptTokenKind );
786+ procedure TmwSimplePasPar.ExpectedEx (const Syms: TptTokenKinds );
786787var
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]),
796802 FLexer.PosXY.X, FLexer.PosXY.Y);
803+ end ;
797804 end ;
798805end ;
799806
0 commit comments