📄 main.pas
字号:
unit MAIN;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls, Menus,
StdCtrls, Dialogs, Buttons, Messages, ExtCtrls, ComCtrls, StdActns,
ActnList, ToolWin, ImgList;
type
TMainForm = class(TForm)
MainMenu1: TMainMenu;
File1: TMenuItem;
FileNewItem: TMenuItem;
FileOpenItem: TMenuItem;
FileCloseItem: TMenuItem;
Window1: TMenuItem;
Help1: TMenuItem;
N1: TMenuItem;
FileExitItem: TMenuItem;
HelpAboutItem: TMenuItem;
OpenDialog: TOpenDialog;
FileSaveItem: TMenuItem;
FileSaveAsItem: TMenuItem;
Edit1: TMenuItem;
CutItem: TMenuItem;
CopyItem: TMenuItem;
PasteItem: TMenuItem;
StatusBar: TStatusBar;
ActionList1: TActionList;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
FileNew1: TAction;
FileSave1: TAction;
FileExit1: TAction;
FileOpen1: TAction;
FileSaveAs1: TAction;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowArrangeAll1: TWindowArrange;
WindowMinimizeAll1: TWindowMinimizeAll;
HelpAbout1: TAction;
FileClose1: TWindowClose;
WindowTileVertical1: TWindowTileVertical;
ToolBar2: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton9: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ImageList1: TImageList;
Splitter1: TSplitter;
Panel1: TPanel;
Panel2: TPanel;
Splitter2: TSplitter;
Panel3: TPanel;
Splitter3: TSplitter;
Memo1: TMemo;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
Memo2: TMemo;
Memo3: TMemo;
Memo4: TMemo;
procedure FileNew1Execute(Sender: TObject);
procedure FileOpen1Execute(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
procedure FileExit1Execute(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
procedure CreateMDIChild(const Name: string);
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses CHILDWIN, about;
procedure TMainForm.CreateMDIChild(const Name: string);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
if FileExists(Name) then Child.Memo1.Lines.LoadFromFile(Name);
end;
procedure TMainForm.FileNew1Execute(Sender: TObject);
begin
CreateMDIChild('NONAME' + IntToStr(MDIChildCount + 1));
end;
procedure TMainForm.FileOpen1Execute(Sender: TObject);
begin
if OpenDialog.Execute then
begin
memo3.Clear;
memo4.Clear;
memo2.lines.loadfromfile(openDialog.FileName);
end
end;
procedure TMainForm.HelpAbout1Execute(Sender: TObject);
begin
AboutBox.ShowModal;
end;
procedure TMainForm.FileExit1Execute(Sender: TObject);
begin
Close;
end;
{
procedure judge(Sender: TObject)
var
i,flag:integer;
begin
flag:=0;
if (fs[1]>'A')and(fs[1]<'z') then
begin
for i:=0 to 24 do
begin
if fs=memo1.Lines[i] then
begin
flag:=1;
memo3.Lines.Add(fs+'i+1');
break;
end;
end;
end;
end;
}
//识别单词
procedure ready(t:string;l:integer);
var
i:integer;
fs:string;
begin
fs:='';
for i:=1 to l do
begin
if (t[i]>='A')and(t[i]<='z') then //字母识别
begin
if fs='' then
fs:=fs+t[i]
else
begin
if ((fs[1]>='z')or(fs[1]<='A'))and((fs[1]>='9')or(fs[1]<='0')) then
begin
MainForm.Memo3.Lines.Add(fs); //输出运算符
fs:='';
fs:=fs+t[i];
end
else fs:=fs+t[i];
end;
end
else if (t[i]>='0')and(t[i]<='9') then //数字识别
begin
if fs='' then
begin
fs:=fs+t[i];
end
else
begin
if ((fs[1]>='A')and(fs[1]<='z'))or((fs[1]>='0')and(fs[1]<='9')) then
fs:=fs+t[i]
else
begin
MainForm.Memo3.Lines.Add(fs);
fs:='';
fs:=fs+t[i];
end;
end;
end
else //特殊符号识别
begin
if fs<>'' then
begin
if ((fs[1]>='A')and(fs[1]<='z'))or((fs[1]>='0')and(fs[1]<='9')) then
begin
MainForm.Memo3.Lines.Add(fs);
fs:='';
fs:=fs+t[i];
end
else
begin
if t[i]='=' then
begin
if (fs[1]='<')or(fs[1]='>')or(fs[1]=':') then
begin
fs:=fs+t[i];
MainForm.Memo3.Lines.Add(fs);
fs:='';
end;
end;
end;
end
else fs:=fs+t[i];
end;
end;
if fs<>'' then
begin
MainForm.memo3.Lines.Add(fs);
fs:='';
end;
//MainForm.Memo3.Lines.SaveToFile('f:\token.txt');
end;
procedure TMainForm.N8Click(Sender: TObject);
var
t,temp:string;
i,j:integer;
len,len1:integer;
begin
//初始化
temp:=''; t:='';
len:=0;
//查找出一字符串
for i:=0 to memo2.Lines.Count-1 do
begin
len:=length(memo2.Lines[i]); //计算一行字符串的长度
temp:=memo2.Lines[i]; //保存该行字符串
for j:=1 to len do //将字符串中的单词 数字或表达式识别出来
begin
if (temp[j]=' ') then
begin
if t<>'' then
begin
len1:=length(t); //识别出来的字符串长度
ready(t,len1); //处理识别出来的字符串
t:='';
end;
end
else t:=t+temp[j];
end;
if t<>'' then //遇到换行的处理
begin
len1:=length(t);
ready(t,len1);
t:='';
end;
temp:='';
end;
end;
procedure TMainForm.N3Click(Sender: TObject);
var
i:integer;
begin
memo4.Lines.Add('%%%%%% 开始语法分析 %%%%%% ');
for i:=0 to memo3.Lines.Count-1 do
begin
if memo3.Lines[0]<>'program' then
begin
memo4.Lines.Add('ERROR!!!首字符串为program!!语法分析结束!!');
break;
end
else
memo4.Lines.Add(memo3.Lines[i]);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -