?? sallib.h
字號:
#if !defined(_SALLIB_H_)
#define _SALLIB_H_
#include "linklib.h"
#include "iostream.h"
typedef struct
{
int ID;
char* Value;
} Vocable;
typedef struct
{
int sPos;
int ePos;
Vocable* Voc;
} ArrowyVocable;
Vocable Keywords[]=
{
{0,"CONST"},
{1,"VAR"},
{2,"READ"},
{3,"WRITE"},
{4,","},
{5,";"},
{6,"="},
{7,":="},
{8,"+"},
{9,"-"},
{10,"*"},
{11,"/"},
{12,"("},
{13,")"},
{14,"<數(shù)值>"},
{15,"<標(biāo)識符>"}
};
void Error(int ErrCode,ArrowyVocable* av)
{
CString tmp;
tmp.Format("錯(cuò)誤(%d,%d): ",av->sPos,av->ePos);
switch(ErrCode)
{
case 0:
tmp+="缺少';'\n";
break;
case 1:
tmp+="保留字不能作為標(biāo)識符\n";
break;
case 2:
tmp+="缺少標(biāo)識符\n";
break;
case 3:
tmp+="標(biāo)識符中含有非法字符\n";
break;
case 4:
tmp+="錯(cuò)誤的標(biāo)識符\n";
break;
case 5:
tmp+="標(biāo)識符重定義\n";
break;
case 6:
tmp+="缺少'='\n";
break;
case 7:
tmp+="缺少賦值\n";
break;
case 8:
tmp+="錯(cuò)誤的賦值\n";
break;
case 9:
tmp+="缺少'('\n";
break;
case 10:
tmp+="缺少參數(shù)\n";
break;
case 11:
tmp+="參數(shù)使用錯(cuò)誤\n";
break;
case 12:
tmp+="標(biāo)識符未定義\n";
break;
case 13:
tmp+="不能對常量使用READ\n";
break;
case 14:
tmp+="缺少')'\n";
break;
case 15:
tmp+="不能對常量賦值\n";
break;
case 16:
tmp+="缺少':='\n";
break;
case 17:
tmp+="表達(dá)式錯(cuò)誤\n";
break;
case 18:
tmp+="缺少表達(dá)式\n";
break;
default:
tmp+="Unkown Error.\n";
}
cout<<tmp;
}
bool IsNumeral(char ch)
{
return ch>='0'&&ch<='9';
}
bool IsNumeralString(CString str)
{
int len=str.GetLength();
for(int i=0;i<len;i++)
if(!IsNumeral(str.GetAt(i)))
return false;
return true;
}
int ToInteger(CString str)
{
int result=0;
int n=0;
int len=str.GetLength();
for(int i=0;i<len;i++)
result=result*10+str.GetAt(i)-'0';
return result;
}
bool IsChar(char ch)
{
return IsCharLower(ch)||IsCharUpper(ch);
}
int GetVocableID(CString str)
{
for(int i=0;i<14;i++)
if(str==Keywords[i].Value)
return i;
if(IsNumeralString(str))
return 14;
return 15;
}
bool ContainIllegalChar(CString str)
{
int len=str.GetLength();
for(int i=0;i<len;i++)
if(GetVocableID(str.GetAt(i))>14&&!IsChar(str.GetAt(i)))
return true;
return false;
}
bool CanbeSymbol(CString str)
{
int len=str.GetLength();
if(len<1)
return false;
if(!IsChar(str.GetAt(0))&&!::IsCharUpper(str.GetAt(0)))
return false;
for(int i=1;i<len;i++)
if(!IsChar(str.GetAt(i))&&!IsNumeral(str.GetAt(i)))
return false;
return GetVocableID(str)==15;
}
Vocable* FindDefined(LinkMan& SymLnk,CString SymName)
{
Link* h=SymLnk.Head;
while(h->Next)
{
Vocable* vt=(Vocable*)(h->Next->Data);
if(vt)
if(vt->Value)
if(SymName.Compare(vt->Value)==0)
return vt;
h=h->Next;
}
return NULL;
}
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -