Changeset 126 for branches/generator/URules.pas
- Timestamp:
- Nov 30, 2017, 12:02:32 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/generator/URules.pas
r125 r126 120 120 procedure LoadFromXmlFile(FileName: string); 121 121 procedure SaveToXmlFile(FileName: string); 122 procedure Clear; 122 123 constructor Create; 123 124 destructor Destroy; override; … … 148 149 ParserFile := TStringList.Create; 149 150 with ParserFile do begin 150 Add('unit Parse ;');151 Add('unit Parser;'); 151 152 Add(''); 152 153 Add('{$MODE Delphi}'); … … 158 159 Add(' Content: string;'); 159 160 Add(' Position: Integer;'); 161 Add(' procedure Error(Text: string);'); 160 162 Add(' function Expect(Text: string; Required: Boolean = False): Boolean;'); 161 163 Add(' function ExpectRange(CharFrom, CharTo: Char; Required: Boolean = False): Boolean;'); 162 164 for Rule in Rules do 163 165 Add(' function Parse' + Rule.Name + ': Boolean;'); 166 Add(' constructor Create;'); 164 167 Add(' end;'); 165 168 Add(''); 166 169 Add('implementation'); 170 Add(''); 171 Add('constructor TParser.Create;'); 172 Add('begin'); 173 Add(' Position := 1;'); 174 Add('end;'); 175 Add(''); 176 Add('procedure TParser.Error(Text: string);'); 177 Add('begin'); 178 Add(' WriteLn(''Error: '' + Text);'); 179 Add('end;'); 167 180 Add(''); 168 181 Add('function TParser.Expect(Text: string; Required: Boolean = False): Boolean;'); … … 172 185 Add(' ReadText := Copy(Content, Position, Length(Text));'); 173 186 Add(' Inc(Position, Length(Text));'); 174 Add(' Result := Text = ReadText ');187 Add(' Result := Text = ReadText;'); 175 188 Add(' if not Result and Required then Error(''Expected '' + Text + '' but found '' + ReadText + ''.'');'); 176 189 Add('end;'); … … 242 255 Add('procedure Compile(FileName: string);'); 243 256 Add('var'); 244 Add(' SourceFile: Text;'); 257 Add(' SourceFile: file of Char;'); 258 Add(' Parser: TParser;'); 259 Add(' I: Integer;'); 245 260 Add('begin'); 246 261 Add(' AssignFile(SourceFile, FileName);'); 247 262 Add(' Reset(SourceFile);'); 248 Add(' SetLength(Content, FileSize(SourceFile));');249 263 Add(' Parser := TParser.Create;'); 250 Add(' Read(SourceFile, Parser.Content);'); 264 Add(' SetLength(Parser.Content, FileSize(SourceFile));'); 265 Add(' I := 1;'); 266 Add(' while not Eof(SourceFile) do begin'); 267 Add(' Read(SourceFile, Parser.Content[I]);'); 268 Add(' Inc(I);'); 269 Add(' end;'); 251 270 Add(' CloseFile(SourceFile);'); 252 271 if Assigned(TopRule) then … … 256 275 Add(''); 257 276 Add('begin'); 258 Add(' if ParamCount > 1 then'); 259 Add(' Compile(ParamStr(1));'); 277 Add(' if ParamCount > 0 then'); 278 Add(' Compile(ParamStr(1))'); 279 Add(' else WriteLn(''File name not specified as parameter.'');'); 260 280 Add('end.'); 261 281 SaveToFile(FileName); … … 269 289 Item: TRuleItem; 270 290 SourceFile: TStringList; 291 TypeSectionStarted: Boolean; 271 292 begin 272 293 SourceFile := TStringList.Create; … … 281 302 Add(' fgl;'); 282 303 Add(''); 283 Add('type');304 TypeSectionStarted := False; 284 305 for Rule in Rules do 285 306 if Rule.CreateSourceNode then begin 307 if not TypeSectionStarted then begin 308 Add('type'); 309 TypeSectionStarted := True; 310 end; 286 311 Add(' T' + Rule.Name + ' = class;'); 287 312 end; … … 365 390 end; 366 391 392 procedure TGrammer.Clear; 393 begin 394 TopRule := nil; 395 Rules.Clear; 396 end; 397 367 398 constructor TGrammer.Create; 368 399 begin
Note:
See TracChangeset
for help on using the changeset viewer.