📄 i_sql_parser.pas
字号:
ELSE display_error('BETWEEN, LIKE, IN, SELECT, =, <, >, <=, >=, <>, CONTAINING, STARTING');
END; // case
END // 2
ELSE // e_1
IF f_symbol_type= e_IS_symbol
THEN BEGIN
read_symbol;
IF f_symbol_type= e_NOT_symbol
THEN
read_symbol;
check(e_NULL_symbol);
read_symbol;
END // 2_3
ELSE display_error('NOT, BETWEEN, LIKE, IN, SELECT, =, <, >, <=, >=, <>, CONTAINING, STARTING, IS');
END; // n
e_ALL_symbol, e_SOME_symbol, e_ANY_symbol :
BEGIN
IF f_symbol_type IN [e_ALL_symbol, e_SOME_symbol, e_ANY_symbol]
THEN read_symbol
ELSE display_error('ALL, SOME, ANY');
check(e_opening_parenthesis_symbol);
read_symbol;
parse_select_column_list;
check(e_closing_parenthesis_symbol);
read_symbol;
END; // n
e_EXISTS_symbol :
BEGIN
read_symbol;
check(e_opening_parenthesis_symbol);
read_symbol;
parse_select_expression;
check(e_closing_parenthesis_symbol);
read_symbol;
END; // n
e_SINGULAR_symbol :
BEGIN
read_symbol;
check(e_opening_parenthesis_symbol);
read_symbol;
parse_select_expression;
check(e_closing_parenthesis_symbol);
read_symbol;
END; // n
e_opening_parenthesis_symbol :
BEGIN
read_symbol;
parse_search_condition;
check(e_closing_parenthesis_symbol);
read_symbol;
END; // n
e_NOT_symbol :
BEGIN
read_symbol;
parse_search_condition;
END; // n
ELSE display_error('VALUE_LITTERAL, ALL, SOME, ANY, EXISTS, SINGULAR, (, NOT');
END; // case
display_trace('< search_value');
END; // parse_search_value
BEGIN // parse_search_condition
display_trace('> search_condition');
parse_search_value;
WHILE f_symbol_type IN [e_OR_symbol, e_AND_symbol] DO
BEGIN
IF f_symbol_type IN [e_OR_symbol, e_AND_symbol]
THEN read_symbol
ELSE display_error('OR, AND');
parse_search_condition;
END; // WHILE {
display_trace('< search_condition');
END; // parse_search_condition
PROCEDURE parse_select;
procedure parse_select_column_name;
begin
display_trace('> select_column_name');
read_symbol;
if f_symbol_type= e_point_symbol
then read_symbol;
if f_symbol_type<> e_comma_symbol
then read_symbol;
display_trace('< select_column_name');
end; // parse_column_name
PROCEDURE parse_from_table_reference;
PROCEDURE parse_procedure_end;
BEGIN
display_trace('> procedure_end');
IF f_symbol_type= e_opening_parenthesis_symbol
THEN BEGIN
read_symbol;
parse_value_litteral;
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_value_litteral;
END; // WHILE {
check(e_closing_parenthesis_symbol);
read_symbol;
END; // IF [
IF f_symbol_type= e_IDENTIFIER_symbol
THEN
parse_alias_name;
display_trace('< procedure_end');
END; // parse_procedure_end
PROCEDURE parse_joined_table;
PROCEDURE parse_join_on;
PROCEDURE parse_join_type;
BEGIN
display_trace('> join_type');
IF f_symbol_type IN [e_INNER_symbol, e_LEFT_symbol, e_RIGHT_symbol,
e_FULL_symbol]
THEN BEGIN
CASE f_symbol_type OF
e_INNER_symbol :
read_symbol;
e_LEFT_symbol :
read_symbol;
e_RIGHT_symbol :
read_symbol;
e_FULL_symbol :
BEGIN
read_symbol;
IF f_symbol_type= e_OUTER_symbol
THEN
read_symbol;
END; // n
ELSE display_error('INNER, LEFT, RIGHT, FULL');
END; // case
END; // IF [
check(e_JOIN_symbol);
read_symbol;
display_trace('< join_type');
END; // parse_join_type
BEGIN // parse_join_on
display_trace('> join_on');
parse_join_type;
// -- DUPS NAME
IF f_symbol_type IN [e_opening_parenthesis_symbol, e_IDENTIFIER_symbol]
THEN
parse_joined_table
ELSE // e_1
IF f_symbol_type= e_IDENTIFIER_symbol
THEN
parse_name_view_procedure
ELSE display_error('(, NAME, NAME');
check(e_ON_symbol);
read_symbol;
parse_search_condition;
display_trace('< join_on');
END; // parse_join_on
BEGIN // parse_joined_table
display_trace('> joined_table');
IF f_symbol_type= e_IDENTIFIER_symbol
THEN BEGIN
parse_name_view_procedure;
parse_join_on;
END // 2
ELSE // e_1
IF f_symbol_type= e_opening_parenthesis_symbol
THEN BEGIN
read_symbol;
parse_joined_table;
check(e_closing_parenthesis_symbol);
read_symbol;
END // 2_3
ELSE display_error('NAME, (');
WHILE f_symbol_type IN [e_INNER_symbol, e_LEFT_symbol, e_RIGHT_symbol,
e_FULL_symbol, e_JOIN_symbol] DO
parse_join_on;
display_trace('< joined_table');
END; // parse_joined_table
BEGIN // parse_from_table_reference
display_trace('> from_table_reference');
// -- DUPS NAME
IF f_symbol_type= e_IDENTIFIER_symbol
THEN BEGIN
read_symbol;
parse_procedure_end;
END // 2
ELSE // e_1
IF f_symbol_type IN [e_opening_parenthesis_symbol, e_IDENTIFIER_symbol]
THEN
parse_joined_table
ELSE display_error('NAME, (, NAME');
display_trace('< table_reference');
END; // parse_from_table_reference
PROCEDURE parse_order_list;
PROCEDURE parse_ascending_or_descending;
BEGIN
display_trace('> ascending_or_descending');
IF f_symbol_type IN [e_ASC_symbol, e_ASCENDING_symbol, e_DESC_symbol,
e_DESCENDING_symbol]
THEN read_symbol
ELSE display_error('ASC, ASCENDING, DESC, DESCENDING');
display_trace('< ascending_or_descending');
END; // parse_ascending_or_descending
BEGIN // parse_order_list
display_trace('> order_list');
IF f_symbol_type= e_IDENTIFIER_symbol
THEN
parse_column_name
ELSE // e_1
IF f_symbol_type= e_INTEGER_symbol
THEN
parse_integer_litteral
ELSE display_error('NAME, INTEGER');
IF f_symbol_type= e_COLLATE_symbol
THEN BEGIN
read_symbol;
parse_collation_name;
END; // IF [
IF f_symbol_type IN [e_ASC_symbol, e_ASCENDING_symbol, e_DESC_symbol,
e_DESCENDING_symbol]
THEN
parse_ascending_or_descending;
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_order_list;
END; // WHILE {
display_trace('< order_list');
END; // parse_order_list
BEGIN // parse_select
display_trace('> select');
check(e_SELECT_symbol);
read_symbol;
IF f_symbol_type IN [e_DISTINCT_symbol, e_ALL_symbol]
THEN BEGIN
IF f_symbol_type IN [e_DISTINCT_symbol, e_ALL_symbol]
THEN read_symbol
ELSE display_error('DISTINCT, ALL');
END; // IF [
CASE f_symbol_type OF
e_multiply_symbol :
read_symbol;
e_ALL_symbol, e_DISTINCT_symbol,
e_AVG_symbol, e_COUNT_symbol,
e_MAX_symbol, e_MIN_symbol,
e_SUM_symbol, e_UPPER_symbol :
parse_functions;
e_IDENTIFIER_symbol :
BEGIN
parse_select_column_name;
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_value_litteral;
END; // WHILE {
END; // n
ELSE display_error('*, AVG, COUNT, ALL, DISTINCT, VALUE_LITTERAL, NAME, MAX, MIN, SUM, UPPER,'
+ 'VALUE_LITTERAL, NAME');
END; // case
check(e_FROM_symbol);
read_symbol;
parse_from_table_reference;
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_from_table_reference;
END; // WHILE {
IF f_symbol_type= e_WHERE_symbol
THEN BEGIN
read_symbol;
parse_search_condition;
END; // IF [
IF f_symbol_type= e_GROUP_symbol
THEN BEGIN
read_symbol;
check(e_BY_symbol);
read_symbol;
parse_column_name;
IF f_symbol_type= e_COLLATE_symbol
THEN BEGIN
read_symbol;
parse_collation_name;
END; // IF [
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_column_name;
IF f_symbol_type= e_COLLATE_symbol
THEN BEGIN
read_symbol;
parse_collation_name;
END; // IF [
END; // WHILE {
END; // IF [
IF f_symbol_type= e_HAVING_symbol
THEN BEGIN
read_symbol;
parse_search_condition;
END; // IF [
IF f_symbol_type= e_UNION_symbol
THEN BEGIN
read_symbol;
parse_select_expression;
IF f_symbol_type= e_ALL_symbol
THEN
read_symbol;
END; // IF [
IF f_symbol_type= e_ORDER_symbol
THEN BEGIN
read_symbol;
check(e_BY_symbol);
read_symbol;
parse_order_list;
END; // IF [
(*
IF f_symbol_type= e_GROUP_symbol
THEN BEGIN
read_symbol;
check(e_BY_symbol);
read_symbol;
parse_column_name;
IF f_symbol_type= e_COLLATE_symbol
THEN BEGIN
read_symbol;
parse_collation_name;
END; // IF [
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_column_name;
IF f_symbol_type= e_COLLATE_symbol
THEN BEGIN
read_symbol;
parse_collation_name;
END; // IF [
END; // WHILE {
IF f_symbol_type= e_HAVING_symbol
THEN BEGIN
read_symbol;
parse_search_condition;
END; // IF [
IF f_symbol_type= e_UNION_symbol
THEN BEGIN
read_symbol;
parse_select_expression;
IF f_symbol_type= e_ALL_symbol
THEN
read_symbol;
END; // IF [
IF f_symbol_type= e_ORDER_symbol
THEN BEGIN
read_symbol;
check(e_BY_symbol);
read_symbol;
parse_order_list;
END; // IF [
END; // IF [
*)
display_trace('< select');
END; // parse_select
PROCEDURE parse_update;
BEGIN
display_trace('> update');
check(e_UPDATE_symbol);
read_symbol;
parse_table_or_view_name;
check(e_SET_symbol);
read_symbol;
parse_column_name;
check(e_equal_symbol);
read_symbol;
parse_value_litteral;
WHILE f_symbol_type= e_comma_symbol DO
BEGIN
read_symbol;
parse_column_name;
check(e_equal_symbol);
read_symbol;
parse_value_litteral;
END; // WHILE {
IF f_symbol_type= e_WHERE_symbol
THEN BEGIN
read_symbol;
parse_search_condition;
END; // IF [
display_trace('< update');
END; // parse_update
BEGIN // parse_sql
display_trace('> sql');
CASE f_symbol_type OF
e_INSERT_symbol :
parse_insert;
e_SELECT_symbol :
parse_select;
e_UPDATE_symbol :
parse_update;
ELSE display_error('INSERT, SELECT, UPDATE');
END; // case
display_trace('< sql');
END; // parse_sql
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -