⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_sql_symbol_types.pas

📁 delphi实现的sql解析器
💻 PAS
字号:
// 002 u_sql_symbol_types
// 04 feb 2005

// -- (C) Felix John COLIBRI 2004
// -- documentation: http://www.felix-colibri.com

(*$r+*)

unit u_sql_symbol_types;
  interface
    uses Classes, u_types_constants;

    type t_sql_symbol_type= (e_unknown_symbol,
                             e_integer_litteral_symbol,
                             e_double_litteral_symbol,
                             e_string_litteral_symbol,

                             e_start_punctuation,
                             e_multiply_symbol, // *
                             e_semi_colon_symbol, // ;
                             e_comma_symbol, // ,
                             e_point_symbol, // .
                             e_colon_symbol, // :
                             e_equal_symbol, // =
                             e_lower_symbol, // <
                             e_greater_symbol, // >

                             e_opening_parenthesis_symbol, // (
                             e_closing_parenthesis_symbol, // )

                             e_lower_or_equal_symbol, // <=
                             e_greater_or_equal_symbol, // >=
                             e_different_symbol, // <>
                             e_end_punctuation,

                             e_identifier_start,
                               e_SELECT_symbol,
                               e_INSERT_symbol,
                               e_UPDATE_symbol,
                               e_FROM_symbol,
                               e_WHERE_symbol,
                               e_GROUP_symbol,
                               e_BY_symbol,

                               e_AND_symbol,
                               e_OR_symbol,
                               e_NOT_symbol,

                               e_ALL_symbol,
                               e_ANY_symbol,

                               e_ASC_symbol,
                               e_ASCENDING_symbol,
                               e_BETWEEN_symbol,
                               e_COLLATE_symbol,
                               e_CONTAINING_symbol,
                               e_DESC_symbol,
                               e_DESCENDING_symbol,
                               e_DISTINCT_symbol,
                               e_ESCAPE_symbol,
                               e_EXISTS_symbol,
                               e_FULL_symbol,
                               e_HAVING_symbol,
                               e_IN_symbol,
                               e_INNER_symbol,
                               e_INTEGER_symbol,
                               e_INTO_symbol,
                               e_IS_symbol,
                               e_JOIN_symbol,
                               e_LEFT_symbol,
                               e_LIKE_symbol,
                               e_NULL_symbol,
                               e_ON_symbol,
                               e_ORDER_symbol,
                               e_OUTER_symbol,
                               e_RIGHT_symbol,
                               e_SET_symbol,
                               e_SINGULAR_symbol,
                               e_SOME_symbol,
                               e_STARTING_symbol,
                               e_UNION_symbol,
                               e_VALUES_symbol,
                               e_WITH_symbol,

                               e_AVG_symbol,
                               e_COUNT_symbol,
                               e_MAX_symbol,
                               e_MIN_symbol,
                               e_SUM_symbol,
                               e_UPPER_symbol,

                             e_identifier_symbol,

                             e_end_of_parse_symbol
                         );

          t_sql_symbol_type_set= set of t_sql_symbol_type;

    const k_sql_litteral_symbol_set= [e_integer_litteral_symbol,
              e_double_litteral_symbol, e_string_litteral_symbol];
          k_sql_litteral_and_identifier_symbol_set= k_sql_litteral_symbol_set
              + [e_identifier_symbol, e_colon_symbol];

    function f_sql_symbol_type_name(p_sql_symbol_type: t_sql_symbol_type): String;
    function f_sql_symbol_type_set_name(p_sql_symbol_type_set: t_sql_symbol_type_set): String;
    function f_sql_identifier_type(p_symbol_string: String): t_sql_symbol_type;

  implementation
    uses SysUtils, Dialogs, TypInfo, u_c_display;

    var s_sql_key_word_array: array[Succ(e_identifier_start)..e_identifier_symbol] of String;

    procedure initialize_identifier_type_names;
      var l_identifier_type: t_sql_symbol_type;
      begin
        for l_identifier_type:= Succ(e_identifier_start) to Pred(e_identifier_symbol) do
          s_sql_key_word_array[l_identifier_type]:= LowerCase(f_sql_symbol_type_name(l_identifier_type));
      end; // initialize_identifier_type_names

    function f_sql_symbol_type_name(p_sql_symbol_type: t_sql_symbol_type): String;
      begin
        // if p_sql_symbol_type in [Succ(e_start_punctuation)..Pred(e_end_punctuation)]

        Result:= GetEnumName(TypeInfo(t_sql_symbol_type), Integer(p_sql_symbol_type));
        Delete(Result, 1, 2);
        Delete(Result, Length(Result)- Length('_symbol')+ 1, Length('_symbol'));
      end; // f_sql_symbol_type_name

    function f_sql_symbol_type_set_name(p_sql_symbol_type_set: t_sql_symbol_type_set): String;
      var l_symbol_type: t_sql_symbol_type;
      begin
        Result:= '';
        for l_symbol_type:= Succ(e_unknown_symbol) to Pred(e_end_of_parse_symbol) do
          if l_symbol_type in p_sql_symbol_type_set
            then Result:= Result+ f_sql_symbol_type_name(l_symbol_type)+ ' ';
      end; // f_sql_symbol_type_set_name

    function f_sql_identifier_type(p_symbol_string: String): t_sql_symbol_type;
      var l_lower_case_symbol_string: String;
      begin
        l_lower_case_symbol_string:= LowerCase(p_symbol_string);
        s_sql_key_word_array[e_identifier_symbol]:= l_lower_case_symbol_string;
        Result:= e_identifier_start;
        repeat
          Result:= Succ(Result);
        until s_sql_key_word_array[Result]= l_lower_case_symbol_string;
      end; // f_sql_identifier_type
(*
    function f_symbol_to_type(p_symbol_type_name: String): String;
      begin
        Result:= '';

        if p_symbol_type_name= 'integer'
          then Result:= 'Integer' else
        if p_symbol_type_name= 'double'
          then Result:= 'Double' else
        if p_symbol_type_name= 'string_litteral'
          then Result:= 'String' else
        if (p_symbol_type_name= 'TRUE') or (p_symbol_type_name= 'FALSE')
          then Result:= 'Boolean' else
        if p_symbol_type_name= 'identifier'
          then Result:= 't_xxx_type' else
        if p_symbol_type_name= 'class'
          then Result:= 'xxx_class' else
      end; // f_symbol_to_type
*)

    begin // c_sql_scanner
      initialize_identifier_type_names;
    end. // c_sql_scanner


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -