?? ul.txt
字號:
//---------------------------------------------------------------------------
#include <vcl.h>
#include<iostream>
#include <fstream>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#define KEYWORDCOUNT 35
#define SCOUNT 32
#define FGCOUNT 8
#define ZSCOUNT 1
using namespace std;
bool isrv=false;
bool issd(const String *s1,const String &s2,int kcount);
bool isfd(const char* s,const char m);
//定義字母表
char* crt="abcdefghijklmonpqrstuvwxyzABCDEFGHIJKLOMOPQRSTUVWXYZ_";
//定義數字
char* numb="1234567890.";
//定義符號
char* syb="+-*/=~!#%&|<>,.\\";
//定義分隔符
char* fgf="{}[]();";
//定義關鍵字
String keyw[KEYWORDCOUNT]={"auto","break","case","char","const","continue","default","do","double",
"else","enum","extern","float","for","goto","if","int","long","register",
"return","short","signed","sizeof","static","struct","switch","typedef",
"union","unsigned","void","volatile","while","true","false","bool"} ;
//定義運算符
String yuns[SCOUNT]={"->",".","!","++","--","&","~","*","/","%","+","-",
"<<",">>","<","<=",">",">=","==","!=","&&","||",
"=","+=","-=","*=","/=",",","#"};
//定義注釋符
String zs[ZSCOUNT]={"//"};
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//TODO: ----------[ 判斷一個字符是否在一個字符串內 ]--------------------
bool isfd(const char* s,const char m)
{
int i=strlen(s);
for(int jj=0;jj<=i-1;++jj)
{
if(m==s[jj])return true;
}
return false;
}
//TODO: ---------------[ 判斷一個字符串是否在另一個字符串內 ]---------------
bool issd(const String *s1,const String &s2,int kcount)
{
for(int i=0;i<=kcount-1;++i)
{
if(s2==s1[i])return true;
}
return false;
}
//TODO: ----------------------[ 進行詞法分析 ]-------------------------
void __fastcall TForm1::Anylize1Click(TObject *Sender)
{
int ii;
char lin[1000];
char num[10];
char fh;
int j;
String final;
Result1->Checked=true;
for(int i=0;i<=RichEdit1->Lines->Count-1;++i)
{
j=1;
ii=-1;
char tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
for(unsigned int iii=0;iii<=strlen(RichEdit1->Lines->Strings[i].c_str());++iii)
{
//狀態1:"開頭
if(RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0]=='\"')
{
final+="(" +String(i+1) + ") "+"字符串開始標志:\""+String("\r\n");
tk=RichEdit1->Lines->Strings[i].SubString(++j,1).c_str()[0];
while(tk!='\n'&&tk!='\r'&&tk!='\0'&&tk!='\"')
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
if(tk=='\"'){
lin[++ii]='\0';
// if(strlen(lin)>=4)lin[strlen(lin)-3]='\0';
final+="(" +String(i+1) + ")" +"字符串:"+String(lin)+String("\r\n");
final+="(" +String(i+1) + ") "+"字符串結束標志:\""+String("\r\n");
goto sends;
}
}
if(strlen(lin)>=4)lin[strlen(lin)-3]='\0';
final+="(" +String(i+1) + ")" +"字符串:"+String(lin)+String("\r\n");
final+="(" +String(i+1) + ")"+"(" +String(j) + ") " +"錯誤:有字符串開始標志卻無結束標志"+String("\r\n");
sends:
++j;
ii=-1; }
//----------------------------------------------------------------------
//狀態2://開頭
else if(RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0]=='/'&&RichEdit1->Lines->Strings[i].SubString(j+1,1).c_str()[0]=='/')
{ final+="(" +String(i+1) + ") "+"注釋符://"+String("\r\n");
tk=RichEdit1->Lines->Strings[i].SubString(j+2,1).c_str()[0];
j+=2;
while(tk!='\n'&&tk!='\r'&&tk!='\0')
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
}
lin[++ii]='\0';
final+="(" +String(i+1) + ")" +"注釋內容:"+String(lin)+String("\r\n");
ii=-1; }
//-------------------------------------------------------------
//狀態2:#開頭
else if(RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0]=='#')
{ final+="(" +String(i+1) + ") "+"預定義符:#"+String("\r\n");
tk=RichEdit1->Lines->Strings[i].SubString(j+1,1).c_str()[0];
j+=1;
while(tk!='\n'&&tk!='\r'&&tk!='\0')
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
}
lin[++ii]='\0';
final+="(" +String(i+1) + ")" +"預定義內容:"+String(lin)+String("\r\n");
ii=-1; }
//-------------------------------------------------------------
//狀態3:'開頭
else if(RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0]=='\'')
{
final+="(" +String(i+1) + ") "+"字符開始標志:\'"+String("\r\n");
tk=RichEdit1->Lines->Strings[i].SubString(++j,1).c_str()[0];
while(tk!='\n'&&tk!='\r'&&tk!='\0'&&tk!='\'')
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
if(tk=='\''){
lin[++ii]='\0';
// if(strlen(lin)>=4)lin[strlen(lin)-3]='\0';
final+="(" +String(i+1) + ")" +"字符:"+String(lin)+String("\r\n");
final+="(" +String(i+1) + ") "+"字符結束標志:\'"+String("\r\n");
if(strlen(lin)>1)final+="(" +String(i+1) + ") "+"(" +String(j) + ") "+"字符長度大于1,是否是字符串?"+String("\r\n");
goto sends2;
}
}
if(strlen(lin)>=4)lin[strlen(lin)-3]='\0';
final+="(" +String(i+1) + ")" +"字符串:"+String(lin)+String("\r\n");
final+="(" +String(i+1) + ")"+"(" +String(j) + ") " +"錯誤:有字符串開始標志卻無結束標志"+String("\r\n");
sends2:
++j;
ii=-1; }
//狀態3:字母開頭
else if(isfd(crt,tk))
{
while(isfd(crt,tk)||isfd(numb,tk))
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
}
lin[++ii]='\0';
//是否關鍵字
if(issd(keyw,lin,KEYWORDCOUNT))
final+="(" +String(i+1) + ") "+"關鍵字:"+String(lin)+String("\r\n");
else
final+="(" +String(i+1) + ") "+"自定義標識符:"+String(lin)+String("\r\n");
ii=-1;
}
//狀態4:符號開頭
else if(isfd(syb,tk))
{
while(isfd(syb,tk))
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
}
lin[++ii]='\0';
//是否運算符
if(issd(yuns,lin,SCOUNT))
final+="(" +String(i+1) + ") "+"運算符:"+String(lin)+String("\r\n");
else
final+="(" +String(i+1) + ")"+"(" +String(j) + ") "+"錯誤符號:"+String(lin)+String("\r\n");
ii=-1;
}
//狀態5:數字開頭
else if(isfd(numb,tk))
{
while(isfd(numb,tk))
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
}
lin[++ii]='\0';
final+="(" +String(i+1) + ") "+"數字:"+String(lin)+String("\r\n");
ii=-1;
}
//狀態6:分隔符開頭
else if(isfd(fgf,tk))
{
lin[++ii]=tk;
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
lin[++ii]='\0';
final+="(" +String(i+1) + ") "+"分隔符:"+String(lin)+String("\r\n");
ii=-1;
}
//以上什么都不是,跳過
else
{
++j;
tk=RichEdit1->Lines->Strings[i].SubString(j,1).c_str()[0];
}
}
}
Memo1->Text=final;
isrv=true;
RichEdit1->Width=Form1->Width-Memo1->Width-8;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -