view Bison-Flex/CALC/Bison-Flex/EUC/#calc-driver.cpp# @ 0:db40c85cad7a default tip

upload sample source
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Mon, 09 May 2011 03:11:59 +0900
parents
children
line wrap: on
line source

#include <iostream>
#include <iomanip>
#include "calc-driver.h"
#include "calc-parser.hh"

// ’₯³’₯σ’₯Ή’₯Θ’₯ι’₯―’₯Ώ

calc_driver::calc_driver()
{
}

// ’₯Η’₯Ή’₯Θ’₯ι’₯―’₯Ώ

calc_driver::~calc_driver()
{
}

// ’·Χ’»»

bool calc_driver::calc(const std::string &f)
{
	file = f;
	scan_begin();								// ’₯Ή’₯­’₯γ’₯Κ’‘Ό’½ι’΄ό’²½
	yy::calc_parser parser(*this);				// ’₯Ρ’‘Ό’₯΅’‘Ό’Ή½’ΓΫ
	int result = parser.parse();				// ’Ή½’ΚΈ’²ς’ΐΟ
	scan_end();									// ’₯Ή’₯­’₯γ’₯Κ’‘Ό’½ͺ’Ξ»

	if (result != 0)
		return false;							// ’₯Ρ’‘Ό’₯΅’‘Ό’₯¨’₯ι’‘Ό
	return true;
}

// ’₯¨’₯ι’‘Ό’₯α’₯Γ’₯»’‘Ό’₯Έ’€ς’½Π’ΞΟ

void calc_driver::error(const std::string& m)
{
	std::cerr << m << std::endl;
}

// ’Βε’Ζώ’½θ’Νύ

void calc_driver::assign(const std::string *value, cnode *node)
{
	values[*value] = node->expr(this);
	delete value;		// ’Έε’»Ο’Λφ’€Ο’Ό«’Κ¬’€Η’ΉΤ’€¦
	delete node;
}

void calc_driver::print(cnode *node)
{
	std::cout << node->expr(this) << std::endl;
	delete node;
}

struct list_action {
	void operator()(const std::pair<std::string, int> &it)
	{
		std::cout << it.first << " = " << it.second << std::endl;
	}
} ;

void calc_driver::list()
{
	std::for_each(values.begin(), values.end(), list_action());
}