亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
99国产精品久久久| 三级欧美韩日大片在线看| 欧美另类高清zo欧美| 91免费看视频| 99精品视频一区二区| 懂色av一区二区在线播放| 青娱乐精品视频| 日本在线不卡一区| 美女视频一区在线观看| 日韩av网站免费在线| 美女网站一区二区| 国产精品香蕉一区二区三区| 成人午夜伦理影院| 91久久香蕉国产日韩欧美9色| 在线视频一区二区免费| 欧美日韩在线三区| 日韩精品一区在线| 国产欧美精品区一区二区三区| 中文字幕制服丝袜一区二区三区 | 爽爽淫人综合网网站| 日韩av中文字幕一区二区三区| 美女看a上一区| 成人sese在线| 欧美色综合影院| 26uuu国产日韩综合| 国产精品免费视频观看| 亚洲电影在线播放| 精品写真视频在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 99re视频精品| 精品国产欧美一区二区| 自拍偷拍亚洲综合| 免费久久99精品国产| 国产a精品视频| 欧美精品三级日韩久久| 国产日韩精品一区二区浪潮av | 欧美精三区欧美精三区| 欧美日韩国产综合视频在线观看| 欧美一区二区不卡视频| 国产三级一区二区| 亚洲综合色在线| 国产激情视频一区二区在线观看| 色老头久久综合| 国产性天天综合网| 日本中文在线一区| 色综合久久久久久久| 国产日韩亚洲欧美综合| 婷婷中文字幕一区三区| av亚洲精华国产精华精| 日韩美女一区二区三区四区| 男女男精品视频网| av在线不卡电影| 337p日本欧洲亚洲大胆色噜噜| 亚洲午夜在线电影| www.爱久久.com| 久久综合视频网| 蜜臂av日日欢夜夜爽一区| 欧美三级一区二区| 亚洲另类春色国产| 成人免费电影视频| 精品国产乱码久久久久久浪潮| 天天射综合影视| 欧美最新大片在线看| 成人欧美一区二区三区1314 | av一区二区三区黑人| 久久久久国产精品人| 黄色日韩三级电影| 日韩精品自拍偷拍| 免费成人深夜小野草| 91精品福利在线一区二区三区| 亚洲精品免费一二三区| 色综合色狠狠综合色| 亚洲天堂精品视频| 一本大道av伊人久久综合| 国产精品不卡在线| 色婷婷精品大在线视频| 亚洲精选视频在线| 91久久精品午夜一区二区| 亚洲黄色尤物视频| 欧美午夜精品久久久| 亚洲一区二区三区美女| 91官网在线免费观看| 亚洲国产精品尤物yw在线观看| 欧美亚洲国产bt| 日本不卡一区二区三区| 日韩欧美一区二区在线视频| 精品一区二区免费在线观看| 久久你懂得1024| 国产成人午夜高潮毛片| 中文一区二区在线观看| 日本韩国精品一区二区在线观看| 亚洲成av人片观看| 欧美一级一级性生活免费录像| 久久国产精品72免费观看| 国产日韩欧美精品电影三级在线| 不卡电影一区二区三区| 亚洲免费观看高清在线观看| 色偷偷成人一区二区三区91| 亚洲不卡在线观看| 日韩欧美123| www.亚洲激情.com| 亚洲一二三四在线观看| 欧美日韩国产精选| 丁香天五香天堂综合| 亚洲视频小说图片| 精品国产制服丝袜高跟| 91丨九色丨国产丨porny| 一区二区三区在线视频观看| 日韩一级大片在线| 成人免费av资源| 婷婷开心激情综合| 国产日韩精品一区二区三区在线| 99精品国产99久久久久久白柏| 亚洲美女免费视频| 欧美三级资源在线| 国产一区二区在线视频| 成人欧美一区二区三区视频网页| 欧美久久久久久久久中文字幕| 日韩高清在线观看| 中文字幕视频一区| 精品1区2区在线观看| 99视频一区二区三区| 老司机精品视频导航| 亚洲一区在线观看网站| 国产嫩草影院久久久久| 91精品国产一区二区三区香蕉| 成人免费看片app下载| 亚洲一区二区三区三| 国产精品久久久久影院色老大| 欧美亚男人的天堂| 成人国产精品免费观看动漫| 亚洲精品高清在线| 亚洲天堂2014| 91麻豆精品国产91久久久资源速度| 波多野结衣中文字幕一区| 麻豆91免费观看| 日韩中文字幕区一区有砖一区| 国产精品欧美久久久久无广告| 亚洲精品一区二区三区福利| 91精品视频网| 欧美疯狂做受xxxx富婆| 欧美伊人久久久久久午夜久久久久| 波多野结衣欧美| 不卡的av中国片| 高清不卡一二三区| 大胆欧美人体老妇| 成人av在线播放网站| 丁香一区二区三区| 成人黄色小视频| 97精品电影院| 91猫先生在线| 在线精品视频免费播放| 99国内精品久久| 色综合一个色综合| 在线观看av不卡| 欧美精品色一区二区三区| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品国产三级国产aⅴ原创| 国产日韩综合av| 亚洲三级小视频| 一区二区三区资源| 亚洲在线中文字幕| 偷拍日韩校园综合在线| 美国一区二区三区在线播放| 久久成人免费电影| 成人动漫一区二区| 色哟哟一区二区在线观看| 欧美色偷偷大香| 欧美大片日本大片免费观看| 国产亚洲综合在线| 亚洲三级小视频| 亚洲va韩国va欧美va精品| 免费精品视频最新在线| 国产成人亚洲综合a∨婷婷| 99精品热视频| 欧美一区二区精品在线| www欧美成人18+| 亚洲欧美电影一区二区| 午夜精品一区二区三区免费视频| 久久99精品一区二区三区三区| 成+人+亚洲+综合天堂| 欧美日韩在线三区| 久久嫩草精品久久久精品| 亚洲啪啪综合av一区二区三区| 偷偷要91色婷婷| 成人在线视频一区二区| 精品视频在线视频| 久久蜜臀中文字幕| 亚洲一区在线看| 国产ts人妖一区二区| 欧美日韩一级二级三级| 中文久久乱码一区二区| 亚洲高清视频中文字幕| 国产成人三级在线观看| 欧美放荡的少妇| 亚洲最大成人网4388xx| 国产精品白丝jk黑袜喷水| 欧美日韩亚洲丝袜制服| 欧美激情中文不卡| 热久久久久久久|