parsedef.pas
上传用户:yjb1804
上传日期:2021-01-30
资源大小:3105k
文件大小:4k
源码类别:

Email服务器

开发平台:

Delphi

  1. unit parsedef;
  2. (*
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  *
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  *
  13.  * This code was inspired to expidite the creation of unit tests 
  14.  * for use the Dunit test frame work.
  15.  * 
  16.  * The Initial Developer of XPGen is Michael A. Johnson.
  17.  * Portions created The Initial Developer is Copyright (C) 2000.
  18.  * Portions created by The DUnit Group are Copyright (C) 2000.
  19.  * All rights reserved.
  20.  *
  21.  * Contributor(s):
  22.  * Michael A. Johnson <majohnson@golden.net>
  23.  * Juanco A馿z <juanco@users.sourceforge.net>
  24.  * Chris Morris <chrismo@users.sourceforge.net>
  25.  * Jeff Moore <JeffMoore@users.sourceforge.net>
  26.  * The DUnit group at SourceForge <http://dunit.sourceforge.net>
  27.  *
  28.  *)
  29. {
  30. Unit        : parsedef
  31. Description : provides an enumeration of reserved words and a map for determing
  32.               the "type" of a token
  33. Programmer  : Michael Johnson
  34. Date        : 30-Jun-2000
  35. }
  36. interface
  37. type
  38. token_enum =
  39. ( kw_comma,kw_quote,kw_colon,kw_ptr,kw_equal,kw_openParen, kw_closeParen, kw_openBracket, kw_closeBracket,
  40.   kw_semi, kw_endPr, kw_type, kw_and, kw_array,
  41.   kw_as, kw_asm, kw_begin, kw_case, kw_class,
  42.   kw_const, kw_constructor, kw_destructor, kw_dispinterface, kw_div,
  43.   kw_do, kw_downto, kw_else, kw_end, kw_except, kw_exports,
  44.   kw_file, kw_finalization, kw_finally, kw_for, kw_function, kw_goto,
  45.   kw_if, kw_implementation, kw_in, kw_inherited, kw_initialization, kw_inline,
  46.   kw_interface, kw_is, kw_label, kw_library, kw_mod, kw_nil,
  47.   kw_not, kw_object, kw_of, kw_or, kw_out, kw_packed,
  48.   kw_procedure, kw_program, kw_property, kw_raise, kw_record, kw_repeat,
  49.   kw_resourcestring, kw_set, kw_shl, kw_shr, kw_string, kw_then,
  50.   kw_threadvar, kw_to, kw_try,kw_unit, kw_until,
  51.   kw_uses, kw_var, kw_while, kw_with, kw_xor, kw_private,
  52.   kw_protected, kw_public, kw_published, kw_automated, kw_ident);
  53.   MethodVisibility = kw_private..kw_automated;
  54.   
  55. const
  56.   token_map : array[token_enum] of string =
  57.     (',', '''',':','^','=','(', ')', '[', ']',
  58.     ';', '.', 'type', 'and', 'array',
  59.     'as', 'asm', 'begin', 'case', 'class',
  60.     'const', 'constructor', 'destructor', 'dispinterface', 'div',
  61.     'do', 'downto', 'else', 'end', 'except', 'exports',
  62.     'file', 'finalization', 'finally', 'for', 'function', 'goto',
  63.     'if', 'implementation', 'in', 'inherited', 'initialization', 'inline',
  64.     'interface', 'is', 'label', 'library', 'mod', 'nil',
  65.     'not', 'object', 'of', 'or', 'out', 'packed',
  66.     'procedure', 'program', 'property', 'raise', 'record', 'repeat',
  67.     'resourcestring', 'set', 'shl', 'shr', 'string', 'then',
  68.     'threadvar', 'to', 'try', 'unit', 'until',
  69.     'uses', 'var', 'while', 'with', 'xor', 'private',
  70.     'protected', 'public', 'published', 'automated', ''
  71.     );
  72. function TokenToTokenType(token: string): token_enum;
  73. implementation
  74. uses
  75.   SysUtils;
  76.   
  77. function TokenToTokenType(token: string): token_enum;
  78. {
  79. Function    : TokenToTokenType
  80. Description : maps the input token to a token type, if nothing matches it falls
  81.               into the category of ident
  82. Input       : token to match
  83. Output      : matched dotken
  84. Programmer  : mike
  85. Date        : 30-Jun-2000
  86. }
  87. { TODO -oMichael Johnons -cOptimization : re-implement this search with either a hash table or a BST at the very least to increase the lookup speed }
  88. var
  89.   iter: token_enum;
  90. begin
  91.   result := kw_ident;                   { assume an identifier }
  92.   token := lowercase(token);
  93.   for iter := low(token_enum) to high(token_enum) do
  94.     begin
  95.       if token_map[iter] = token then
  96.         begin
  97.           result := iter;
  98.           { stop looping when we get here }
  99.         end;
  100.     end;
  101. end;
  102. end.
  103.