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

📄 main.pas

📁 delphi编的pl0编译器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, ComCtrls, ToolWin,
  ImgList, ActnList, StdActns,My_Statememt;

type
  TMainForm = class(TForm)
    MainMenu: TMainMenu;
    FileNewItem: TMenuItem;
    FileOpenItem: TMenuItem;
    FileSaveItem: TMenuItem;
    FileSaveAsItem: TMenuItem;
    FileExitItem: TMenuItem;
    EditUndoItem: TMenuItem;
    EditCutItem: TMenuItem;
    EditCopyItem: TMenuItem;
    EditPasteItem: TMenuItem;
    HelpContentsItem: TMenuItem;
    HelpSearchItem: TMenuItem;
    HelpHowToUseItem: TMenuItem;
    StatusLine: TStatusBar;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    PrintSetupDialog: TPrinterSetupDialog;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    ImageList1: TImageList;
    ToolBar2: TToolBar;
    SpeedButton1: TSpeedButton;
    SpeedButton3: TSpeedButton;
    ToolButton1: TToolButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    SpeedButton7: TSpeedButton;
    SpeedButton9: TSpeedButton;
    SpeedButton10: TSpeedButton;
    ToolButton4: TToolButton;
    SpeedButton11: TSpeedButton;
    SpeedButton12: TSpeedButton;
    Panel1: TPanel;
    Memo1: TMemo;
    SpeedButton8: TSpeedButton;
    Memo2: TMemo;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    EditUndo1: TEditUndo;
    EditDelete1: TEditDelete;
    FileOpen1: TFileOpen;
    FileSaveAs1: TFileSaveAs;
    FileExit1: TFileExit;
    SpeedButton2: TSpeedButton;
    Memo3: TMemo;
    SpeedButton13: TSpeedButton;
    SpeedButton14: TSpeedButton;
    ToolButton5: TToolButton;
    Y1: TMenuItem;
    N1: TMenuItem;
    N5: TMenuItem;
    B1: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    MySave: TAction;
    PopupMenu1: TPopupMenu;
    Undo1: TMenuItem;
    N8: TMenuItem;
    Cut1: TMenuItem;
    Copy1: TMenuItem;
    Paste1: TMenuItem;
    Delete1: TMenuItem;
    N9: TMenuItem;
    SelectAll1: TMenuItem;
    N10: TMenuItem;
    N11: TMenuItem;
    Timer1: TTimer;
    SpeedButton15: TSpeedButton;
    SpeedButton16: TSpeedButton;
    ToolButton6: TToolButton;
    SpeedButton17: TSpeedButton;
    N12: TMenuItem;
    N13: TMenuItem;
    N14: TMenuItem;
    N15: TMenuItem;
    Bevel1: TBevel;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    Shape5: TShape;
    Shape6: TShape;
    Shape7: TShape;
    Shape8: TShape;
    Shape9: TShape;
    Shape10: TShape;
    Shape11: TShape;
    Shape12: TShape;
    Shape13: TShape;
    Shape14: TShape;
    Shape15: TShape;
    Shape16: TShape;
    Shape17: TShape;
    Shape18: TShape;
    Shape19: TShape;
    Shape20: TShape;
    Shape21: TShape;
    Shape22: TShape;
    Shape23: TShape;
    Shape24: TShape;
    Shape25: TShape;
    Shape26: TShape;
    Shape27: TShape;
    Shape28: TShape;
    Shape29: TShape;
    ToolButton7: TToolButton;
    Memo4: TMemo;
    Shape30: TShape;
    SpeedButton18: TSpeedButton;
    N16: TMenuItem;
    N17: TMenuItem;
    MyHelp: TAction;
    MyStatememt: TAction;
    procedure FormCreate(Sender: TObject);
    procedure ShowHint(Sender: TObject);
    procedure FileNew(Sender: TObject);
    procedure FileOpen(Sender: TObject);
    procedure FileSave(Sender: TObject);
    procedure FileSaveAs(Sender: TObject);
    procedure FilePrintSetup(Sender: TObject);
    procedure FileExit(Sender: TObject);
    procedure EditUndo(Sender: TObject);
    procedure EditCut(Sender: TObject);
    procedure EditCopy(Sender: TObject);
    procedure EditPaste(Sender: TObject);
    procedure WindowTile(Sender: TObject);
    procedure WindowCascade(Sender: TObject);
    procedure WindowArrange(Sender: TObject);
    procedure HelpContents(Sender: TObject);
    procedure HelpSearch(Sender: TObject);
    procedure HelpHowToUse(Sender: TObject);
    procedure SpeedButton8Click(Sender: TObject);
    procedure mycopyExecute(Sender: TObject);
    procedure mypasteExecute(Sender: TObject);
    procedure mycutExecute(Sender: TObject);
    procedure SpeedButton4Click(Sender: TObject);
    procedure SpeedButton5Click(Sender: TObject);
    procedure SpeedButton6Click(Sender: TObject);
    procedure SpeedButton13Click(Sender: TObject);
    procedure SpeedButton10Click(Sender: TObject);
    procedure SpeedButton7Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure SpeedButton14Click(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FileOpenItemClick(Sender: TObject);
    procedure MySaveExecute(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Memo1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure SpeedButton9Click(Sender: TObject);
    procedure Memo1KeyPress(Sender: TObject; var Key: Char);
    procedure Memo1Change(Sender: TObject);
    procedure SpeedButton15Click(Sender: TObject);
    procedure SpeedButton17Click(Sender: TObject);
    procedure Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure SpeedButton16Click(Sender: TObject);
    procedure N15Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N13Click(Sender: TObject);
    procedure N14Click(Sender: TObject);
    procedure SpeedButton18Click(Sender: TObject);
    procedure N17Click(Sender: TObject);
    procedure MyHelpExecute(Sender: TObject);
    procedure MyStatememtExecute(Sender: TObject);
    procedure HelpSearchItemClick(Sender: TObject);
  end;

var
  MainForm: TMainForm;
  SpeedButton8_down:boolean;
  SpeedButton10_down:boolean;
 // SpeedButton16_down:boolean;
  hint_line:integer;
  excute_enable:boolean;
  error_mark:array[1..40]of integer;

implementation
uses
  Defination,Proc_Func,CiFaFenXi,YuFaFenXi,
  SanYuanShi,Excute,Result_Form;

{$r *.dfm}

procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnHint := ShowHint;

  StatusLine.Panels[1].Text:='  行号:  0';

  StatusLine.Panels[2].Text:='  '+DateToStr(date)+'         '+
                              TimeToStr(time);
  StatusLine.Panels[3].Text:='  欢迎使用PL0语言编译器  halcyon_jwei';
  MainForm.Height:=673;
  MainForm.Width:=750;
  MainForm.Left:=107;
  MainForm.Top:=20;

  MainForm.Memo1.Height:=MainForm.Height-114+15;
  MainForm.Memo1.Width:=MainForm.Width-8-15;
  MainForm.Memo1.Top:=0;
  MainForm.Memo1.Left:=15;

  MainForm.Bevel1.Left:=0;
  MainForm.Bevel1.Top:=0;
  MainForm.Bevel1.Width:=15;
  MainForm.Bevel1.Height:=MainForm.Memo1.Height;

  MainForm.Memo2.Height:=MainForm.Height-515-15;
  MainForm.Memo2.Width:=MainForm.Width-8;
  MainForm.Memo2.Top:=400+15;
  MainForm.Memo2.Left:=0;

  MainForm.Memo3.Height:=MainForm.Height-114;
  MainForm.Memo3.Width:=260;
  MainForm.Memo3.Top:=0;
  MainForm.Memo3.Left:=MainForm.Width-MainForm.Memo3.Width-8;

  MainForm.Memo4.Height:=MainForm.Height-114;
  MainForm.Memo4.Width:=260;
  MainForm.Memo4.Top:=0;
  MainForm.Memo4.Left:=MainForm.Width-MainForm.Memo3.Width-8;


  MainForm.Memo2.Visible:=false;
  MainForm.Memo3.Visible:=false;
end;

procedure TMainForm.ShowHint(Sender: TObject);
begin
  StatusLine.Panels[0].Text:='  '+Application.Hint;
end;

procedure TMainForm.FileNew(Sender: TObject);
begin
  { Add code to create a new file }
  memo1.Clear;
  memo2.Clear;
  memo3.Clear;
  memo4.Clear;
  MainForm.Memo4.Text:='                中间代码';
  MainForm.Memo3.Text:='                词法分析';
  MainForm.Memo2.Text:=' 语法分析';
  Clear_errormark;
  MainForm.N13.Enabled:=false;
  MainForm.N14.Enabled:=false;
  excute_enable:=false;
  err:=1;
  ResultForm.Memo1.Clear;
  ResultForm.Memo1.Text:='程序尚未执行!';
end;

procedure TMainForm.FileOpen(Sender: TObject);
begin
  if OpenDialog.Execute then
  begin
    { Add code to open OpenDialog.FileName }
    Memo1.Clear;
    memo2.Clear;
    memo3.Clear;
    memo4.Clear;
    MainForm.Memo4.Text:='                中间代码';
    MainForm.Memo3.Text:='                词法分析';
    MainForm.Memo2.Text:=' 语法分析';
    MainForm.Memo1.Lines.LoadFromFile(MainForm.OpenDialog.FileName);
    Mainform.Caption:=Mainform.OpenDialog.FileName;
    Clear_errormark;
    MainForm.N13.Enabled:=false;
    MainForm.N14.Enabled:=false;
    excute_enable:=false;
    err:=1;
    ResultForm.Memo1.Clear;
    ResultForm.Memo1.Text:='程序尚未执行!';
  end;
end;

procedure TMainForm.FileSave(Sender: TObject);
begin
   { Add code to save current file under current name }
end;

procedure TMainForm.FileSaveAs(Sender: TObject);
begin
  if MainForm.SaveDialog.Execute then
  begin
    memo1.Lines.SaveToFile(MainForm.SaveDialog.FileName);
    MainForm.Caption:=MainForm.SaveDialog.FileName;
  end;
end;

procedure TMainForm.FilePrintSetup(Sender: TObject);
begin
  PrintSetupDialog.Execute;
end;

procedure TMainForm.FileExit(Sender: TObject);
begin
  Close;
end;

procedure TMainForm.EditUndo(Sender: TObject);
begin
  { Add code to perform Edit Undo }
end;

procedure TMainForm.EditCut(Sender: TObject);
begin
  { Add code to perform Edit Cut }
end;

procedure TMainForm.EditCopy(Sender: TObject);
begin
  { Add code to perform Edit Copy }
end;

procedure TMainForm.EditPaste(Sender: TObject);
begin
  { Add code to perform Edit Paste }
end;

procedure TMainForm.WindowTile(Sender: TObject);
begin
  Tile;
end;

procedure TMainForm.WindowCascade(Sender: TObject);
begin
  Cascade;
end;

procedure TMainForm.WindowArrange(Sender: TObject);
begin
  ArrangeIcons;
end;

procedure TMainForm.HelpContents(Sender: TObject);
begin
  Application.HelpCommand(HELP_CONTENTS, 0);
end;

procedure TMainForm.HelpSearch(Sender: TObject);
const
  EmptyString: PChar = '';
begin
  Application.HelpCommand(HELP_PARTIALKEY, Longint(EmptyString));
end;

procedure TMainForm.HelpHowToUse(Sender: TObject);
begin
  Application.HelpCommand(HELP_HELPONHELP, 0);
end;

procedure TMainForm.SpeedButton8Click(Sender: TObject);
begin
  if MainForm.Memo2.GetTextLen=0 then
    MainForm.Memo2.Text:=' 语法分析';
  if SpeedButton8_down then
  begin
    MainForm.Memo1.Height:=MainForm.Height-114;
    MainForm.Memo2.Visible:=false;
    MainForm.Bevel1.Height:=MainForm.Memo1.Height;
    
  end

  else
  begin

    if SpeedButton10_down or memo4.Visible=true then    //词法窗口
    begin
      MainForm.Memo1.Height:=MainForm.Height-114-MainForm.Memo2.Height-3;
      MainForm.Memo1.Width:=MainForm.Width-MainForm.Memo3.Width-10-15;
      MainForm.Bevel1.Height:=MainForm.Memo1.Height;

      MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
      MainForm.Memo2.Visible:=true;
    end
    else
    begin
      MainForm.Memo1.Height:=MainForm.Height-114-MainForm.Memo2.Height-3;
      MainForm.Memo2.Width:=MainForm.Memo1.Width+15;

      MainForm.Bevel1.Height:=MainForm.Memo1.Height;

      MainForm.Memo2.Visible:=true;
    end;
  end;
  SpeedButton8_down:=not SpeedButton8_down;
  MainForm.N7.Checked:=not MainForm.N7.Checked;
end;


procedure TMainForm.mycopyExecute(Sender: TObject);
begin
  MainForm.Memo1.CopyToClipboard;
end;

procedure TMainForm.mypasteExecute(Sender: TObject);
begin
  MainForm.Memo1.PasteFromClipboard;
end;

procedure TMainForm.mycutExecute(Sender: TObject);
begin
  MainForm.Memo1.CutToClipboard;
end;

procedure TMainForm.SpeedButton4Click(Sender: TObject);
begin
  MainForm.Memo1.CopyToClipboard;
end;

procedure TMainForm.SpeedButton5Click(Sender: TObject);
begin
  MainForm.Memo1.CutToClipboard;
end;

procedure TMainForm.SpeedButton6Click(Sender: TObject);
begin
  MainForm.Memo1.PasteFromClipboard;
end;

procedure TMainForm.SpeedButton13Click(Sender: TObject);
begin
  editdelete1.Execute;
end;

procedure TMainForm.SpeedButton10Click(Sender: TObject);

begin
  if MainForm.Memo3.GetTextLen=0 then
    MainForm.Memo3.Text:='                词法分析';

  if SpeedButton10_down  then   //
  begin
    MainForm.Memo1.Width:=MainForm.Width-8-15;
    MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
    MainForm.Memo3.Visible:=false;
  end

  else

  begin
    MainForm.N15.Checked:=false;
    if memo4.Visible=true then
    begin
    memo4.Visible:=false;
    MainForm.SpeedButton16.Down:=false;
    end;
    MainForm.Memo3.Visible:=true;
    MainForm.Memo1.Width:=MainForm.Width-MainForm.Memo3.Width-10-15;
    MainForm.Memo2.Width:=MainForm.Memo1.Width+15;

  end;
  SpeedButton10_down:=not SpeedButton10_down;
  MainForm.N6.Checked:=not MainForm.N6.Checked;
end;

procedure TMainForm.SpeedButton7Click(Sender: TObject);

⌨️ 快捷键说明

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