📄 u_sql_symbol_types.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 + -