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

📄 main.pas

📁 delphi编的pl0编译器
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -