diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/parser.h | 31 | ||||
-rw-r--r-- | include/serial.h | 2 | ||||
-rw-r--r-- | include/variable.h | 24 |
3 files changed, 57 insertions, 0 deletions
diff --git a/include/parser.h b/include/parser.h new file mode 100644 index 0000000..c6a2b17 --- /dev/null +++ b/include/parser.h @@ -0,0 +1,31 @@ +#ifndef PARSER_H_ +#define PARSER_H_ + +#include <variable.h> + +typedef void *stack_t; + +typedef struct { + uint16_t status; + uint16_t vcount; + variable *vars; + char **names; + stack_t *stack; +} interpreter; + +enum status { + READY = 0 +}; + +typedef void (*func_t)(stack_t *); + +void interpreter_init(interpreter *); + +void interpreter_define_value(interpreter *, const char *, int32_t); +void interpreter_define_cfunc(interpreter *, const char *, func_t); + +int32_t interpreter_get_value(interpreter *, const char *); + +int interpreter_doline(interpreter *, const char *); + +#endif // PARSER_H_ diff --git a/include/serial.h b/include/serial.h index 5b90748..97b02d7 100644 --- a/include/serial.h +++ b/include/serial.h @@ -3,6 +3,8 @@ void serial_init(void); void serial_put(int c); + char serial_get(void); +void serial_gets(char *buf); #endif // SERIAL_H_ diff --git a/include/variable.h b/include/variable.h new file mode 100644 index 0000000..fd84a6e --- /dev/null +++ b/include/variable.h @@ -0,0 +1,24 @@ +#ifndef TOKEN_H_ +#define TOKEN_H_ + +#include <stdint.h> + +typedef struct { + uint16_t nameidx; + uint8_t type; + uint8_t info; + uint32_t value; +} variable; + +#define INFO_ARGS(x) ((x) & 0x07) +#define INFO_RET (1 << 3) + +enum vartype { + VALUE = 0, + VARIABLE, + OPERATOR, + FUNCTION, + CFUNCTION +}; + +#endif // TOKEN_H_ |