Ignore:
Timestamp:
Nov 10, 2009, 4:15:47 PM (15 years ago)
Author:
george
Message:
  • Upraveno: Vylepšeny třídy pro analýzu gramatiky.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/Void/UGrammer.pas

    r18 r19  
    66
    77uses
    8   Classes, SysUtils, fgl;
     8  Classes, SysUtils, fgl, UTokenizer;
    99
    1010type
     
    1212  TRuleItemType = (itTerminal, itNonterminal);
    1313
     14  TGrammerRule = class;
     15  TGrammer = class;
     16
     17  THandleEvent = procedure (GrammerRule: TGrammerRule) of object;
     18
    1419  TGrammerItem = class
     20  private
     21    Parent: TGrammerRule;
     22  public
     23    TokenType: TTokenType;
     24    Rule: TGrammerRule;
    1525    ItemType: TRuleItemType;
    1626    Optional: Boolean;
    1727    Repetition: Boolean;
     28    Text: string;
    1829  end;
    1930
    2031  TGrammerItemList = specialize TFPGObjectList<TGrammerItem>;
    2132
     33  { TGrammerRule }
     34
    2235  TGrammerRule = class
     36  private
     37    FOnHandle: THandleEvent;
     38    Parent: TGrammer;
     39  public
    2340    Name: string;
    2441    RuleType: TRuleType;
    2542    Items: TGrammerItemList;
     43    procedure AddTerminal(AText: string; ATokenType: TTokenType; AOptional, ARepetition: Boolean);
     44    procedure AddRule(ARule: TGrammerRule; AOptional, ARepetition: Boolean);
    2645    constructor Create;
    2746    destructor Destroy; override;
     47    property OnHandle: THandleEvent read FOnHandle write FOnHandle;
    2848  end;
    2949
    3050  TGrammerRuleList = specialize TFPGObjectList<TGrammerRule>;
    31 
    32   { TGrammer }
    3351
    3452  TGrammer = class
     
    4058
    4159implementation
     60
     61procedure TGrammerRule.AddTerminal(AText: string; ATokenType: TTokenType; AOptional, ARepetition: Boolean
     62  );
     63begin
     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;
     72end;
     73
     74procedure TGrammerRule.AddRule(ARule: TGrammerRule; AOptional,
     75  ARepetition: Boolean);
     76begin
     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;
     84end;
    4285
    4386constructor TGrammerRule.Create;
Note: See TracChangeset for help on using the changeset viewer.