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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fc-compile.cpp

?? 編譯原理的一個(gè)課程設(shè)計(jì)
?? CPP
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
#include "stdafx.h"
#include "FC.h"
#include "FCDlg.h"
#include <math.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

CFCDlg::ZIdentType CFCDlg::GetIdentType(char ident[IDENTLENGTH])
{
	int i;
	for(i=0;i<=m_iFunction;i++)//查找函數(shù)名字列表
		if(strcmp(ident,m_function[i].name)==0)
			return IT_FUNCTION;
	if(m_iFunction>=0 && m_iFunction<=m_iFunction)
	{
		for(i=m_function[m_iFunction].iIdent-1;i>=0;i--)//查找變量列表
			if(strcmp(ident,m_function[m_iFunction].ident[i].name)==0)//標(biāo)識(shí)符名相同
			{
				if(m_function[m_iFunction].ident[i].level==m_function[m_iFunction].level)
					return m_function[m_iFunction].ident[i].type;//當(dāng)前作用域的變量或數(shù)組
				else if(m_function[m_iFunction].ident[i].level>=0)
				{
					switch(m_function[m_iFunction].ident[i].type)
					{
					case IT_INT:return IT_INTINRANG;
					case IT_DOUBLE:return IT_DOUBLEINRANG;
					case IT_INTARRAY:return IT_IARRAYINRANG;
					case IT_DOUBLEARRAY:return IT_DARRAYINRANG;
					}
				}
			}
		for(i=0;i<m_function[m_iFunction].iParam;i++)//查找參數(shù)列表
			if(strcmp(ident,m_function[m_iFunction].param[i].name)==0)
				return m_function[m_iFunction].param[i].type;
	}
	return IT_NULL;
}

BOOL CFCDlg::ErrorReport(CFCErrorDlg::ZErrorType et)
{
	m_iErrorCount++;
	int i,i0,cnt=0;
	for(i=0;cnt<m_iLine;i++)
		if(m_source[i]=='\n')
			cnt++;
	i0=i;
	for(i0=i;i<m_SourceLength;i++)
		if(m_source[i]=='\r')
			break;
	CFCErrorDlg dlg;
	MessageBeep(0);
	if(dlg.ErrorReport(m_iLine+1,m_source.Mid(i0,i-i0),et)==IDCANCEL)
	{
		if(m_iStatus==2)On_ExitCompile();
		else if(m_iStatus==4)On_ExitTranslate();
		return FALSE;
	}
	return TRUE;
}

BOOL CFCDlg::SearchMain(void)
{
	int i,cnt,n;
	for(i=0;i<m_iFunction;i++)
		if(strcmp("main",m_function[i].name)==0)
			break;
	if(i==m_iFunction)
	{
		if(!ErrorReport(CFCErrorDlg::ET_NOMAIN))
			return FALSE;
	}
	else if(m_function[i].iParam!=0)
	{
		if(!ErrorReport(CFCErrorDlg::ET_PARAMMAIN))
			return FALSE;
	}
	else if(m_function[i].ReturnType!=IT_VOID)
	{
		if(!ErrorReport(CFCErrorDlg::ET_NOVOIDMAIN))
			return FALSE;
	}
	n=2*i+1;
	cnt=0;
	for(i=1;cnt<n && i<nCODE;i++)
		if(m_code[i].op==OP_NULL)
			cnt++;
	m_code[0].op=OP_CALL;
	m_code[0].sd.iNumber=i-1;
	return TRUE;
}

BOOL CFCDlg::TestCode(void)
{
	if(m_iCode>=nCODE)
		return ErrorReport(CFCErrorDlg::ET_LONGPROGRAM);
	return TRUE;
}

BOOL CFCDlg::GetElement(void)//詞法分析函數(shù)
{
	while(1)//跳過空格,tab,回車符,注釋
	{
		if(m_iCount>=m_SourceLength)//到達(dá)源代碼尾
		{
			m_curElement=E_FILEEND;
			return TRUE;
		}
		if(m_source[m_iCount]==' ' || m_source[m_iCount]=='\t' || //空白字符
			m_source[m_iCount]=='\r' || m_source[m_iCount]=='\n')	//換行字符
		{
			if(m_source[m_iCount]=='\n')
				m_iLine++;
			m_iCount++;
		}
		else if(m_source[m_iCount]=='/' && m_iCount+1<m_SourceLength) //可能為注釋
		{
			if(m_source[m_iCount+1]=='/')//單行注釋
			{
				for(m_iCount+=2;m_iCount<m_SourceLength && m_source[m_iCount]!='\n';m_iCount++);
				if(m_iCount!=m_SourceLength)
				{
					m_iCount++;
					m_iLine++;
				}
			}
			else if(m_source[m_iCount+1]=='*')//多行注釋
			{
				m_iCount+=2;
				while(1)
				{
					if(m_iCount>=m_SourceLength)
					{
						m_curElement=E_FILEEND;
						return TRUE;
					}
					if(m_source[m_iCount]=='\r')
						m_iLine++;
					else if(m_source[m_iCount]=='*' && m_iCount+1<m_SourceLength &&
						m_source[m_iCount+1]=='/')
					{
						m_iCount+=2;
						break;
					}
					m_iCount++;
				}
			}
			else break;
		}
		else break;
	}
	switch(m_source[m_iCount])//此處處理運(yùn)算符
	{
		case '+':
			m_iCount++;
			m_curElement=E_PLUS;
			return TRUE;
		case '-':
			m_iCount++;
			m_curElement=E_MINUS;
			return TRUE;
		case '*':
			m_iCount++;
			m_curElement=E_TIMES;
			return TRUE;
		case '/':
			m_iCount++;
			m_curElement=E_SLASH;
			return TRUE;
		case '%':
			m_iCount++;
			m_curElement=E_MOD;
			return TRUE;
		case '(':
			m_iCount++;
			m_curElement=E_LPAREN;
			return TRUE;
		case ')':
			m_iCount++;
			m_curElement=E_RPAREN;
			return TRUE;
		case '[':
			m_iCount++;
			m_curElement=E_LSUB;
			return TRUE;
		case ']':
			m_iCount++;
			m_curElement=E_RSUB;
			return TRUE;
		case '{':
			m_iCount++;
			m_curElement=E_BEGIN;
			return TRUE;
		case '}':
			m_iCount++;
			m_curElement=E_END;
			return TRUE;
		case ',':
			m_iCount++;
			m_curElement=E_COMMA;
			return TRUE;
		case ':':
			m_iCount++;
			m_curElement=E_COLON;
			return TRUE;
		case ';':
			m_iCount++;
			m_curElement=E_SEMICOLON;
			return TRUE;
		case '!':
			if(m_iCount+1<m_SourceLength && m_source[m_iCount+1]=='=')
			{
				m_iCount+=2;
				m_curElement=E_NOTEQUAL;
			}
			else
			{
				m_iCount++;
				m_curElement=E_NOT;
			}
			return TRUE;
		case '>':
			if(m_iCount+1<m_SourceLength && m_source[m_iCount+1]=='=')
			{
				m_iCount+=2;
				m_curElement=E_GREATEQUAL;
			}
			else
			{
				m_iCount++;
				m_curElement=E_GREAT;
			}
			return TRUE;
		case '<':
			if(m_iCount+1<m_SourceLength && m_source[m_iCount+1]=='=')
			{
				m_iCount+=2;
				m_curElement=E_LESSEQUAL;
			}
			else
			{
				m_iCount++;
				m_curElement=E_LESS;
			}
			return TRUE;
		case '=':
			if(m_iCount+1<m_SourceLength && m_source[m_iCount+1]=='=')
			{
				m_iCount+=2;
				m_curElement=E_EQUAL;
			}
			else
			{
				m_iCount++;
				m_curElement=E_BECOMES;
			}
			return TRUE;
		case '&':
			if(m_iCount+1<m_SourceLength && m_source[m_iCount+1]=='&')
			{
				m_iCount+=2;
				m_curElement=E_AND;
				return TRUE;
			}
			else
			{
				ErrorReport(CFCErrorDlg::ET_UNKNOWNTOKEN);
				return FALSE;
			}
		case '|':
			if(m_iCount+1<m_SourceLength && m_source[m_iCount+1]=='|')
			{
				m_iCount+=2;
				m_curElement=E_OR;
				return TRUE;
			}
			else
			{
				ErrorReport(CFCErrorDlg::ET_UNKNOWNTOKEN);
				return FALSE;
			}
	}//end switch
	if(m_source[m_iCount]>='0' && m_source[m_iCount]<='9')//此處處理數(shù)
	{
		int d=0,l=0,n=0;
		do
		{
			n*=10;
			n+=m_source[m_iCount]-'0';
			m_iCount++;
		}
		while(m_iCount<m_SourceLength &&
			m_source[m_iCount]>='0' && m_source[m_iCount]<='9');
		if(m_iCount<m_SourceLength && m_source[m_iCount]=='.')//有小數(shù)點(diǎn)
		{
			m_iCount++;
			if(m_iCount<m_SourceLength &&
				m_source[m_iCount]>='0' && m_source[m_iCount]<='9')
			{	//實(shí)數(shù)
				m_dCurNumber=n;
				do
				{
					l++;
					m_dCurNumber+=(m_source[m_iCount]-'0')/pow(10,l);
					m_iCount++;
				}
				while(m_iCount<m_SourceLength &&
					m_source[m_iCount]>='0' && m_source[m_iCount]<='9');
				m_curElement=E_DNUMBER;
				return TRUE;
			}
		}
		//無小數(shù)點(diǎn)或小數(shù)點(diǎn)后沒有數(shù)字 -- 整數(shù)
		m_curElement=E_INUMBER;
		m_nCurNumber=n;
		return TRUE;
	}
	if((m_source[m_iCount]>='a' && m_source[m_iCount]<='z') ||//標(biāo)識(shí)符或者關(guān)鍵字
		(m_source[m_iCount]>='A' && m_source[m_iCount]<='Z') || 
		m_source[m_iCount]=='_' )
	{
		char str[IDENTLENGTH];
		int i=0;
		while(m_iCount<m_SourceLength &&	//此循環(huán)獲取連續(xù)的字母數(shù)字下劃線串
			((m_source[m_iCount]>='a' && m_source[m_iCount]<='z') ||
			(m_source[m_iCount]>='A' && m_source[m_iCount]<='Z') ||
			(m_source[m_iCount]>='0' && m_source[m_iCount]<='9') ||
			m_source[m_iCount]=='_' ) )
		{
			if(i==IDENTLENGTH-1)//標(biāo)識(shí)符過長(zhǎng)
			{
				if(ErrorReport(CFCErrorDlg::ET_LONGIDENT))
				{//返回TRUE,繼續(xù)編譯,跳過過長(zhǎng)的標(biāo)識(shí)符
					while(m_iCount<m_SourceLength &&
						((m_source[m_iCount]>='a' && m_source[m_iCount]<='z') ||
						(m_source[m_iCount]>='A' && m_source[m_iCount]<='Z') ||
						(m_source[m_iCount]>='0' && m_source[m_iCount]<='9')))
							m_iCount++;
					m_curElement=E_IDENT;
					str[IDENTLENGTH-1]='\0';
					strcpy(m_curIdent,str);
					return TRUE;
				}
				else return FALSE;
			}
			str[i]=m_source[m_iCount];
			i++;
			m_iCount++;
		}//while end
		str[i]='\0';
		strlwr(str);
		switch(str[0])//根據(jù)首字母判斷關(guān)鍵字
		{
		case 'b':
			if(strcmp("break",str)==0)
			{
				m_curElement=E_BREAK;
				return TRUE;
			}
			break;
		case 'c':
			if(strcmp("case",str)==0)
			{
				m_curElement=E_CASE;
				return TRUE;
			}
			if(strcmp("continue",str)==0)
			{
				m_curElement=E_CONTINUE;
				return TRUE;
			}
			break;
		case 'd':
			if(strcmp("default",str)==0)
			{
				m_curElement=E_DEFAULT;
				return TRUE;
			}
			if(strcmp("double",str)==0)
			{
				m_curElement=E_DOUBLE;
				return TRUE;
			}
			if(strcmp("do",str)==0)
			{
				m_curElement=E_DO;
				return TRUE;
			}
			break;
		case 'e':
			if(strcmp("else",str)==0)
			{
				m_curElement=E_ELSE;
				return TRUE;
			}
			if(strcmp("exit",str)==0)
			{
				m_curElement=E_EXIT;
				return TRUE;
			}
			break;
		case 'i':
			if(strcmp("if",str)==0)
			{
				m_curElement=E_IF;
				return TRUE;
			}
			if(strcmp("int",str)==0)
			{
				m_curElement=E_INT;
				return TRUE;
			}
			if(strcmp("input",str)==0)
			{
				m_curElement=E_INPUT;
				return TRUE;
			}
			break;
		case 'o':
			if(strcmp("output",str)==0)
			{
				m_curElement=E_OUTPUT;
				return TRUE;
			}
			break;
		case 'r':
			if(strcmp("return",str)==0)
			{
				m_curElement=E_RETURN;
				return TRUE;
			}
			break;
		case 's':
			if(strcmp("switch",str)==0)
			{
				m_curElement=E_SWITCH;
				return TRUE;
			}
		case 'v':
			if(strcmp("void",str)==0)
			{
				m_curElement=E_VOID;
				return TRUE;
			}
			break;
		case 'w':
			if(strcmp("while",str)==0)
			{
				m_curElement=E_WHILE;
				return TRUE;
			}
			break;
		}//switch end
		strcpy(m_curIdent,str);
		m_curElement=E_IDENT;
		return TRUE;
	}
	if(m_source[m_iCount]=='\"')//此處處理字符串
	{
		CString str="";
		BOOL bSys=FALSE;//轉(zhuǎn)義字符標(biāo)記
		for(m_iCount++;m_iCount<m_SourceLength;m_iCount++)
		{
			if(!bSys && m_source[m_iCount]=='\\')//轉(zhuǎn)義字符
				bSys=TRUE;
			else if(bSys)
			{
				switch(m_source[m_iCount])
				{
				case 'n'://回車符
					str+="\r\n";
					break;
				case 't':
					str+='\t';
					break;
				case '\"'://引號(hào)
					str+='\"';
					break;
				case '\\':
					str+='\\';
					break;
				case '\r'://多行字符串
					m_iCount++;
					m_iLine++;
					break;
				default:
					str+='\\';
					str+=m_source[m_iCount];
					break;
				}
				bSys=FALSE;
			}
			else if(m_source[m_iCount]=='\"')//字符串結(jié)束
			{
				m_iCount++;
				m_curElement=E_STRING;
				m_curString=str;
				return TRUE;
			}
			else if(m_source[m_iCount]=='\r')//換行,字符串意外結(jié)束
			{
				if(ErrorReport(CFCErrorDlg::ET_STRINGNOEND))
				{	//返回TRUE,繼續(xù)編譯,
					m_curElement=E_STRING;
					m_curString=str;
					return TRUE;
				}
				else return FALSE;
			}
			else str+=m_source[m_iCount];
		}//end for
		//若能運(yùn)行到此處,必有m_iCount==m_SourceLength,即到達(dá)源代碼尾而字符串沒結(jié)束
		if(ErrorReport(CFCErrorDlg::ET_STRINGNOEND))
		{	//返回TRUE,繼續(xù)編譯,
			m_curElement=E_STRING;
			m_curString=str;
			return TRUE;
		}
		else return FALSE;
	}
	//若能運(yùn)行到此處,即碰到無法認(rèn)識(shí)的字符
	ErrorReport(CFCErrorDlg::ET_UNKNOWNTOKEN);
	return FALSE;
}

int CFCDlg::SearchFunction(int n)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆精东视频| 国产精品久久久久久妇女6080 | 国产成人8x视频一区二区| 亚洲bt欧美bt精品| 夜夜精品视频一区二区| 亚洲精品免费在线观看| 亚洲美女淫视频| 中文字幕在线一区| 中文字幕亚洲一区二区av在线| 中文字幕久久午夜不卡| 国产午夜一区二区三区| 国产精品欧美一区二区三区| 中文字幕va一区二区三区| 国产精品久久久久一区| 最近日韩中文字幕| 亚洲综合色噜噜狠狠| 五月天视频一区| 麻豆成人免费电影| 国产精品911| 99综合电影在线视频| 色婷婷久久一区二区三区麻豆| 91视频91自| 欧美日韩亚洲高清一区二区| 91精品国产欧美一区二区成人| 日韩免费一区二区| 久久精品免费在线观看| 国产精品第一页第二页第三页| 一区二区三区电影在线播| 天天av天天翘天天综合网色鬼国产 | 国产亚洲精品免费| 日韩一区中文字幕| 亚洲bdsm女犯bdsm网站| 韩国v欧美v日本v亚洲v| caoporm超碰国产精品| 欧美在线看片a免费观看| 88在线观看91蜜桃国自产| 2020日本不卡一区二区视频| **性色生活片久久毛片| 日韩高清国产一区在线| 国产精品一区二区在线播放 | 欧美电视剧免费全集观看| 国产亚洲一区字幕| 亚洲猫色日本管| 蜜桃一区二区三区在线观看| 成人高清视频在线| 欧美日本一区二区三区四区| 久久亚洲影视婷婷| 亚洲一区二区三区视频在线| 狠狠色2019综合网| 欧美在线啊v一区| 欧美日本韩国一区二区三区视频| 午夜久久电影网| 欧美精品一区视频| 亚洲人成网站色在线观看| 日韩精品久久理论片| 夫妻av一区二区| 7777精品久久久大香线蕉| 国产精品美日韩| 日本怡春院一区二区| 91在线观看免费视频| 日韩视频在线你懂得| 亚洲图片欧美激情| 久久超碰97人人做人人爱| 一本久道久久综合中文字幕| 日韩一区二区高清| 一区二区三区四区不卡视频| 国内精品伊人久久久久av影院 | 26uuu欧美| 亚洲影视资源网| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 处破女av一区二区| 67194成人在线观看| 亚洲视频在线一区| 国产美女在线精品| 91麻豆精品国产自产在线| 亚洲色图一区二区| 国产一区二区不卡在线| 制服丝袜亚洲网站| 亚洲一区二区美女| 91亚洲永久精品| 欧美国产欧美综合| 久久99国产精品久久99果冻传媒| 欧美性生交片4| 欧美极品美女视频| 国产在线麻豆精品观看| 欧美一区二区三区免费大片| 一区二区视频免费在线观看| www.在线欧美| 国产拍欧美日韩视频二区| 精品午夜久久福利影院| 日韩精品在线看片z| 日本不卡免费在线视频| 欧美日韩国产高清一区二区| 亚洲国产成人tv| 日本高清成人免费播放| 国产精品成人免费精品自在线观看| 国产91露脸合集magnet| 久久免费电影网| 日产国产高清一区二区三区| 欧美日韩一区二区三区四区| 亚洲一区二区欧美| 精品视频免费在线| 五月天激情综合网| 欧美高清视频在线高清观看mv色露露十八| 亚洲精品福利视频网站| 色综合天天综合狠狠| 亚洲精品一二三四区| 91麻豆免费观看| 亚洲精品亚洲人成人网在线播放| 94-欧美-setu| 亚洲一区二区三区四区五区黄| 日本韩国精品在线| 丝袜国产日韩另类美女| 3751色影院一区二区三区| 婷婷久久综合九色综合绿巨人 | 在线成人小视频| 日日夜夜一区二区| 日韩一级大片在线观看| 极品少妇xxxx精品少妇偷拍| 久久影院午夜论| 成人动漫一区二区| 亚洲天堂av一区| 欧美亚洲一区二区在线| 欧美日韩电影一区| 欧美在线免费播放| 粉嫩高潮美女一区二区三区 | 婷婷国产v国产偷v亚洲高清| 91在线丨porny丨国产| 亚洲激情第一区| 欧美另类久久久品| 精品一区二区影视| 国产精品毛片久久久久久| 色妞www精品视频| 日韩精品久久理论片| 26uuu另类欧美| 色伊人久久综合中文字幕| 视频在线观看91| 久久久久88色偷偷免费| 色婷婷综合久久久| 日本 国产 欧美色综合| 国产婷婷色一区二区三区四区| 色综合网站在线| 秋霞国产午夜精品免费视频| 国产日韩精品久久久| 欧洲国产伦久久久久久久| 看片的网站亚洲| 国产精品对白交换视频 | 亚洲国产精品av| 欧美日韩一区在线| 国产美女主播视频一区| 亚洲一区视频在线观看视频| 精品美女一区二区三区| 91影视在线播放| 久久精品国产免费| 亚洲猫色日本管| 久久久久九九视频| 在线电影国产精品| 99久久久久久99| 久久精品国产澳门| 伊人色综合久久天天人手人婷| 精品国产免费一区二区三区四区| 91蝌蚪porny九色| 激情都市一区二区| 一区二区三区日韩精品视频| 久久精品夜夜夜夜久久| 欧美性大战久久久久久久蜜臀| 国产一区二区三区视频在线播放| 一级日本不卡的影视| 久久精品日产第一区二区三区高清版| 欧美日韩成人在线一区| 本田岬高潮一区二区三区| 久久国产精品色婷婷| 成人性生交大合| 日韩中文字幕av电影| 亚洲欧美色综合| 国产欧美日韩精品一区| 日韩免费视频一区| 欧美日韩国产片| 色老头久久综合| 波多野结衣一区二区三区| 国内成人免费视频| 琪琪一区二区三区| 亚洲福利一区二区三区| 亚洲欧美日韩国产手机在线| 国产欧美精品一区二区三区四区| 91精品国产入口| 在线电影国产精品| 欧美揉bbbbb揉bbbbb| 91在线云播放| 99久精品国产| 成人晚上爱看视频| 国产精品综合一区二区| 精品一区二区综合| 免费高清在线一区| 日韩不卡一区二区三区 | 91在线国产观看| 成人永久aaa| 国产成人免费视频网站 | 国产福利一区二区三区视频| 日韩av成人高清|