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

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

?? eval.cpp

?? building parser with C++ functions
?? CPP
字號:
/**
 * \file eval.cpp
 *
 * A dummy implementation for example purposes.  Just barely enough is
 * implemented to allow the parser to run.  Merely returns the input
 * expression without evaluating it.
 */

#include "eval.hpp"
#include "math.h"


/**
   * \brief Show different error message
   */
void errorfct(int i = 0)
{

	if (i == 1)
		cerr<< "ERROR: missing operand"<< endl;
	else if (i == 2)
		cerr<< "ERROR: missing operator"<< endl;
	else if (i == 3)
		cerr<< "ERROR: too many operands or too few operands"<< endl;
	else if (i == 4)
		cerr<< "ERROR: wrong type of operand"<< endl;
	else if (i == 5)
		cerr<< "ERROR: not an operator"<< endl;
	else cerr<< "ERROR"<< endl;
	exit(1);
}

/**
   * \brief Do evaluation for different operator
   */

Cell* eval(Cell* const c)
{
	int count = 0;

	// for empty list
	if (nullp(c))
		errorfct(2);

	// for input single operand, i.e 8
	if (!listp(c))
		return c;

	// for no function or no operator
	if (nullp(car(c)))
		errorfct(2);

	// for wrong operator
	if (!symbolp(car(c)))
		errorfct(5);

	// for operator "ceiling"
	if (get_symbol(car(c))=="ceiling")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))) || (!nullp(cdr(cdr(c)))))		//check error
			errorfct();

		Cell *operand = car(cdr(c));
		operand = eval(operand);
		return operand->cell_ceil();
	}


	// for operator "floor"
	if (get_symbol(car(c))=="floor")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))) || (!nullp(cdr(cdr(c)))))		//check error
			errorfct();

		Cell *operand = car(cdr(c));
		operand = eval(operand);
		return operand->cell_floor();
	}

	// for operator "if"
	if (get_symbol(car(c)) == "if")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))))		//check error
			errorfct();

		Cell *cur = cdr(c);
		Cell *operand = car(cdr(c));

		while (cur != NULL)		//check number of operands
		{
			count++;
			cur = cdr(cur);
		}
		if (count < 2 || count > 3)
			errorfct(3);

		operand = eval(operand);

		if ((nullp(operand)) || (!(operand->is_zero())))		// check if the first operand is zero
		{
			Cell *operand2 = car(cdr(cdr(c)));		// return the second operand
			operand2 = eval(operand2);
			return operand2;
		}
		else
		{
			if (count != 3)
				errorfct(3);
			else
			{
				Cell *operand3 = car(cdr(cdr(cdr(c))));		// return the third operand
				operand3 = eval(operand3);
				return operand3;
			}
		}
	}

	// for operator "+"
	if (get_symbol(car(c)) == "+")
	{
		if (nullp(cdr(c)))		// no operand
			return make_int(0);
		if (nullp(car(cdr(c))))		// check error
			errorfct(2);

		Cell *operand = car(cdr(c));
		Cell *cur = cdr(c);
		double result = 0.0;
		int checkint = 0;

		while (true)
		{
			operand = eval(operand);
			if (nullp(operand))
				errorfct(2);
			operand->cell_sum(checkint, result);

			if (cdr(cur) == NULL)
				break;

			cur = cdr(cur);
			operand = car(cur);
		}

		if (checkint != 0)		// return the result for different type
			return make_double(result);
		else return make_int(int(result));
	}

	// for operator "*"
	if (get_symbol(car(c)) == "*")
	{
		if (nullp(cdr(c)))		// no operand
			return make_int(1);
		if (nullp(car(cdr(c))))		// check error
			errorfct(2);

		Cell *operand = car(cdr(c));
		Cell *cur = cdr(c);
		double result = 1.0;
		int checkint = 0;

		while (true)
		{
			operand = eval(operand);
			if (nullp(operand))
				errorfct(2);
			operand->cell_times(checkint, result);

			if (cdr(cur) == NULL)
				break;

			cur = cdr(cur);
			operand = car(cur);
		}

		if (checkint != 0)		// return the result for different type
			return make_double(result);
		else return make_int(int(result));
	}

	// for operator "-"
	if (get_symbol(car(c)) == "-")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))))		// check error
 		{
			cerr<< "ERROR: zero argument"<< endl;
			exit(1);
		}

		Cell *operand = car(cdr(c));
		Cell *cur = cdr(c);
		double result = 0.0;
		int checkint = 0;

		if (!nullp(cdr(cdr(c))))		// put the first operand into result
		{
			operand = eval(operand);
			if (nullp(operand))
				errorfct(2);
			operand->cell_sum(checkint, result);
			cur = cdr(cur);
			operand = car(cur);
		}

		while (true)
		{
			operand = eval(operand);
			if (nullp(operand))
				errorfct(2);
			operand->cell_sub(checkint, result);

			if (cdr(cur) == NULL)
				break;

			cur = cdr(cur);
			operand = car(cur);
		}

		if (checkint != 0)		// return the result for different type
			return make_double(result);
		else return make_int(int(result));
	}

	// for operator "/"
	if (get_symbol(car(c)) == "/")
	{

		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))))		// check error
 		{
			cerr<< "ERROR: zero argument"<< endl;
			exit(1);
		}

		Cell *operand = car(cdr(c));
		Cell *cur = cdr(c);
		double result = 1.0;
		int checkint = 0;

		if (!nullp(cdr(cdr(c))))		// put the first operand into result
		{
			operand = eval(operand);
			if (nullp(operand))
				errorfct(2);
			operand->cell_times(checkint, result);
			cur = cdr(cur);
			operand = car(cur);
		}

		while (true)
		{
			operand = eval(operand);
			if (nullp(operand))
				errorfct(2);
			operand->cell_div(checkint, result);

			if (cdr(cur) == NULL)
				break;

			cur = cdr(cur);
			operand = car(cur);
		}

		if (checkint == 0)		// return the result for different type
			return make_int(int(result));
		else return make_double(result);
	}

	// for operator "quote"
	if (get_symbol(car(c)) == "quote")
	{
		if ((nullp(cdr(c))) || (!nullp(cdr(cdr(c)))))		// check error
			errorfct();
		return car(cdr(c));
	}

	// for operand "cons"
	if (get_symbol(car(c)) == "cons")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))) || (nullp(cdr(cdr(c)))) || (!nullp(cdr(cdr(cdr(c))))))		// check error
			errorfct();
		Cell *operand = car(cdr(c));
		Cell *operand2 = car(cdr(cdr(c)));
		if (!operand2->is_list())
			errorfct();
		return new ConsCell (eval(operand), eval(operand2));
	}

	// for operator "car"
	if (get_symbol(car(c)) == "car")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))) || (!nullp(cdr(cdr(c)))))		// check error
			errorfct();
		Cell *operand = car(cdr(c));
		return car(eval(operand));
	}

	// for operator "cdr"
	if (get_symbol(car(c)) == "cdr")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))) || (!nullp(cdr(cdr(c)))))		// check error
			errorfct();
		Cell *operand = car(cdr(c));
		return cdr(eval(operand));
	}

	// for operator "nullp"
	if (get_symbol(car(c)) == "nullp")
	{
		if ((nullp(cdr(c))) || (nullp(car(cdr(c)))) || (!nullp(cdr(cdr(c)))))		// check error
			errorfct();
		Cell *operand = car(cdr(c));
		operand = eval(operand);
		if (nullp(operand))		// check null
			return make_int(1);
		else
			return make_int(0);
	}
	errorfct(5);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区在线观看精品| 成人av在线网站| 欧美日韩高清在线| 日本不卡不码高清免费观看| 日韩无一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精品一线二线三线| 日本中文字幕一区| 国产三级一区二区| 欧美日韩视频在线第一区| 午夜视频一区在线观看| 精品国产一区a| 色综合色综合色综合| 天天色 色综合| 久久亚洲综合av| 成人一级片在线观看| 亚洲一区成人在线| 精品少妇一区二区三区日产乱码| 国产九色sp调教91| 一区二区不卡在线视频 午夜欧美不卡在| 色域天天综合网| 国内久久精品视频| 天堂久久久久va久久久久| 久久久精品黄色| 欧美电视剧在线观看完整版| 99久久精品国产一区二区三区 | 91啦中文在线观看| 另类欧美日韩国产在线| 有坂深雪av一区二区精品| 久久久av毛片精品| 日韩女优制服丝袜电影| av不卡在线播放| 国产大片一区二区| 韩国女主播成人在线| 首页国产丝袜综合| 亚洲国产精品天堂| 国产精品乱人伦| 亚洲国产精品av| 国产精品久久久久久久久图文区| 日韩欧美一区二区在线视频| 日本乱人伦aⅴ精品| 欧美怡红院视频| 欧美一区二区三区成人| 欧美一区二区三区视频在线观看| 欧美在线视频不卡| 日韩一区二区三区视频| 国产日韩精品一区二区三区在线| 麻豆国产欧美一区二区三区| 中文字幕中文在线不卡住| 久久蜜臀精品av| 在线观看视频欧美| 久久精品国产精品青草| 成人性色生活片免费看爆迷你毛片| 欧美日韩日日摸| 久久久久久久久岛国免费| 国产精品午夜在线观看| 一二三四社区欧美黄| 日韩国产欧美视频| 成人午夜精品在线| 91福利国产精品| 日韩一区二区在线免费观看| 欧美精品一区男女天堂| 亚洲日本丝袜连裤袜办公室| 午夜成人在线视频| 色爱区综合激月婷婷| 欧美日韩小视频| 久久久精品国产免费观看同学| 国产精品久久久久久久久快鸭| 日韩精品电影在线| 高清不卡一区二区| 欧美在线观看视频在线| 91麻豆精品国产91久久久更新时间 | 91网站最新网址| 日韩欧美精品在线视频| 亚洲三级视频在线观看| 国产一区视频导航| 91精品久久久久久久91蜜桃| 亚洲欧洲色图综合| 国产91在线观看| 久久免费精品国产久精品久久久久| 五月天激情综合网| 国产高清无密码一区二区三区| 91精品国产色综合久久久蜜香臀| 亚洲免费观看高清完整版在线 | 亚洲视频小说图片| 国产suv精品一区二区6| www国产成人免费观看视频 深夜成人网| 亚洲欧美欧美一区二区三区| 成人免费的视频| 国产欧美精品一区| 国产一区二区在线观看视频| 欧美一区二区三区公司| 日产国产高清一区二区三区| 7777精品伊人久久久大香线蕉 | 国产精品免费久久| 国产老妇另类xxxxx| 欧美成人一级视频| 国产酒店精品激情| 国产精品国产精品国产专区不片| 国产美女主播视频一区| 国产精品视频看| 91成人看片片| 亚洲一区二区三区四区在线| 777xxx欧美| 国产v日产∨综合v精品视频| 精品国产凹凸成av人导航| 国内精品久久久久影院色| 久久这里只有精品视频网| 国产成人免费av在线| 亚洲精品国产a久久久久久| 欧美日韩你懂得| 国产又粗又猛又爽又黄91精品| 久久久久高清精品| 在线精品视频一区二区三四| 石原莉奈在线亚洲二区| 久久久久久久久久看片| 不卡的电影网站| 日韩av一区二| 日韩美女啊v在线免费观看| 国产精品久久久久久久岛一牛影视| 精品视频全国免费看| 成人妖精视频yjsp地址| 亚洲国产日日夜夜| 国产精品久久99| 欧美精品一区二区蜜臀亚洲| 色婷婷av一区二区三区软件 | 国产精品亚洲专一区二区三区 | 久久成人精品无人区| 一区二区三区欧美亚洲| 久久久高清一区二区三区| 欧美日韩久久久久久| 99国产精品久久久久久久久久久 | 喷水一区二区三区| 日韩精品亚洲一区| 亚洲成人av电影在线| 亚洲免费在线观看视频| 久久久99久久| 精品va天堂亚洲国产| 日韩欧美国产综合| 欧美一区二区视频在线观看2022| 欧美三级在线视频| 欧美性一区二区| 91精品国产综合久久久蜜臀粉嫩| 欧美午夜一区二区三区免费大片| jvid福利写真一区二区三区| 成人免费毛片高清视频| 成人综合在线观看| 国产suv精品一区二区三区| 国产成人免费高清| 99久久久国产精品| 日本乱人伦一区| 日韩亚洲欧美综合| 国产亚洲成aⅴ人片在线观看| 国产精品色呦呦| 国产精品护士白丝一区av| 亚洲精品成人天堂一二三| 一区二区三区四区乱视频| 青青草视频一区| 国产经典欧美精品| 91啪在线观看| 欧美变态凌虐bdsm| 国产欧美日韩精品a在线观看| 一区二区三区四区激情| 久久99国产精品尤物| 成人理论电影网| 欧美一区二区三区成人| 日韩伦理免费电影| 久久成人免费网站| 色婷婷国产精品| 国产欧美日韩在线| 五月婷婷激情综合| 成人av免费在线| 日韩欧美在线123| 亚洲在线免费播放| 欧美视频在线播放| 日韩一区二区三区免费看 | 三级亚洲高清视频| 欧美中文字幕不卡| 自拍偷拍欧美精品| 成人午夜视频福利| 26uuu国产一区二区三区 | 综合欧美亚洲日本| 国产伦精品一区二区三区免费迷 | 国产日韩三级在线| 国产一区在线不卡| 日韩欧美亚洲国产精品字幕久久久| 亚洲欧美在线视频| 成年人网站91| 综合久久国产九一剧情麻豆| 不卡一区二区在线| 亚洲图片欧美激情| 盗摄精品av一区二区三区| 欧美韩国日本不卡| 91丨porny丨最新| 亚洲国产欧美另类丝袜| 欧美三级韩国三级日本三斤| 一片黄亚洲嫩模| 51午夜精品国产| 韩国毛片一区二区三区| 中文字幕欧美三区|