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

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

?? 說明.txt

?? 用vc++6.0制作
?? 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一区二区三区免费野_久草精品视频
欧美男男青年gay1069videost| 奇米四色…亚洲| www国产精品av| 91麻豆精品国产自产在线 | 亚洲天堂a在线| 中文字幕中文字幕在线一区| 精品福利av导航| 国产色91在线| 亚洲欧洲国产日韩| 色噜噜夜夜夜综合网| 成人国产精品免费网站| 99九九99九九九视频精品| 成人动漫视频在线| 在线观看中文字幕不卡| www.久久久久久久久| av在线不卡网| 成人蜜臀av电影| 丁香六月久久综合狠狠色| 91网站黄www| 99视频精品在线| 欧美午夜精品一区| 日韩欧美国产午夜精品| 日本一区二区久久| 国产精品卡一卡二| 午夜精品一区二区三区免费视频| 久久99国产精品尤物| 91小视频免费观看| 欧美不卡视频一区| 国产精品久久久久久一区二区三区| 久久久亚洲欧洲日产国码αv| 欧美成人一区二区| 成人免费小视频| 麻豆传媒一区二区三区| 欧美综合一区二区| 中文字幕一区二区三区不卡在线| 日本成人在线不卡视频| 韩国成人精品a∨在线观看| 波多野结衣亚洲| 国产亚洲欧美日韩日本| 亚洲综合色在线| 94色蜜桃网一区二区三区| 欧美日韩电影在线播放| 26uuuu精品一区二区| 日韩电影免费一区| 欧美美女一区二区三区| 中文字幕亚洲成人| 成人国产精品免费观看动漫| 久久精品亚洲精品国产欧美kt∨ | 日韩黄色免费电影| 亚洲激情自拍视频| 欧美日韩在线综合| 在线观看国产一区二区| 亚洲午夜久久久| 欧美不卡一区二区| 粉嫩aⅴ一区二区三区四区| 中文字幕第一区| 欧美一区二区三区四区久久 | 久久九九久久九九| 日本大胆欧美人术艺术动态| 欧美喷水一区二区| 美女网站色91| 精品欧美一区二区三区精品久久| 欧美国产成人精品| 成人久久18免费网站麻豆| 国产亚洲视频系列| av在线不卡网| 肉色丝袜一区二区| 精品电影一区二区| 成人免费毛片app| 亚洲线精品一区二区三区 | 国产精品久久久久久户外露出 | 国产精品欧美一级免费| 97se亚洲国产综合自在线不卡| 午夜伊人狠狠久久| 中文字幕制服丝袜成人av | 亚洲美女屁股眼交3| 欧美一区二区在线观看| 99精品欧美一区二区蜜桃免费| 美女视频黄久久| 亚洲va天堂va国产va久| 一区二区三区四区在线免费观看 | 国产呦萝稀缺另类资源| 亚洲日本va午夜在线电影| 精品国产精品一区二区夜夜嗨| 国产在线国偷精品免费看| 一区二区在线观看视频| 亚洲摸摸操操av| 中文字幕不卡的av| 久久久久99精品一区| 欧美人牲a欧美精品| 日本精品视频一区二区三区| 粉嫩av一区二区三区粉嫩| 国产成人av电影在线观看| 成人少妇影院yyyy| 日本系列欧美系列| 久久91精品久久久久久秒播| 毛片基地黄久久久久久天堂| 国产大陆a不卡| 美女在线视频一区| 中文字幕一区三区| 裸体健美xxxx欧美裸体表演| 欧美天天综合网| 亚洲一区二区在线播放相泽| 91免费看`日韩一区二区| 久久久亚洲精品一区二区三区| 久久黄色级2电影| 久久久久久久久免费| 日韩av不卡一区二区| 欧美日韩一区中文字幕| 自拍偷自拍亚洲精品播放| 国产精品一区二区免费不卡 | 亚洲成a人片在线不卡一二三区| 韩国欧美国产1区| 日韩精品一区二区在线观看| 亚洲日韩欧美一区二区在线| 国产老肥熟一区二区三区| 欧美日韩精品福利| 亚洲成人福利片| 91久久精品一区二区三区| 国产亚洲综合av| 成人深夜在线观看| 国产精品久久久久久久久果冻传媒| 国产精品一区二区久久不卡| 日韩久久久精品| 国产自产视频一区二区三区| 欧美一区二区三区四区在线观看| 亚洲韩国精品一区| 欧美猛男gaygay网站| 日韩专区中文字幕一区二区| 欧美一区二区精品在线| 狠狠网亚洲精品| 中文字幕国产一区| 欧美性猛交xxxxxx富婆| 精品一区二区三区免费观看 | 91啪在线观看| 国产精品久久久久久福利一牛影视 | 精品久久久久久最新网址| 美腿丝袜在线亚洲一区| 精品国产a毛片| 91福利视频在线| 日韩影视精彩在线| 欧美极品aⅴ影院| 欧美久久免费观看| 国产一区二区三区在线观看免费| 国产精品视频一区二区三区不卡| 97精品久久久久中文字幕| 男男成人高潮片免费网站| 国产精品日韩精品欧美在线| 欧美日韩国产一二三| 国产福利91精品| 久久99在线观看| 日韩二区三区在线观看| 亚洲另类春色校园小说| 日韩欧美国产一区二区三区| 91国在线观看| 成人午夜精品在线| 国产精品亚洲视频| 美女视频网站黄色亚洲| 一二三区精品福利视频| 久久精品免视看| 久久这里只精品最新地址| 欧美撒尿777hd撒尿| 在线精品视频免费观看| 在线免费观看日韩欧美| 色婷婷av久久久久久久| 日本精品一区二区三区高清| 色婷婷激情久久| 欧美三级中文字幕| 欧美三级电影在线看| 欧美日本免费一区二区三区| 91黄色免费版| 欧美精品一级二级| 欧美xxx久久| 亚洲欧洲中文日韩久久av乱码| 中文字幕不卡三区| 午夜精品在线视频一区| 紧缚捆绑精品一区二区| 波多野结衣中文字幕一区二区三区 | 欧美另类高清zo欧美| av不卡免费电影| 成人av在线一区二区| 不卡视频在线观看| 91黄色免费看| 日韩欧美国产三级电影视频| 日韩视频免费直播| 国产网站一区二区| 中文字幕一区不卡| 一级日本不卡的影视| 亚洲sss视频在线视频| 奇米影视7777精品一区二区| 日韩黄色免费网站| 成人夜色视频网站在线观看| 99国产精品国产精品久久| 欧美日韩另类一区| 久久午夜老司机| 亚洲国产精品久久久久婷婷884| 日本不卡不码高清免费观看| 波多野结衣中文一区| 欧美一区二视频| 亚洲国产精品嫩草影院|