📄 u_c_sql_parser.pas
字号:
// 002 u_c_sql_parser
// 04 feb 2005
(*$r+*)
// -- (C) Felix John COLIBRI 2004
// -- documentation: http://www.felix-colibri.com
unit u_c_sql_parser;
interface
uses Classes, u_c_basic_object
, u_sql_symbol_types
, u_c_sql_scanner
;
type c_sql_parser= Class(c_basic_object)
m_trace_parser: Boolean;
m_c_sql_scanner_ref: c_sql_scanner;
m_pure_parsing: Boolean;
constructor create_sql_parser(p_name: String);
procedure display_trace(p_text: String);
procedure display_error(p_text: string);
function f_symbol_type: t_sql_symbol_type;
function f_symbol_string: String;
procedure read_symbol;
procedure check(p_sql_symbol_type: t_sql_symbol_type);
procedure check_set(p_sql_symbol_type_set: t_sql_symbol_type_set);
procedure start_parsing;
procedure parse_sql;
end; // c_sql_parser
implementation
uses SysUtils, u_c_display, u_strings;
constructor c_sql_parser.create_sql_parser(p_name: String);
begin
Inherited create_basic_object(p_name);
end; // create_sql_parser
procedure c_sql_parser.display_trace(p_text: String);
var l_start, l_text: String;
begin
if m_trace_parser
then begin
l_start:= Copy(p_text, 1, 2);
l_text:= p_text;
Delete(l_text, 1, 2);
with m_c_sql_scanner_ref do
// display(l_start+ Format('%7d %-15s %-10s ',
display(l_start+ Format('%3d %-7s ',
[m_buffer_index, m_symbol_string])
+ f_sql_symbol_type_name(m_sql_symbol_type)
+ ' | '+ l_text);
end;
end; // display_trace
procedure c_sql_parser.display_error(p_text: string);
begin
display_bug_halt(p_text);
end; // display_error
function c_sql_parser.f_symbol_type: t_sql_symbol_type;
begin
Result:= m_c_sql_scanner_ref.m_sql_symbol_type;
end; // f_symbol_type
function c_sql_parser.f_symbol_string: String;
begin
Result:= m_c_sql_scanner_ref.m_symbol_string;
end; // f_symbol_string
procedure c_sql_parser.read_symbol;
begin
m_c_sql_scanner_ref.f_read_symbol;
end; // read_symbol
procedure c_sql_parser.check(p_sql_symbol_type: t_sql_symbol_type);
begin
if f_symbol_type= p_sql_symbol_type
then
else display_error('expected '+ f_sql_symbol_type_name(p_sql_symbol_type)
+ ' but_found '+ f_sql_symbol_type_name(f_symbol_type));
end; // check
procedure c_sql_parser.check_set(p_sql_symbol_type_set: t_sql_symbol_type_set);
begin
if f_symbol_type in p_sql_symbol_type_set
then
else display_error('expected '+ f_sql_symbol_type_set_name(p_sql_symbol_type_set)
+ ' but_found '+ f_sql_symbol_type_name(f_symbol_type));
end; // c_sql_parser.
procedure c_sql_parser.start_parsing;
begin
if not m_c_sql_scanner_ref.f_initialized
then display_bug_halt('could_not_initialize_scanner');
end; // start_parsing
procedure c_sql_parser.parse_sql;
(*$i i_sql_parser.pas *)
(* $i i_pure_sql_parser.pas *)
begin // parse_sql
start_parsing;
read_symbol;
display('parse');
if m_pure_parsing
then begin
repeat
parse_sql;
until f_symbol_type= e_end_of_parse_symbol;
end
else ; // parse_sql;
end; // parse_sql
begin // u_c_sql_parser
end. // u_c_sql_parser
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -