6#include "../../include/rdesc.h"
7#include "../../src/detail.h"
9#include "../grammar/bc.h"
15#ifndef BC_INTERPRETER_H
16#define BC_INTERPRETER_H
20static inline double bc_pow10(
int i)
31static inline double bc_interpreter(
struct rdesc_node *n)
40 return strtod(c[0]->
n.tk.seminfo, NULL);
42 return strtod(c[1]->
n.tk.seminfo, NULL) /\
43 bc_pow10(strlen(c[1]->
n.tk.seminfo));
45 return strtod(c[0]->
n.tk.seminfo, NULL) + \
46 strtod(c[2]->
n.tk.seminfo, NULL) / \
47 bc_pow10(strlen(c[2]->
n.tk.seminfo));
51 return (v == 0) ? -1 : 1;
54 return bc_interpreter(c[0]) * bc_interpreter(c[1]);
57 return bc_interpreter(c[0]) + bc_interpreter(c[1]);
62 return bc_interpreter(c[1]);
64 return -bc_interpreter(c[1]);
70 return bc_interpreter(c[0]) * bc_interpreter(c[1]);
75 return bc_interpreter(c[1]);
77 return 1 / bc_interpreter(c[1]);
85 return bc_interpreter(c[0]);
87 return bc_interpreter(c[1]);
91 return bc_interpreter(c[0]);
#define r(...)
Macro to define a grammar rule. Adds end-of-body and construct sentinels to grammar rules.
Definition: bnf_dsl.h:72
A node in the CST.
Definition: rdesc.h:68
struct rdesc_nonterminal nt
Definition: rdesc.h:74
struct rdesc_token tk
Definition: rdesc.h:73
uint16_t variant
The production rule variant being parsed.
Definition: rdesc.h:62
terminal (token) object for context-free grammar
Definition: rdesc.h:43
void * seminfo
Definition: rdesc.h:47