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

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

?? 說明.txt

?? 用mfc編的一個mini pascal compiler
?? 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一区二区三区免费野_久草精品视频
日韩一区精品字幕| 久久婷婷国产综合精品青草| 欧美日韩在线播| 日韩欧美视频在线| 国产精品欧美久久久久一区二区| 亚洲一区二区三区四区在线观看| 丝袜亚洲另类丝袜在线| 国产揄拍国内精品对白| 色婷婷av一区二区三区大白胸| 欧美一区二区不卡视频| 国产精品美日韩| 婷婷激情综合网| 成人午夜电影网站| 欧美日韩一区 二区 三区 久久精品| 精品入口麻豆88视频| 亚洲精品亚洲人成人网在线播放| 美女诱惑一区二区| 波多野结衣在线aⅴ中文字幕不卡| 欧美人成免费网站| 国产精品水嫩水嫩| 久久国产精品第一页| 91精品福利视频| 国产性色一区二区| 舔着乳尖日韩一区| 99re在线视频这里只有精品| 精品国产污网站| 亚洲国产综合视频在线观看| 国产成人在线影院| 91精品国产综合久久小美女| 亚洲欧洲一区二区在线播放| 久久99精品久久久久久动态图| 91视频com| 亚洲国产成人午夜在线一区| 丝袜亚洲另类丝袜在线| 日本电影欧美片| 国产女主播视频一区二区| 日本aⅴ免费视频一区二区三区| 色综合中文综合网| 不卡的av在线| 精品国产乱码久久久久久图片| 亚洲在线视频网站| 99久久夜色精品国产网站| 蜜臀a∨国产成人精品| 日本韩国精品一区二区在线观看| 国产人久久人人人人爽| 久久精品国产秦先生| 欧美日韩视频在线一区二区| 一区二区中文视频| 丁香激情综合国产| 久久色在线视频| 免费不卡在线视频| 欧美一区二区三区视频在线| 亚洲在线一区二区三区| 色综合视频在线观看| 国产精品每日更新在线播放网址| 国产一区二区三区免费观看| 日韩欧美激情一区| 免费精品视频在线| 8x福利精品第一导航| 午夜精品一区二区三区三上悠亚 | 国产精品毛片无遮挡高清| 国产一区二区在线看| 欧美成人在线直播| 美腿丝袜亚洲综合| 欧美成人猛片aaaaaaa| 免费观看久久久4p| 欧美一区二区美女| 免费观看久久久4p| 精品国产一区二区亚洲人成毛片| 麻豆精品一二三| 日韩欧美亚洲国产精品字幕久久久| jizzjizzjizz欧美| 久久精品视频在线看| 国产伦精品一区二区三区在线观看| 欧美大片国产精品| 韩国v欧美v亚洲v日本v| 精品国偷自产国产一区| 国产一区亚洲一区| 日本一区二区三区在线不卡 | 中文字幕av一区二区三区高| 国产99久久久国产精品| 国产精品国产三级国产专播品爱网 | 欧美视频在线观看一区| 欧美在线观看你懂的| 亚洲乱码国产乱码精品精可以看 | 日韩成人伦理电影在线观看| 91精品国产麻豆| 国内精品嫩模私拍在线| 国产日韩精品视频一区| 成人激情综合网站| 亚洲色图视频网站| 欧美日韩大陆一区二区| 精一区二区三区| 亚洲国产精品传媒在线观看| 色噜噜狠狠色综合欧洲selulu| 亚洲一区在线观看网站| 日韩视频一区二区在线观看| 极品美女销魂一区二区三区| 国产精品区一区二区三区| 日本精品视频一区二区| 日韩av电影一区| 久久久国产午夜精品| 99国产欧美久久久精品| 午夜精品福利一区二区三区av | 国产在线一区观看| 亚洲天堂2016| 91精品黄色片免费大全| 国产在线精品免费| 一区二区三区中文免费| 欧美一区二区在线免费播放| 懂色av一区二区三区免费观看| 亚洲三级电影网站| 欧美一区二区久久| 成av人片一区二区| 午夜精品久久久久影视| 国产欧美一区二区三区鸳鸯浴| 色一情一伦一子一伦一区| 免费看日韩精品| 17c精品麻豆一区二区免费| 欧美日本国产一区| 大美女一区二区三区| 香蕉影视欧美成人| 中文字幕欧美国产| 欧美人妖巨大在线| jizz一区二区| 久久精品国产亚洲5555| 亚洲综合自拍偷拍| 久久综合资源网| 欧美日韩精品久久久| 国产.欧美.日韩| 免费在线观看日韩欧美| 亚洲免费电影在线| 久久久久久久久久久久久夜| 欧美久久高跟鞋激| 成人免费视频网站在线观看| 日本aⅴ亚洲精品中文乱码| 亚洲欧美电影一区二区| wwwwww.欧美系列| 欧美剧情片在线观看| 波多野结衣中文一区| 激情丁香综合五月| 视频一区视频二区在线观看| 国产精品日产欧美久久久久| 精品国产免费一区二区三区四区| 欧美午夜精品免费| 成人av在线一区二区| 国内成人免费视频| 日韩精品一区第一页| 一区二区在线观看av| 中文字幕不卡三区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲男人的天堂在线观看| xnxx国产精品| 91精品国产全国免费观看| 欧美在线综合视频| 成人黄色网址在线观看| 狠狠色丁香久久婷婷综合_中| 亚洲成av人片一区二区三区 | 欧美日韩精品电影| 色一情一乱一乱一91av| www.亚洲激情.com| 国产传媒欧美日韩成人| 国内精品视频666| 久久99久久精品欧美| 日本伊人色综合网| 日韩精品久久久久久| 亚洲国产精品一区二区久久 | 在线播放中文字幕一区| 欧美性生交片4| 色婷婷av一区二区三区gif| www.激情成人| 成人激情综合网站| 波波电影院一区二区三区| 成人精品国产免费网站| 岛国av在线一区| 成人免费看视频| 成人av资源网站| www.在线欧美| 色综合夜色一区| 色婷婷精品大在线视频| 欧洲中文字幕精品| 欧美在线观看视频一区二区| 在线视频中文字幕一区二区| 91福利小视频| 欧美性大战久久久久久久蜜臀| 91福利视频久久久久| 欧美在线观看视频一区二区 | 久久精品999| 麻豆精品一区二区三区| 国产一区二区三区久久久| 国产激情视频一区二区三区欧美 | 亚洲欧美另类综合偷拍| 一区二区三区在线播| 亚洲综合一区二区| 亚洲韩国精品一区| 蜜臀国产一区二区三区在线播放| 蜜桃av一区二区在线观看| 久久99这里只有精品| 国产福利精品一区| 成人av资源下载|