代码拉取完成,页面将自动刷新
#ifndef CALCULATOR_H_
#define CALCULATOR_H_
#include <assert.h>
#include <cstdint>
#include <cstdlib>
#include <exception>
#include <iomanip>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <string>
#define INFO 0
#define ERROR 1
#define PANIC 2
#define elog(level, format, ...) \
do { \
char buffer[1024]; \
snprintf(buffer, 1024, format " [%s:%d]\n", ##__VA_ARGS__, __FILE__, \
__LINE__); \
fprintf(stderr, buffer); \
if (level == ERROR) { \
throw std::runtime_error(buffer); \
} \
if (level == PANIC) { \
assert(0); \
} \
} while (0)
#define VALUE_INTEGER 'i'
#define VALUE_NUMBER 'n'
#define EXPR_VALUE 1
#define EXPR_NEGATE 2
#define EXPR_ADD 3
#define EXPR_SUB 4
#define EXPR_MUL 5
#define EXPR_DIV 6
#define EXPR_ABS 7
#define EXPR_MAX 8
typedef struct Value {
char value_type; /*VALUE_*/
union {
int64_t ingeger;
double number;
};
} Value;
#define IS_INTERGER(v) (v->value_type == VALUE_INTEGER)
typedef struct Expr {
char expr_type; /*EXPR_*/
Value* value;
Expr *left;
Expr *right;
} Expr;
double value_to_number(Value* v);
std::string value_to_string(const Value *value);
Value *make_integer(int64_t ingeger);
Value *make_number(double number);
Expr* make_value_expr(Value* v);
Expr* make_neate_expr(Expr* expr);
Expr* make_add_expr(Expr* left, Expr* right);
Expr* make_sub_expr(Expr* left, Expr* right);
Expr* make_mul_expr(Expr* left, Expr* right);
Expr* make_div_expr(Expr* left, Expr* right);
Expr* make_function_expr1(const char* func_name, Expr* arg);
Expr* make_function_expr2(const char* func_name, Expr* arg1, Expr* arg2);
Value *eval_expr(Expr *expr);
Value *my_calculator(const std::string& str);
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。