📄 main.pas
字号:
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 + -