Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int main(int argc, char **argv) {
- if (argc != 3) {
- return ERROR_PARAMETER_INVALID;
- }
- try {
- std::string element;
- std::stack<LN> numbers;
- std::ifstream in(argv[1]);
- std::ofstream out(argv[2]);
- if (in.bad() || in.fail() || out.bad() || out.fail()) {
- return ERROR_CANNOT_OPEN_FILE;
- }
- while (in >> element) {
- if (element == "+") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 + n2; });
- } else if (element == "-") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 - n2; });
- } else if (element == "/") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 / n2; });
- } else if (element == "*") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 * n2; });
- } else if (element == "%") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 % n2; });
- } else if (element == "!=") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 != n2; });
- } else if (element == "==") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 == n2; });
- } else if (element == ">=") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 >= n2; });
- } else if (element == "<=") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 <= n2; });
- } else if (element == "<") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 < n2; });
- } else if (element == ">") {
- ExecuteBinary(numbers,
- [](const auto &n1, const auto &n2) { return n1 > n2; });
- } else if (element == "_") {
- ExecuteUnary(numbers, [](const auto &n) { return -n; });
- } else if (element == "~") {
- ExecuteUnary(numbers, [](const auto &n) { return ~n; });
- } else {
- numbers.emplace(element);
- if (numbers.top().IsNaN()) {
- return ERROR_DATA_INVALID;
- }
- }
- }
- while (!numbers.empty()) {
- out << numbers.top().ToString() << std::endl;
- numbers.pop();
- }
- } catch (const std::bad_alloc &) {
- return ERROR_OUT_OF_MEMORY;
- } catch (const std::domain_error &) {
- return ERROR_DATA_INVALID;
- } catch (...) {
- return ERROR_UNKNOWN;
- }
- return SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement