Changeset 19 for branches/Void/UGrammer.pas
- Timestamp:
- Nov 10, 2009, 4:15:47 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Void/UGrammer.pas
r18 r19 6 6 7 7 uses 8 Classes, SysUtils, fgl ;8 Classes, SysUtils, fgl, UTokenizer; 9 9 10 10 type … … 12 12 TRuleItemType = (itTerminal, itNonterminal); 13 13 14 TGrammerRule = class; 15 TGrammer = class; 16 17 THandleEvent = procedure (GrammerRule: TGrammerRule) of object; 18 14 19 TGrammerItem = class 20 private 21 Parent: TGrammerRule; 22 public 23 TokenType: TTokenType; 24 Rule: TGrammerRule; 15 25 ItemType: TRuleItemType; 16 26 Optional: Boolean; 17 27 Repetition: Boolean; 28 Text: string; 18 29 end; 19 30 20 31 TGrammerItemList = specialize TFPGObjectList<TGrammerItem>; 21 32 33 { TGrammerRule } 34 22 35 TGrammerRule = class 36 private 37 FOnHandle: THandleEvent; 38 Parent: TGrammer; 39 public 23 40 Name: string; 24 41 RuleType: TRuleType; 25 42 Items: TGrammerItemList; 43 procedure AddTerminal(AText: string; ATokenType: TTokenType; AOptional, ARepetition: Boolean); 44 procedure AddRule(ARule: TGrammerRule; AOptional, ARepetition: Boolean); 26 45 constructor Create; 27 46 destructor Destroy; override; 47 property OnHandle: THandleEvent read FOnHandle write FOnHandle; 28 48 end; 29 49 30 50 TGrammerRuleList = specialize TFPGObjectList<TGrammerRule>; 31 32 { TGrammer }33 51 34 52 TGrammer = class … … 40 58 41 59 implementation 60 61 procedure TGrammerRule.AddTerminal(AText: string; ATokenType: TTokenType; AOptional, ARepetition: Boolean 62 ); 63 begin 64 with Items[Items.Add(TGrammerItem.Create)] do begin 65 ItemType := itTerminal; 66 TokenType := ATokenType; 67 Text := AText; 68 Optional := AOptional; 69 Repetition := ARepetition; 70 Parent := Self; 71 end; 72 end; 73 74 procedure TGrammerRule.AddRule(ARule: TGrammerRule; AOptional, 75 ARepetition: Boolean); 76 begin 77 with Items[Items.Add(TGrammerItem.Create)] do begin 78 ItemType := itNonterminal; 79 Rule := ARule; 80 Optional := AOptional; 81 Repetition := ARepetition; 82 Parent := Self; 83 end; 84 end; 42 85 43 86 constructor TGrammerRule.Create;
Note:
See TracChangeset
for help on using the changeset viewer.