September 16
功能: 将字符串序列Token化的通用 Tokenizer 类。
分析
Token 类型分为两类,
- SimpleToken,
- ComplexToken。
SimpleToken: 是由固定的字符串序列组成, eg, ';' 。
ComplexToken: 由起始 Token,结束Token 以及夹在其间的字符串组成,如,注释和字符串。
ComplexToken 的处理方式有: tfEscapeDuplicateToken, tfOneLine, tfEscapeChar。
- tfOneLine: 表示只处理1行
- tfEscapeDuplicateToken: 是否处理转义TokenEnd符号,当双写TokenEnd符号时候表示,一个TokenEnd符号,如: '''',表示一个单引号。
- tfEscapeChar: 是否启用 EscapeChar 转义字符串序列的下一个字符. 转义字符在属性 EscapeChar 中设置. DeQuotedString只处理转义自身和转义TokenEnd符号,如果有其它字符转义你需要重载 DoEscapedChar或联系OnEscapedChar事件。
加入新的TokenId
简单类型的TokenId:
ttArgSpliter := 32;
SimpleTokens.AddStandardToken(ttSpliter, ';');
SimpleTokens.Add(ttArgSpliter, ',');
复杂类型的 TokenId:
Tokens.AddStandardToken(ttComment, '//', '', [tfOneLine]);
Tokens.Add(aTokenId, aTokenBegin, aTokenEnd, aTokenFlags);
通过LoadFromXX加载待处理的字符流,调用 ReadToken 方法对字符流进行 Token化。
属性和事件:
- IgnoreCase: 是否忽略大小写
- BlankChars: 哪些字符是需要忽略的空白字符
- EscapeChar: 在 ComplexToken 中的转义字符定义,如果为空,则无转义
- property Errors: PMeTokenErrors read GetErrors; 收集在Tokenize过程中发生的错误,如果无错误,Errors.Count =0.
- property CurrentToken: TMeToken read FCurrentToken;
- property SimpleTokens: PMeSimpleTokenTypes read FSimpleTokens;
- property Tokens: PMeComplexTokenTypes read FTokens;
- property OnEscapedChar: TMeEscapedCharEvent read FOnEscapedChar write FOnEscapedChar;
- property OnComment: TMeOnCommentEvent read FOnComment write FOnComment;
方法:
- function HasTokens: Boolean;
- function ReadToken: PMeToken; 从字符流中读入一个Token,如果返回nil表示再无Token可读。
- function NextToken: PMeToken; 返回当前字符流中的下一个Token。
- procedure LoadFromStream(const Stream: PMeStream); 加载待处理的字符流。
- procedure LoadFromFile(const FileName: string); 从文件加载待处理的字符流。
- procedure LoadFromString(const aValue: string);
- procedure Clear;
- function DeQuotedString(const aToken: PMeToken): string; 如果aToken是ComplexToken那么将该Token 作 DeQuotedString 处理.