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

📄 scanner1.pas

📁 控件名称:WINZEOS.ZIP 2002年08月03日 作者:CapellaDevelopment Zeos系列构件套件包含一组可直接存取Linux知名的免费数据库MySQL、Postgre
💻 PAS
字号:
unit Scanner1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ZScanner, ZToken, ZSqlScanner, ZSqlTypes;

type
  TfrmMain = class(TForm)
    memSql: TMemo;
    btnStart: TButton;
    btnGetToken: TButton;
    btnGetTokenEx: TButton;
    memResult: TMemo;
    cbxShowComment: TCheckBox;
    cbxShowEol: TCheckBox;
    cbxShowString: TCheckBox;
    cbxShowType: TCheckBox;
    cbxShowKeyword: TCheckBox;
    btnClearResult: TButton;
    cbDatabase: TComboBox;
    Label1: TLabel;
    btnStatement: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure btnGetTokenClick(Sender: TObject);
    procedure cbxShowCommentClick(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure btnGetTokenExClick(Sender: TObject);
    procedure btnClearResultClick(Sender: TObject);
    procedure btnStatementClick(Sender: TObject);
  private
    FScanner: TZScanner;
  public
    { Public declarations }
  end;

var
  frmMain: TfrmMain;

implementation

{$R *.DFM}

procedure TfrmMain.FormCreate(Sender: TObject);
begin
  cbDatabase.ItemIndex := 0;
  btnStartClick(Self);
end;

procedure TfrmMain.FormDestroy(Sender: TObject);
begin
  if Assigned(FScanner) then FScanner.Free;
end;

function TokenToString(TokenType: Integer): string;
begin
  case TokenType of
    tokComment:  Result := 'Comment';
    tokKeyword:  Result := 'Keyword';
    tokType:     Result := 'Type';
    tokIdent:	 Result := 'Ident';

    tokOperator: Result := 'Operator';
    tokBrace:    Result := 'Brace';
    tokSeparator: Result := 'Separator';
    tokEol:      Result := 'EOL';

    tokInt:      Result := 'Integer';
    tokFloat:    Result := 'Float';
    tokString:   Result := 'String';
    tokBool:     Result := 'Boolean';

    tokEof:      Result := 'EOF';
    else         Result := 'Unknown';
  end;
end;

procedure TfrmMain.btnGetTokenClick(Sender: TObject);
begin
  FScanner.Lex;
  memResult.Lines.Add(Format('Type: %d - %s, Token: %s, Pos: %d, Line: %d',
    [FScanner.TokenType, TokenToString(FScanner.TokenType), FScanner.Token,
    FScanner.Position, FScanner.LineNo]));
end;

procedure TfrmMain.cbxShowCommentClick(Sender: TObject);
begin
  if Visible then
  begin
    FScanner.ShowComment := cbxShowComment.Checked;
    FScanner.ShowEol := cbxShowEol.Checked;
    FScanner.ShowString := cbxShowString.Checked;
    FScanner.ShowType := cbxShowType.Checked;
    FScanner.ShowKeyword := cbxShowKeyword.Checked;
  end;
end;

procedure TfrmMain.btnStartClick(Sender: TObject);
begin
  { Sets new scanner depending on value chosen on checkbox }
  if Assigned(FScanner) then
    FScanner.Free;

  if cbDatabase.Text = 'PostgreSQL' then
    FScanner := CreateSqlScanner(dtPostgreSql)
  else if cbDatabase.Text = 'Interbase' then
    FScanner := CreateSqlScanner(dtInterbase)
  else if cbDatabase.Text = 'MSSQL' then
    FScanner := CreateSqlScanner(dtMsSql)
  else if cbDatabase.Text = 'MySQL' then
    FScanner := CreateSqlScanner(dtMySql)
  else if cbDatabase.Text = 'Oracle' then
    FScanner := CreateSqlScanner(dtOracle)
  else if cbDatabase.Text = 'C' then
    FScanner := TZCScanner.Create
  else if cbDatabase.Text = 'Pascal' then
    FScanner := TZPasScanner.Create
  else
    FScanner := TZScanner.Create;

  FScanner.Buffer := memSql.Lines.Text;
  cbxShowComment.Checked := FScanner.ShowComment;
  cbxShowEol.Checked := FScanner.ShowEol;
  cbxShowString.Checked := FScanner.ShowString;
  cbxShowType.Checked := FScanner.ShowType;
  cbxShowKeyword.Checked := FScanner.ShowKeyword;
  FScanner.Buffer := memSql.Lines.Text;
end;

procedure TfrmMain.btnGetTokenExClick(Sender: TObject);
begin
  memResult.Lines.Add(Format('Next Token... Type: %d - %s, Token: %s, Pos: %d, Line: %d',
    [FScanner.NextTokenType, TokenToString(FScanner.NextTokenType),
    FScanner.NextToken, FScanner.NextPosition, FScanner.NextLineNo]));
end;

procedure TfrmMain.btnClearResultClick(Sender: TObject);
begin
  memResult.Lines.Clear;
end;

procedure TfrmMain.btnStatementClick(Sender: TObject);
var
  Query: string;
  Pos, Len, Line: Integer;
begin
  if FScanner is TZSqlScanner then
  begin
    Query := (FScanner as TZSqlScanner).ExtractStatement(Pos, Len, Line);
    memResult.Lines.Add(Format('Extracted statement... Pos: %d, Len: %d, Line: %d',
      [Pos, Len, Line]));
    memResult.Lines.Add(Query);
  end;
end;

end.

⌨️ 快捷键说明

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