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

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

?? arithmeticslr1.cpp

?? 四則算術運算實現,采用的是SLR1文法包括號+,-,*,/,括號,
?? CPP
字號:
/*
 *	this program is to calculate the arithmetic expression using SLR1
 *
 */

#include <iostream>
#include <string>
#include <stack>
#include <assert.h>
#include <float.h>

using namespace std;

typedef double	VALUE;

const int NumV = 11;
const int NumVT = 8;
const int NumStates = 14;
const double ERRORNUM = DBL_MAX * -1;

struct genexp
{
	char s;
	int len;
};

struct genexp GenExps[7] = {	{ 'S', 1 }, // S'->E
				{ 'E', 3 }, // E->E+T|E-T
				{ 'E', 1 }, // E->T
				{ 'T', 3 }, // T->T*F|T/F
				{ 'T', 1 }, // T->F
				{ 'F', 3 }, // F->(E)
				{ 'F', 1 }, // F->i
};

enum Actions { ERR, NEXT, SUM, ACC };

//	procedure of calculating the arithmetic expression
VALUE parse( string exp );

// get action value
int action( int state, char sym );

// get goto value
int go( int state, char sym );

// get next symbol
char NextSymbol( string exp, string::iterator & it, VALUE & value );

//	map the charactor to index
unsigned char hash( unsigned char ch );

void main()
{
	string exp;
	const int BUFFER_SIZE = 100;
	char buffer[BUFFER_SIZE];
	VALUE result;

//	freopen( "input.txt", "r", stdin );

	while (1)
	{
		cout << "please input a arithmetic expression:" << endl;
		cin.getline( buffer, BUFFER_SIZE );
		if ( strlen( buffer ) == 0 )
		{
			break;
		}
		else
		{
			exp = buffer;
			if ( ( result = parse( exp ) ) != ERRORNUM )
				cout << "The value of the expression is: " << result << endl;
			else 
				cout << "Expression error!" << endl;
		}
	}
}

//	function of processing with any regualar arithmetic expression
VALUE parse( string exp )
{
	stack<int>	states;		// stack to save states of every step
	stack<char>	symbols;	// stack to save symbols of every step
	stack<VALUE>	data;		// stack to save datas in the expression
	
	exp = "#" + exp + "#";
	VALUE	data_elem = 0;

	string::iterator	it = exp.begin();
	symbols.push( *it );	// original symbol '#'
	it++;

	states.push( 0 );	// original state

	char sym;

	sym = NextSymbol( exp , it, data_elem );
	while ( 1 )	
	{
		if ( hash(sym) >= 0 )	
		{
			switch ( action( states.top(), sym ) )
			{
			case ERR:
				return ERRORNUM;
				break;
			case NEXT:
				symbols.push( sym );
				states.push( go( states.top(), sym ) );
				if ( sym == 'i' )
					data.push( data_elem );
				sym = NextSymbol( exp , it, data_elem );
				break;
			case SUM:
				if ( go( states.top(), sym ) < 0 )
				{
					return ERRORNUM;
				}
				else if (  GenExps[ go( states.top(), sym ) ].len == 1 )
				{
					symbols.top() = GenExps[ go( states.top(), sym ) ].s;
					states.pop();
					states.push( go( states.top(), symbols.top() ) );
				}	
				else
				{
					symbols.pop();
					char oper = symbols.top();
					symbols.pop();
					symbols.top()= GenExps[ go( states.top(), sym ) ].s;
					states.pop();
					states.pop();
					states.pop();
					states.push( go( states.top(), symbols.top() ) );	

					VALUE second = data.top();
					data.pop();
					switch ( oper )
					{
					case '+':
						data.top() += second;
						break;
					case '-':
						data.top() -= second;
						break;
					case '*':
						data.top() *= second;
						break;
					case '/':
						if ( ! second )
							return ERRORNUM;
						data.top() /= second;
						break;
					default:
						data.push( second );
					}
				}
				break;
			case ACC:
				return data.top();
				break;
			}
		}
		else // invalid character
		{
			return ERRORNUM;
		}

	}	
}

int action( int state, char sym )
{
	//	action table
	static	char action[NumStates][NumVT] = {
		/*	i	+	-	*	/	(	)	#	 */
		{	NEXT,	ERR,	ERR,	ERR,	ERR,	NEXT,	ERR,	ERR	}, //	0
		{	ERR,	NEXT,	NEXT,	ERR,	ERR,	ERR,	ERR,	ACC	}, //	1
		{	ERR,	SUM,	SUM,	NEXT,	NEXT,	ERR,	SUM,	SUM	}, //	2
		{	ERR,	SUM,	SUM,	SUM,	SUM,	ERR,	SUM,	SUM	}, //	3
		{	NEXT,	ERR,	ERR,	ERR,	ERR,	NEXT,	ERR,	ERR	}, //	4
		{	ERR,	SUM,	SUM,	SUM,	SUM,	ERR,	SUM,	SUM	}, //	5
		{	NEXT,	ERR,	ERR,	ERR,	ERR,	NEXT,	ERR,	ERR	}, //	6
		{	NEXT,	ERR,	ERR,	ERR,	ERR,	NEXT,	ERR,	ERR	}, //	7
		{	ERR,	NEXT,	NEXT,	ERR,	ERR,	ERR,	NEXT,	ERR	}, //	8
		{	ERR,	SUM,	SUM,	NEXT,	NEXT,	ERR,	SUM,	SUM	}, //	9
		{	ERR,	SUM,	SUM,	SUM,	SUM,	ERR,	SUM,	SUM	}, //	10
		{	ERR,	SUM,	SUM,	SUM,	SUM,	ERR,	SUM,	SUM	}, //	11
		{	NEXT,	ERR,	ERR,	ERR,	ERR,	NEXT,	ERR,	ERR	}, //	12
		{	NEXT,	ERR,	ERR,	ERR,	ERR,	NEXT,	ERR,	ERR	}, //	13
	};
	return action[state][ hash(sym) ];
}

int go( int state, char sym )
{
	//	goto table
	static	char go[NumStates][NumV] = {
		/*	i	+	-	*	/	(	)	#	E	T	F	 */
		{	5,	-1,	-1,	-1,	-1,	4,	-1,	-1,	1,	2,	3	}, //	0
		{	-1,	6,	12,	-1,	-1,	-1,	-1,	-1,	-1,	-1,	-1	}, //	1
		{	-1,	2,	2,	7,	13,	-1,	2,	2,	-1,	-1,	-1	}, //	2
		{	-1,	4,	4,	4,	4,	-1,	4,	4,	-1,	-1,	-1	}, //	3
		{	5,	-1,	-1,	-1,	-1,	4,	-1,	-1,	8,	2,	3	}, //	4
		{	-1,	6,	6,	6,	6,	-1,	6,	6,	-1,	-1,	-1	}, //	5
		{	5,	-1,	-1,	-1,	-1,	4,	-1,	-1,	-1,	9,	3	}, //	6
		{	5,	-1,	-1,	-1,	-1,	4,	-1,	-1,	-1,	-1,	10	}, //	7
		{	-1,	6,	12,	-1,	-1,	-1,	11,	-1,	-1,	-1,	-1	}, //	8
		{	-1,	1,	1,	7,	13,	-1,	1,	1,	-1,	-1,	-1	}, //	9
		{	-1,	3,	3,	3,	3,	-1,	3,	3,	-1,	-1,	-1	}, //	10
		{	-1,	5,	5,	5,	5,	-1,	5,	5,	-1,	-1,	-1	}, //	11
		{	5,	-1,	-1,	-1,	-1,	4,	-1,	-1,	-1,	9,	3	}, //	12
		{	5,	-1,	-1,	-1,	-1,	4,	-1,	-1,	-1,	-1,	10	}, //	13

	};
	return go[state][ hash(sym) ];
}

unsigned char hash( unsigned char ch )
{
	unsigned int x;
	switch ( ch )
	{
	case 'i':
		x = 0;
		break;
	case '+':
		x = 1;
		break;
	case '-':
		x = 2;
		break;
	case '*':
		x = 3;
		break;
	case '/':
		x = 4;
		break;
	case '(':
		x = 5;
		break;
	case ')':
		x = 6;
		break;
	case '#':
		x = 7;
		break;
	case 'E':
		x = 8;
		break;
	case 'T':
		x = 9;
		break;
	case 'F':
		x = 10;
		break;
	default:
		x = -1;
	}
	return x;
}

char NextSymbol( string exp, string::iterator & it, VALUE & value )
{
	VALUE tmp = 0;
	int todiv = 1;
	bool havepoint = 0;
	while ( it != exp.end() )
	{
		switch ( *it )
		{
		case '+':
		case '-':
		case '*':
		case '/':
		case '(':
		case ')':
		case '#':
			if ( tmp )
			{
				value = tmp / todiv;
				return 'i';
			}
			else
				return *it++;
		default:
			if ( *it >= '0' && *it <= '9' || *it == '.' )
			{
				if ( *it == '.' )
				{
					if ( havepoint )
						return 0;
					else
						havepoint = 1;
				}
				else
				{
					tmp = tmp * 10 + *it - '0';
					if ( havepoint )
						todiv *= 10;
				}
				it++;
			}
			else 
				return 0;
		}
	}
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜嗨av一区二区三区四季av| 一区二区三区日韩欧美| 色婷婷国产精品| 麻豆精品精品国产自在97香蕉| 国产精品久久夜| 日韩午夜中文字幕| 色欧美乱欧美15图片| 国产精品综合在线视频| 天堂久久久久va久久久久| 国产精品不卡在线| 精品久久久久久久久久久院品网 | 成人av电影观看| 日韩av中文字幕一区二区| 亚洲www啪成人一区二区麻豆| 久久蜜臀中文字幕| 欧美高清性hdvideosex| 色偷偷88欧美精品久久久| 国产精品1024| 激情成人综合网| 日韩电影一二三区| 午夜精品影院在线观看| 亚洲激情中文1区| 国产精品欧美极品| ww亚洲ww在线观看国产| 日韩一级高清毛片| 欧美中文字幕一区二区三区| 99久久伊人网影院| 顶级嫩模精品视频在线看| 激情欧美一区二区| 婷婷中文字幕综合| 亚洲成av人片在线观看无码| 亚洲图片欧美色图| 亚洲综合另类小说| 亚洲精品久久久蜜桃| 亚洲丝袜精品丝袜在线| 亚洲欧洲精品一区二区三区| 国产午夜精品久久久久久免费视| 亚洲精品一区二区精华| www国产成人| 国产亚洲婷婷免费| 国产免费成人在线视频| 国产精品天干天干在观线| 国产嫩草影院久久久久| 国产精品久久久久久久第一福利| 国产精品美女久久久久高潮| 国产精品视频一二三区| 日韩一区有码在线| 亚洲毛片av在线| 亚洲午夜久久久久久久久电影网| 亚洲成a人片在线不卡一二三区| 亚洲bt欧美bt精品| 日韩黄色在线观看| 老司机一区二区| 国产成人精品1024| av男人天堂一区| 在线欧美日韩精品| 日韩一区二区三| 久久久不卡网国产精品一区| 国产精品免费视频网站| 亚洲一区二区三区四区五区黄 | 国产精品自在在线| 99国产精品99久久久久久| 色婷婷av一区| 欧美一级淫片007| 久久免费的精品国产v∧| 亚洲欧洲精品天堂一级| 亚洲综合999| 久久99久久99小草精品免视看| 国产一区二区三区黄视频| 99久久99久久精品免费观看| 欧美色图12p| 久久先锋影音av| 一区二区三区小说| 精品影视av免费| 成人av高清在线| 91精品国产综合久久蜜臀| 国产偷国产偷精品高清尤物| 亚洲婷婷综合久久一本伊一区| 黄色成人免费在线| 91麻豆swag| 26uuu国产电影一区二区| 综合在线观看色| 日韩国产欧美三级| 91在线小视频| 日韩精品中文字幕在线一区| 亚洲色图.com| 精品无人区卡一卡二卡三乱码免费卡| 99re热这里只有精品视频| 制服丝袜在线91| 国产精品久久久久久久久免费桃花| 丝袜脚交一区二区| 菠萝蜜视频在线观看一区| 欧美一区二区三区四区五区| 亚洲欧洲日韩综合一区二区| 久久精品免费观看| 欧美性大战xxxxx久久久| 国产午夜精品福利| 日韩电影一区二区三区四区| 91美女在线视频| 亚洲精品在线电影| 日韩成人一区二区| 91同城在线观看| 国产欧美一区视频| 久久精品久久精品| 欧美色图一区二区三区| 国产精品第五页| 国产成人午夜视频| 日韩一二三区不卡| 亚洲成人av在线电影| 色呦呦日韩精品| 中文字幕精品一区| 国产精品一区二区在线观看网站 | 欧美日本不卡视频| 一区二区三区中文免费| 成人av综合一区| 国产欧美精品一区二区三区四区| 久久91精品久久久久久秒播| 欧美蜜桃一区二区三区| 一区二区高清在线| 日本高清不卡视频| 国产精品久久久久久久久久久免费看| 国产美女在线观看一区| 精品国产欧美一区二区| 免费观看成人av| 7777精品伊人久久久大香线蕉经典版下载 | 欧美中文字幕不卡| 亚洲男人电影天堂| 97精品国产97久久久久久久久久久久 | 精品一区二区国语对白| 日韩一级视频免费观看在线| 水野朝阳av一区二区三区| 欧美日韩不卡一区| 偷偷要91色婷婷| 91精品在线免费观看| 天天色综合成人网| 在线观看网站黄不卡| 一区二区三区**美女毛片| 在线亚洲高清视频| 亚洲午夜激情网页| 欧美美女网站色| 青娱乐精品在线视频| 欧美mv日韩mv| 国产精品亚洲视频| 国产精品久久久久久久午夜片| 不卡一区二区中文字幕| 亚洲啪啪综合av一区二区三区| 91婷婷韩国欧美一区二区| 亚洲国产综合在线| 91精品国产综合久久小美女| 九九视频精品免费| 国产日韩欧美制服另类| 在线一区二区三区做爰视频网站| 玉米视频成人免费看| 欧美日本在线看| 久久精品国产成人一区二区三区 | 久久美女艺术照精彩视频福利播放| 国产一区二区在线观看免费| 欧美精彩视频一区二区三区| av午夜精品一区二区三区| 亚洲影院久久精品| 56国语精品自产拍在线观看| 免费欧美日韩国产三级电影| 精品999久久久| 99久久婷婷国产精品综合| 亚洲激情av在线| 日韩欧美中文字幕公布| 日韩理论片一区二区| 青青草原综合久久大伊人精品| 欧美亚洲一区二区在线| 日本一不卡视频| 久久久久88色偷偷免费| 色婷婷av一区二区三区gif| 丝袜美腿成人在线| 久久久久久久综合日本| 色8久久人人97超碰香蕉987| 偷拍与自拍一区| 日本一区二区三区免费乱视频| 在线视频中文字幕一区二区| 久久国产综合精品| 亚洲欧美另类久久久精品| 日韩限制级电影在线观看| 不卡一区在线观看| 日韩高清在线观看| 国产精品国产三级国产三级人妇 | 欧美aⅴ一区二区三区视频| 国产婷婷色一区二区三区| 欧美日韩免费在线视频| 高清beeg欧美| 日韩电影在线免费观看| 欧美国产激情一区二区三区蜜月| 欧美成人a视频| 中文字幕一区二区5566日韩| 91精品国产乱码久久蜜臀| 99视频热这里只有精品免费| 奇米一区二区三区| 有坂深雪av一区二区精品| 国产婷婷色一区二区三区在线| 欧美三级三级三级爽爽爽| 成人性生交大片| 久久电影网电视剧免费观看|