📄 main.pas
字号:
begin
SaveToFile;
wordlist_index:=0; //初始化wordlist_index
Initialize;
CreateWordList(wordlist_index);
PrintWordlist;
WriteToMemo3;
end;
procedure TMainForm.ToolButton5Click(Sender: TObject);
begin
SaveToFile;
end;
procedure TMainForm.SpeedButton14Click(Sender: TObject);
begin
editUndo1.Execute;
end;
procedure TMainForm.N1Click(Sender: TObject);
begin
SaveToFile;
wordlist_index:=0;
Initialize;
CreateWordList(wordlist_index);
PrintWordlist;
WriteToMemo3;
end;
procedure TMainForm.N6Click(Sender: TObject);
begin
MainForm.N6.Checked:=not MainForm.N6.Checked;
MainForm.SpeedButton10.Down:=not MainForm.SpeedButton10.Down;
if MainForm.Memo3.GetTextLen=0 then
MainForm.Memo3.Text:=' 词法分析';
if SpeedButton10_down then
begin
if SpeedButton8_down then
begin
mainForm.Memo1.Width:=MainForm.Width-8-15;
MainForm.Memo2.Width:=MainForm.Width-8;
MainForm.Memo3.Visible:=false;
end
else
begin
MainForm.Memo1.Width:=MainForm.Width-8-15;
MainForm.Memo3.Visible:=false;
end;
end
else
begin
MainForm.Memo3.Visible:=true;
if memo4.Visible=true then
begin
MainForm.N15.Checked:=false;
memo4.Visible:=false;
MainForm.SpeedButton16.Down:=false;
MainForm.Memo1.Width:=MainForm.Width-MainForm.Memo3.Width-10-15;
MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
end
else
begin
MainForm.Memo1.Width:=MainForm.Width-MainForm.Memo3.Width-10-15;
MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
end;
end;
SpeedButton10_down:=not SpeedButton10_down;
end;
procedure TMainForm.SpeedButton1Click(Sender: TObject);
begin
memo1.Clear;
memo2.Clear;
memo3.Clear;
memo4.Clear;
MainForm.Memo3.Text:=' 词法分析';
MainForm.Memo2.Text:=' 语法分析';
MainForm.Memo4.Text:=' 中间代码';
Clear_errormark;
MainForm.N13.Enabled:=false;
excute_enable:=false;
MainForm.N14.Enabled:=false;
err:=1;
ResultForm.Memo1.Clear;
ResultForm.Memo1.Text:='程序尚未执行!';
end;
procedure TMainForm.FormResize(Sender: TObject);
begin
MainForm.Memo3.Height:=MainForm.Height-114;
MainForm.Memo4.Height:=MainForm.Height-114;
MainForm.Memo4.Left:=MainForm.Width-MainForm.Memo4.Width-8;
MainForm.Memo3.Left:=MainForm.Width-MainForm.Memo3.Width-8;
if SpeedButton8_down and (SpeedButton10_down or memo4.Visible=true) then //语法窗词法窗正显示
begin
MainForm.Memo1.Width:=MainForm.Width-8-MainForm.Memo3.Width-2-15;
MainForm.Memo1.Height:=MainForm.Height-114-MainForm.Memo2.Height-3;
MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
end
else if SpeedButton8_down then //语法窗正显示
begin
MainForm.Memo1.Width:=MainForm.Width-8-15;
MainForm.Memo1.Height:=MainForm.Height-114-MainForm.Memo2.Height-3;
MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
end
else if SpeedButton10_down or memo4.Visible=true then //词法窗正显示
begin
MainForm.Memo1.Height:=MainForm.Height-114;
MainForm.Memo1.Width:=MainForm.Width-8-MainForm.Memo3.Width-2-15;
end
else
begin
MainForm.Memo1.Height:=MainForm.Height-114;
MainForm.Memo1.Width:=MainForm.Width-8-15;
end;
MainForm.Bevel1.Height:=MainForm.Memo1.Height;
end;
procedure TMainForm.FileOpenItemClick(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.MySaveExecute(Sender: TObject);
begin
if MainForm.SaveDialog.Execute then
begin
memo1.Lines.SaveToFile(MainForm.SaveDialog.FileName);
MainForm.Caption:=MainForm.SaveDialog.FileName;
end;
end;
procedure TMainForm.N7Click(Sender: TObject);
begin
MainForm.N7.Checked:=not MainForm.N7.Checked;
MainForm.SpeedButton8.Down:=not MainForm.SpeedButton8.Down;
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 MainForm.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.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;
MainForm.Memo2.Visible:=true;
end;
end;
SpeedButton8_down:=not SpeedButton8_down;
end;
procedure TMainForm.N10Click(Sender: TObject);
begin
MainForm.Memo1.SelectAll;
end;
procedure TMainForm.Timer1Timer(Sender: TObject);
begin
StatusLine.Panels[2].Text:=' '+DateToStr(date)+' '+
TimeToStr(time);
end;
procedure TMainForm.Memo1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
j:real;
begin
j:=406/20;
hint_line:=trunc(y/j)+1;
MainForm.StatusLine.Panels[1].Text:=' 行号: '+inttostr(hint_line);
end;
procedure TMainForm.SpeedButton9Click(Sender: TObject);
begin
Clear_errormark;
SaveToFile;
wordlist_index:=0;
Initialize;
CreateWordList(wordlist_index);
PrintWordlist;
WriteToMemo3;
MainForm.Memo2.Clear;
Analyze;
Set_errormark;
end;
procedure TMainForm.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(13) then
begin
MainForm.StatusLine.Panels[1].Text:=' 行号: '+inttostr(hint_line+1);
inc(hint_line);
end;
end;
procedure TMainForm.Memo1Change(Sender: TObject);
begin
err:=1;
excute_enable:=false;
MainForm.N14.Enabled:=false;
MainForm.N13.Enabled:=false;
ResultForm.Memo1.Clear;
ResultForm.Memo1.Text:='程序尚未执行!';
end;
procedure TMainForm.SpeedButton15Click(Sender: TObject);
var
str:pchar;
begin
if err=0 then
begin
MainForm.Memo2.Clear;
MainForm.Memo4.Clear;
MainForm.Memo4.Text:=' 中间代码';
final;
excute_enable:=true; //置执行许可标志
MainForm.N14.Enabled:=true;
MainForm.SpeedButton17.Enabled:=true;
end
else
begin
str:='您的程序不能生成中间代码!'+chr(13)+chr(10)+
'原因是程序修改后未进行语法分析或尚有语法错误!'+chr(10)+chr(13)+
'请先进行语法分析,可用语法分析窗口观察结果!'+chr(10);
application.messagebox(str,'halcyon_jwei',mb_ok+mb_iconasterisk);
end;
end;
procedure TMainForm.SpeedButton17Click(Sender: TObject);
var
str:pchar;
begin
if excute_enable then
begin
ResultForm.Memo1.Clear;
interpret;
SeeResult;
end
else
begin
str:='您的程序不能执行!'+chr(13)+chr(10)+
'原因是程序修改后未生成中间代码!'+chr(10)+chr(13)+
'请先执行生成中间代码!'+chr(10);
application.messagebox(str,'halcyon_jwei',mb_ok+mb_iconasterisk);
end;
end;
procedure TMainForm.Memo1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
j:real;
begin
j:=406/20;
hint_line:=trunc(y/j)+1;
MainForm.StatusLine.Panels[1].Text:=' 行号: '+inttostr(hint_line);
end;
procedure TMainForm.SpeedButton16Click(Sender: TObject);
begin
if memo4.Visible=true then
begin
MainForm.N15.Checked:=false;
memo4.Visible:=false;
MainForm.Memo1.Width:=MainForm.Width-8-15;
MainForm.Memo2.Width:=MainForm.Width-8;
end
else
begin
MainForm.N15.Checked:=true;
if Memo3.Visible=true then
begin
memo4.Left:=memo3.Left;
memo4.Height:=memo3.Height;
memo4.Visible:=true;
memo3.Visible:=false;
MainForm.SpeedButton10.Down:=false;
Speedbutton10_down:=false;
MainForm.N6.Checked:=false;
end;
if Memo3.Visible=false then
begin
MainForm.Memo4.Visible:=true;
MainForm.Memo1.Width:=MainForm.Width-MainForm.Memo4.Width-10-15;
MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
end;
end;
end;
procedure TMainForm.N15Click(Sender: TObject);
begin
mainForm.SpeedButton16.Down:=not mainForm.SpeedButton16.Down;
if memo4.Visible=true then
begin
MainForm.N15.Checked:=false;
memo4.Visible:=false;
MainForm.Memo1.Width:=MainForm.Width-8-15;
MainForm.Memo2.Width:=MainForm.Width-8;
end
else
begin
MainForm.N15.Checked:=true;
if Memo3.Visible=true then
begin
memo4.Left:=memo3.Left;
memo4.Height:=memo3.Height;
memo4.Visible:=true;
memo3.Visible:=false;
MainForm.SpeedButton10.Down:=false;
Speedbutton10_down:=false;
MainForm.N6.Checked:=false;
end;
if Memo3.Visible=false then
begin
MainForm.Memo4.Visible:=true;
MainForm.Memo1.Width:=MainForm.Width-MainForm.Memo4.Width-10-15;
MainForm.Memo2.Width:=MainForm.Memo1.Width+15;
end;
end;
end;
procedure TMainForm.N5Click(Sender: TObject);
begin
Clear_errormark;
SaveToFile;
wordlist_index:=0;
Initialize;
CreateWordList(wordlist_index);
PrintWordlist;
MainForm.Memo2.Clear;
Analyze;
Set_errormark;
end;
procedure TMainForm.N13Click(Sender: TObject);
begin
MainForm.Memo2.Clear;
MainForm.Memo4.Clear;
MainForm.Memo4.Text:=' 中间代码';
final;
excute_enable:=true;
MainForm.SpeedButton17.Enabled:=true;
MainForm.N14.Enabled:=true;
end;
procedure TMainForm.N14Click(Sender: TObject);
begin
ResultForm.Memo1.Clear;
interpret;
SeeResult;
end;
procedure TMainForm.SpeedButton18Click(Sender: TObject);
begin
if ResultForm.Visible=false then
begin
ResultForm.Show;
MainForm.N17.Checked:=true;
end
else
begin
ResultForm.Visible:=false;
MainForm.N17.Checked:=false;
end;
end;
procedure TMainForm.N17Click(Sender: TObject);
begin
if ResultForm.Visible=false then
begin
ResultForm.Show;
MainForm.N17.Checked:=true;
MainForm.SpeedButton18.Down:=true;
end
else
begin
ResultForm.Visible:=false;
MainForm.N17.Checked:=false;
MainForm.SpeedButton18.Down:=false;
end;
end;
procedure TMainForm.MyHelpExecute(Sender: TObject);
var
str:PChar;
begin
str:='语法规则问题请参见PL0语言'+chr(10)
+'本程序使用问题请参见''程序示例.txt''';
Application.MessageBox(str,'帮助 halcyon_jwei',MB_OK+mb_iconinformation);
end;
procedure TMainForm.MyStatememtExecute(Sender: TObject);
begin
StateForm.Top:=200;
StateForm.Left:=270;
StateForm.Show;
MainForm.Enabled:=false;
end;
procedure TMainForm.HelpSearchItemClick(Sender: TObject);
var
str:Pchar;
begin
str:='天哪!你真的相信会有更多帮助?!'+chr(10)+chr(13)+
'!#&∮‰¥§.......';
Application.MessageBox(str,'更多帮助 halcyon_jwei',MB_OK+
MB_ICONSTOP);
end;
initialization
SpeedButton8_down:=false;
SpeedButton10_down:=false;
excute_enable:=false;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -