亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 說明.txt

?? 一個完整的編譯器設計
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
詞法語法分析類: 
/************************************************************************ 
* 文件名:    FenXi.h 
* 文件描述:  詞法語法分析的頭文件
* 創建人:    程紅秀, 2005年06月15日 
* 版本號:    1.0 
************************************************************************/ 

#if !defined _FENXI_H
#define _FENXI_H


struct CIFA //保存詞法分析結果
{
int nType; //0:錯誤, 1:標志符, 2:數字, 3-:關鍵字和操作符, -1:結束符
int nValue; //二元式中的值
char szText[20]; //單詞
int nAddr; //源文件緩沖區中地址
};

class CFenXi  
{ 

public:
void YuFaFenXi();  //語法分析
void CiFaFenXi();  //詞法分析

int m_nErrAddr; //語法錯誤對應單詞的地址
int m_nErrNo; //語法錯誤代碼
char m_str[20000]; //源程序緩沖區
char m_szErrMsg[100][100]; //錯誤信息表
CIFA * m_cifa[10000]; //詞法分析結果

protected:
void init();

int m_nCur; //用于語法分析中,指示詞法分析結果表中當前的位置
int m_n; //用于詞法分析中,用于指示詞法分析結果的個數
char m_szKW[50][20]; //關鍵詞表

int FindInKWTab(char *);

/*----------------語法分析函數-----------------------*/
bool y_GuanXi(); //關系
bool y_GuanXiBiaoDaShi(); //關系表達式
bool y_BuErBiaoDaShi(); //布爾表達式
bool y_YinZi(); //因子
bool y_Xiang(); //項
bool y_BiaoDaShi(); //表達式
bool y_ShiCanBiao(); //實參表
bool y_GuoChengYuJu(); //過程語句
bool y_XunHuanYuJu(); //循環語句
bool y_TiaoJianYuJu(); //條件語句
bool y_FuZhiYuJu(); //賦值語句
bool y_FuHeYuJu(); //復合語句
bool y_YuJu(); //語句
bool y_YuJuChuan(); //語句串
bool y_XingCan(); //形參
bool y_XingCanBuFeng(); //形參部分
bool y_GuoChengShengMing(); //過程說明
bool y_BianliangShengMing();//簡便說明
bool y_ShengMing(); //說明 
bool y_ShengMingChuan(); //說明串
bool y_ChengXuTi(); //程序體
bool y_ChengXu(); //程序
/*-----------------------------------------------------*/
};

#endif 


 

/************************************************************************ 
* 文件名:    FenXi.cpp 
* 文件描述:  詞法語法分析的實現文件
* 創建人:    程紅秀, 2005年06月15日 
************************************************************************/ 
#include "stdafx.h"
#include "fenxi.h"


/*================================================================ 
* 函數名:    CiFaFenXi
* 功能描述:   詞法分析 (public)
* 返回值:    void
================================================================*/
void CFenXi::CiFaFenXi()
{
BOOL flag=false;
char token[20];
int k,v;

init();

for (int i=0;i<m_n;i++)  //當第2次調用該函數時,就要釋放前1次的資源
delete m_cifa[i];

int n=0; //用于指示當前的字符
m_n=0; //詞法結果的個數

while (m_str[n])
{
if (flag)
{
while (!((m_str[n]=='*')&&(m_str[n+1]=='/')))
{
if (m_str[n]) 
n++;
else 
break;
}

if (m_str[n])
{
n++;
n++;
flag=false;
}
}
while (1)
{
while ((m_str[n]==32) || (m_str[n]==9))
n++;

if (!((m_str[n]==13) && (m_str[n+1]==10)))
break;

n++;
n++;
}


if (isalpha(m_str[n])) //字母
{
k=0;
while (1)
{
if (k<19) //標志符的長度為20
token[k++]=m_str[n++];
else 
n++;

if (!isalnum(m_str[n])) //如果不是數字或字母就退出
break;
}

token[k]=0;
v=FindInKWTab(token); //查找關鍵詞表
if (v) //如果是關鍵詞
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
else   //普通標志符
{
m_cifa[m_n]=new CIFA;

    /*----------在詞法分析結果中查找-----------*/
int vv=1;
for (int i=0;i<m_n;i++)
{
if (m_cifa[i]->nType==1)
{
vv++;
if (!::stricmp(m_cifa[i]->szText,token))
m_cifa[m_n]->nValue= m_cifa[i]->nValue;
}
}
m_cifa[m_n]->nValue=vv;
    /*---------------------------------------*/

m_cifa[m_n]->nType=1;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
}
else if (isdigit(m_str[n])) //數字
{
k=0;
BOOL error=false;
while (1)
{
if (k<=8) 
token[k++]=m_str[n++];
else
{
error=true;
n++;
}
if (!isdigit(m_str[n])) 
break;
}
token[k]=0;
v=::strtol(token,NULL,10);
if (error)
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=1;
m_cifa[m_n]->nType=0;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
else
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=v;
m_cifa[m_n]->nType=2;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n-k;
m_n++;
}
}
else
switch (m_str[n]) //其他符號
{
case '+':
case '-':
case '*':
case '~':
case '&':
case '|':
case '=':
case ';':
case '.':
case ',':
case '(':
case ')':
token[0]=m_str[n];
token[1]=0;
v=FindInKWTab(token);

m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;

m_n++;
n++;
break;

case '\0':
break;

case '/':
switch (m_str[n+1])
{
case '*':
n++;
n++;
flag=true;
break;
default:
token[0]=m_str[n];
token[1]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
}
break;

case '<':
switch (m_str[n+1])
{
case '=':
token[0]=m_str[n];
token[1]=m_str[n+1];
token[2]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
n++;
break;
case '>':
token[0]=m_str[n];
token[1]=m_str[n+1];
token[2]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
n++;
break;

default:
token[0]=m_str[n];
token[1]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
}
break;

case '>':
switch (m_str[n+1])
{
case '=':
token[0]=m_str[n];
token[1]=m_str[n+1];
token[2]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
n++;
break;

default:
token[0]=m_str[n];
token[1]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
}
break;

case ':':
switch (m_str[n+1])
{
case '=':
token[0]=m_str[n];
token[1]=m_str[n+1];
token[2]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
n++;
break;

default:
token[0]=m_str[n];
token[1]=0;
v=FindInKWTab(token);
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=v;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
}
break;

default:
token[0]=m_str[n];
token[1]=0;
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=2;
m_cifa[m_n]->nType=0;
strcpy(m_cifa[m_n]->szText,token);
m_cifa[m_n]->nAddr=n;
m_n++;
n++;
} 

if (m_n==10000-2) //詞法分析的結果的個數規定為10000
{
m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=99;
m_cifa[m_n]->nType=0;
strcpy(m_cifa[m_n]->szText,"");
m_cifa[m_n]->nAddr=n-1;
m_n++;
break;
}
} 

m_cifa[m_n]=new CIFA;
m_cifa[m_n]->nValue=0;
m_cifa[m_n]->nType=-1; //結束符
strcpy(m_cifa[m_n]->szText,"");
m_cifa[m_n]->nAddr=0;
m_n++;

return;
}




/*================================================================ 
* 函數名:    FindInKWTab(char * a)
* 功能描述:   在關鍵字表中查找  (protected)
* 返回值:    int (如果找到返回在表中的位置,否則返回0)
================================================================*/
int CFenXi::FindInKWTab(char * a)
{
for (int i=0;i<50;i++)
if (!::stricmp(m_szKW[i],a))   //找到
return i;

return 0; //未找到
}



/*================================================================ 
* 函數名:    YuFaFenXi
* 功能描述:   語法分析 (public)
* 返回值:    void
* 作 者:     程紅秀 2005年6月15日
================================================================*/
void CFenXi::YuFaFenXi()
{
if (m_n==0) 
return; //未進行詞法分析

m_nCur=0; //m_nCur用語指示詞法分析結果表中單詞的位置

y_ChengXu(); //從 程序 開始

return;
}


/*================================================================ 
* 函數名:    y_ChengXu
* 功能描述:   分析整個程序 (protected)
* 返回值:    bool
* 示例:
Program abc;
這里是程序體 
.
================================================================*/
bool CFenXi::y_ChengXu() //程序
{
switch (m_cifa[m_nCur]->nType)
{
case 3: //從program開始
break;

default:
m_nErrNo=3; //缺少關鍵字“ program ”!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++; //分析下一個單詞


switch (m_cifa[m_nCur]->nType)
{
case 1: //標志符
break;

default:
m_nErrNo=4; //program 后缺少標識符!
m_nErrAddr=m_nCur;
return false;
}


m_nCur++;

switch (m_cifa[m_nCur]->nType)
{
case 30: //;
break;
default:
m_nErrNo=5; //缺少“ ; ”符號!
m_nErrAddr=m_nCur;
return false;
}


m_nCur++;

if (!y_ChengXuTi())  //分析程序體
return false;

switch (m_cifa[m_nCur]->nType)
{
case 31: //. (程序的最后一個符號)
break;
default:
m_nErrNo=6; //缺少程序結束符“ . ”符號!
m_nErrAddr=m_nCur;
return false;
}


m_nCur++;
switch (m_cifa[m_nCur]->nType)
{
case -1: //end of cifa
break;
default:
m_nErrNo=96; //源程序結束符 end. 后還有多余內容!
m_nErrAddr=m_nCur;
return false;
}


m_nErrNo=0; //語法分析成功
m_nErrAddr=m_nCur;
return true;
}


/*================================================================ 
* 函數名:    y_ChengXuTi
* 功能描述:   分析程序體 (protected)
* 返回值:    bool
* 示例:
  Integer x,y,z;   
  Real a,b;        //變量聲明

  Procedure ab(Var m,n:Integer; t:Real);  //過程聲明
  Begin
  t:=n+m;
  If m>n then n:=m else t:=m;
  While nbool CFenXi::y_ChengXuTi()
{
switch (m_cifa[m_nCur]->nType)
{
case 5: //procedure 
case 14: //booleger
case 15: //real

if (!y_ShengMingChuan())   //聲明串(用;隔開的多個變量或過程聲明)
return false;

switch (m_cifa[m_nCur]->nType)
{
case 30: //;
break;

default:
m_nErrNo=5; //缺少“ ; ”符號!"
m_nErrAddr=m_nCur;
return false;
}
m_nCur++;
break;

case 6: //begin
break;

default:
m_nErrNo=7; //缺少《程序體》,應為 begin,integer,real,procedure"
m_nErrAddr=m_nCur;
return false;
}

switch (m_cifa[m_nCur]->nType)
{
case 6: //begin
break;
default:
m_nErrNo=8; //缺少保留字“ begin ”!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++;
if (!y_YuJuChuan())  //語句串
return false;

switch (m_cifa[m_nCur]->nType)
{
case 7: //end
break;
default:
m_nErrNo=10; //缺少保留字“ end ”!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++;

return true;
}


/*================================================================ 
* 函數名:    y_ShengMingChuan
* 功能描述:   聲明串 用;隔開的多個聲明(protected)
* 返回值:    void
================================================================*/
bool CFenXi::y_ShengMingChuan()
{
if (!y_ShengMing()) 
return false;

while (m_cifa[m_nCur]->nType==30 && m_cifa[m_nCur+1]->nType!=6) //是; 不是begin
{
m_nCur++;
if (!y_ShengMing()) //遞歸調用
return false;
}
return true;
}

/*================================================================ 
* 函數名:    y_ShengMing
* 功能描述:   聲明 (protected)
* 返回值:    void
================================================================*/
bool CFenXi::y_ShengMing()
{
switch (m_cifa[m_nCur]->nType)
{
case 14: //booleger
case 15: //real
if (!y_BianliangShengMing()) //變量聲明
return false;
break;

case 5: //procedure
if (!y_GuoChengShengMing()) //過程聲明
return false;
break;

default:
m_nErrNo=11; //缺少聲明(integer,real,procedure)
m_nErrAddr=m_nCur;
return false;
}
return true;
}


/*================================================================ 
* 函數名:    y_BianliangShengMing
* 功能描述:   變量聲明 (protected)
* 返回值:    void
* 示例: Integer x,y,z;
================================================================*/
bool CFenXi::y_BianliangShengMing()
{
switch (m_cifa[m_nCur]->nType)
{
case 14: //booleger
case 15: //real
break;

default:
m_nErrNo=12; //缺少變量類型 integer 或 real!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++;

switch (m_cifa[m_nCur]->nType)
{
case 1: //id
break;

default: 
m_nErrNo=14; //變量聲明后缺少標識符!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++;

while (m_cifa[m_nCur]->nType==32)  //32 , 分析用逗號隔開的連續聲明的幾個變量
{
m_nCur++;

switch (m_cifa[m_nCur]->nType)
{
case 1: //id
break;

default:
m_nErrNo=14;  //變量聲明后缺少標識符
m_nErrAddr=m_nCur;
return false;
}
m_nCur++;
}
return true;
}

/*================================================================ 
* 函數名:    y_GuoChengShengMing
* 功能描述:   過程聲明 (protected)
* 返回值:    void
* 示例:
  Procedure ab(形參);
這里是程序體

================================================================*/
bool CFenXi::y_GuoChengShengMing()
{
switch (m_cifa[m_nCur]->nType)
{
case 5: //procedure
break;

default:
m_nErrNo=15; //缺少保留字“ procedure ”!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++;

switch (m_cifa[m_nCur]->nType)
{
case 1: //id
break;

default:
m_nErrNo=13; //procedure 后缺少標識符!
m_nErrAddr=m_nCur;
return false;
}

m_nCur++;

switch (m_cifa[m_nCur]->nType)
{
case 33: //(
if (!y_XingCanBuFeng())  //形參
return false;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国偷自产一区二区三区成为亚洲经典 | 精品午夜久久福利影院| 国产麻豆午夜三级精品| 欧洲av一区二区嗯嗯嗯啊| 精品少妇一区二区三区在线播放 | 国产真实乱对白精彩久久| 91麻豆免费观看| 欧美国产综合一区二区| 午夜精品久久一牛影视| 99精品久久99久久久久| 欧美刺激午夜性久久久久久久| 国产精品免费久久久久| 精品系列免费在线观看| 欧美日韩国产在线播放网站| 国产精品免费网站在线观看| 久久aⅴ国产欧美74aaa| 欧美精品在线一区二区| 亚洲欧美另类综合偷拍| 国产不卡免费视频| 2024国产精品视频| 蜜臀av一区二区在线观看| 欧美视频你懂的| 亚洲制服丝袜一区| 色综合视频在线观看| 综合久久久久综合| 91丝袜国产在线播放| 国产精品灌醉下药二区| 国产电影一区在线| 2021久久国产精品不只是精品| 亚洲国产成人av| 欧美亚洲国产怡红院影院| 亚洲手机成人高清视频| 一本到不卡精品视频在线观看| 国产精品毛片大码女人| 成人黄色片在线观看| 中文字幕av在线一区二区三区| 国产伦精一区二区三区| 久久免费视频色| 成人一区在线看| 亚洲免费在线观看视频| 色哟哟国产精品免费观看| 亚洲激情男女视频| 精品视频资源站| 免费一级欧美片在线观看| 日韩欧美的一区二区| 狠狠色狠狠色合久久伊人| 国产午夜三级一区二区三| 成人理论电影网| 亚洲色图欧美在线| 欧美视频精品在线观看| 蜜臀久久久99精品久久久久久| 日韩精品一区二区三区中文精品| 久久99久久99精品免视看婷婷| 欧美精品一区二区在线播放| 国产成人自拍高清视频在线免费播放 | 精品88久久久久88久久久| 国产一区二区91| 国产精品久久久99| 欧美又粗又大又爽| 日日夜夜一区二区| 国产亚洲精品7777| 色8久久精品久久久久久蜜| 亚洲.国产.中文慕字在线| 日韩免费高清视频| jizz一区二区| 婷婷中文字幕综合| 久久久久国产免费免费| jlzzjlzz亚洲女人18| 天天爽夜夜爽夜夜爽精品视频| 日韩精品资源二区在线| 99re成人精品视频| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品色眯眯| 91精品综合久久久久久| 成人网在线播放| 日韩av电影免费观看高清完整版 | 91丨九色丨蝌蚪富婆spa| 日韩黄色免费电影| 中文字幕色av一区二区三区| 91精品国产综合久久婷婷香蕉 | 国产精品久久夜| 欧美日本在线播放| 波多野结衣一区二区三区| 偷窥国产亚洲免费视频| 欧美国产成人在线| 精品久久一二三区| 欧美人伦禁忌dvd放荡欲情| 国产一区二区三区久久悠悠色av| 亚洲精品中文字幕在线观看| 26uuuu精品一区二区| 欧美丰满嫩嫩电影| 色哟哟国产精品免费观看| 在线观看欧美精品| 成人黄色电影在线| 国产一区二区影院| 六月婷婷色综合| 五月婷婷欧美视频| 亚洲制服丝袜一区| 亚洲卡通欧美制服中文| 欧美国产一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 欧美激情一区二区| 久久免费国产精品| 日韩精品一区二区三区四区| 欧美日本不卡视频| 欧美性受极品xxxx喷水| 色综合久久久网| 色综合久久中文字幕| av成人动漫在线观看| 国产成人精品免费网站| 国产精品一区二区在线观看不卡| 日本中文字幕一区二区有限公司| 亚洲精品大片www| 亚洲精品乱码久久久久久| 国产精品久久久久久久裸模| 国产精品午夜久久| 国产精品三级电影| 国产精品丝袜黑色高跟| 国产欧美日韩精品在线| 中文字幕欧美区| 欧美国产1区2区| 中文字幕在线观看不卡| 中文字幕日韩精品一区| 亚洲欧美另类小说| 亚洲成人激情自拍| 肉丝袜脚交视频一区二区| 强制捆绑调教一区二区| 麻豆成人久久精品二区三区小说| 久久电影网电视剧免费观看| 久久疯狂做爰流白浆xx| 国产最新精品免费| 岛国av在线一区| 色偷偷一区二区三区| 欧美片在线播放| 欧美一区欧美二区| 久久久高清一区二区三区| 国产欧美一区在线| 亚洲码国产岛国毛片在线| 亚洲精品免费电影| 蜜臀av性久久久久蜜臀av麻豆| 精彩视频一区二区三区| 成人av第一页| 欧美精品在线视频| 国产三级三级三级精品8ⅰ区| 国产精品亲子乱子伦xxxx裸| 亚洲综合成人在线视频| 美女久久久精品| 成人午夜大片免费观看| 欧美性感一区二区三区| 久久综合九色综合欧美就去吻 | 欧美成人vr18sexvr| 国产精品狼人久久影院观看方式| 亚洲一区二区三区四区五区中文 | 国产精品久久久久一区二区三区 | 99免费精品视频| 3d动漫精品啪啪一区二区竹菊| 久久美女艺术照精彩视频福利播放| 国产精品久久久久永久免费观看 | 亚洲成人免费观看| 国产精品一区二区91| 欧美视频一区二区在线观看| 久久久久久免费毛片精品| 亚洲日本在线视频观看| 亚洲国产精品天堂| 激情文学综合插| 91天堂素人约啪| 久久蜜桃av一区二区天堂| 亚洲欧美日韩在线播放| 日本亚洲免费观看| 视频一区在线播放| 国产成a人亚洲精| 欧美性高清videossexo| 99国产精品一区| xf在线a精品一区二区视频网站| 一区精品在线播放| 日韩av午夜在线观看| 在线视频国产一区| 国产亚洲午夜高清国产拍精品| 一区二区三区高清| 国产乱人伦偷精品视频免下载| 欧美日韩国产大片| 亚洲欧洲成人自拍| 狠狠色丁香婷婷综合久久片| 欧美日韩精品一区二区三区蜜桃| 久久久国产精华| 日本美女视频一区二区| 国产电影一区在线| 久久久久97国产精华液好用吗| 一区av在线播放| 成人av网站在线观看免费| 678五月天丁香亚洲综合网| 亚洲欧美精品午睡沙发| 久久激情五月激情| 欧美视频在线不卡| 亚洲国产aⅴ成人精品无吗| 成人妖精视频yjsp地址| 欧美大尺度电影在线| 亚洲国产一区二区在线播放| 欧美亚洲日本一区| 亚洲欧美国产毛片在线|