Files
gw-basic-2026/include/eval.h
Eremey Valetov d8e8375366 Phase 1: expression calculator with direct mode
GW-BASIC reimplementation in C11, using Microsoft's open-sourced 8088
assembly as the authoritative reference.

Tokenizer (CRUNCH/LIST), expression evaluator with operator precedence,
all math functions (SIN, COS, TAN, ATN, SQR, LOG, EXP, RND, etc.),
string functions (LEFT$, RIGHT$, MID$, CHR$, ASC, VAL, STR$, etc.),
PRINT statement with comma/semicolon zones, TAB(), SPC().

Handles integer/single/double types with correct promotion, D exponent
for double-precision literals, type suffixes (%, !, #), &H hex/&O octal
literals, MBF conversion routines, and GW-BASIC-compatible number
formatting.

Platform-independent via HAL vtable; POSIX backend included.
2026-02-10 10:25:08 -05:00

22 lines
625 B
C

#ifndef GW_EVAL_H
#define GW_EVAL_H
#include "types.h"
/* Expression evaluator - recursive descent with precedence climbing */
gw_value_t gw_eval(void); /* evaluate any expression */
gw_value_t gw_eval_num(void); /* evaluate, require numeric */
gw_value_t gw_eval_str(void); /* evaluate, require string */
int16_t gw_eval_int(void); /* evaluate, require integer result */
uint16_t gw_eval_uint16(void);
/* Force type conversions */
int16_t gw_to_int(gw_value_t *v);
float gw_to_sng(gw_value_t *v);
double gw_to_dbl(gw_value_t *v);
/* Check for closing paren */
void gw_expect_rparen(void);
#endif