Compare commits

..

2 Commits

Author SHA1 Message Date
wash 8b0295faf2 bshell: add line-editor and file-based input support 2026-05-07 10:52:00 +01:00
wash 3c15bb1609 meta: add vim plugin for syntax highlighting 2026-05-07 10:51:04 +01:00
4 changed files with 0 additions and 178 deletions
-61
View File
@@ -1,61 +0,0 @@
#include "lex.h"
#include "token.h"
#define LEX_TOKEN_DEF(i, n) {.id = (i), .name = (n)}
static struct lex_token_def keywords[] = {
LEX_TOKEN_DEF(KW_FUNC, "func"),
};
static const size_t nr_keywords = sizeof keywords / sizeof keywords[0];
static struct lex_token_def symbols[] = {
LEX_TOKEN_DEF(SYM_SQUOTE, "'"),
LEX_TOKEN_DEF(SYM_DQUOTE, "\""),
LEX_TOKEN_DEF(SYM_LEFT_BRACE, "{"),
LEX_TOKEN_DEF(SYM_RIGHT_BRACE, "}"),
LEX_TOKEN_DEF(SYM_LEFT_BRACKET, "["),
LEX_TOKEN_DEF(SYM_RIGHT_BRACKET, "]"),
LEX_TOKEN_DEF(SYM_LEFT_PAREN, "("),
LEX_TOKEN_DEF(SYM_RIGHT_PAREN, ")"),
};
static const size_t nr_symbols = sizeof symbols / sizeof symbols[0];
enum bshell_status lex_ctx_init(struct lex_ctx *ctx, struct line_source *src)
{
memset(ctx, 0x0, sizeof *ctx);
ctx->lex_status = BSHELL_SUCCESS;
ctx->lex_src = src;
return BSHELL_SUCCESS;
}
enum bshell_status lex_ctx_cleanup(struct lex_ctx *ctx)
{
return BSHELL_SUCCESS;
}
static struct lex_token *dequeue_token(struct lex_ctx *ctx)
{
fx_queue_entry *entry = fx_queue_first(&ctx->lex_tokens);
return fx_unbox(struct lex_token, entry, tok_entry);
}
static enum bshell_status pump_tokens(struct lex_ctx *ctx)
{
return BSHELL_SUCCESS;
}
struct lex_token *lex_ctx_peek(struct lex_ctx *ctx)
{
return NULL;
}
void lex_ctx_advance(struct lex_ctx *ctx)
{
struct lex_token *tok = dequeue_token(ctx);
if (tok) {
lex_token_destroy(tok);
}
}
-31
View File
@@ -1,31 +0,0 @@
#ifndef LEX_H_
#define LEX_H_
#include "status.h"
#include <fx/queue.h>
struct lex_token;
struct line_source;
struct lex_token_def {
int id;
const char *name;
uint64_t name_hash;
};
struct lex_ctx {
fx_queue lex_tokens;
struct line_source *lex_src;
enum bshell_status lex_status;
};
extern enum bshell_status lex_ctx_init(
struct lex_ctx *ctx,
struct line_source *src);
extern enum bshell_status lex_ctx_cleanup(struct lex_ctx *ctx);
extern struct lex_token *lex_ctx_peek(struct lex_ctx *ctx);
extern void lex_ctx_advance(struct lex_ctx *ctx);
#endif
View File
-86
View File
@@ -1,86 +0,0 @@
#ifndef IVY_LANG_LEX_H_
#define IVY_LANG_LEX_H_
#include <fx/queue.h>
#include <stdbool.h>
struct char_cell {
unsigned long c_row, c_col;
};
enum token_type {
TOK_NONE = 0,
__TOK_INDEX_BASE = 100,
TOK_KEYWORD,
TOK_SYMBOL,
TOK_INT,
TOK_DOUBLE,
TOK_WORD,
TOK_ARG,
TOK_STRING,
TOK_STR_START,
TOK_STR_END,
TOK_LINEFEED,
__TOK_INDEX_LIMIT,
};
enum token_keyword {
KW_NONE = 0,
__KW_INDEX_BASE = 200,
KW_FUNC,
__KW_INDEX_LIMIT,
};
enum token_symbol {
SYM_NONE = 0,
__SYM_INDEX_BASE = 300,
SYM_SQUOTE,
SYM_DQUOTE,
SYM_LEFT_BRACE,
SYM_RIGHT_BRACE,
SYM_LEFT_BRACKET,
SYM_RIGHT_BRACKET,
SYM_LEFT_PAREN,
SYM_RIGHT_PAREN,
__SYM_INDEX_LIMIT,
};
struct lex_token {
enum token_type tok_type;
struct char_cell tok_start, tok_end;
fx_queue_entry tok_entry;
union {
enum token_keyword tok_keyword;
enum token_symbol tok_symbol;
long long tok_int;
double tok_double;
char *tok_str;
};
};
extern struct lex_token *lex_token_create_discard(void);
extern struct lex_token *lex_token_create_ident(const char *s);
extern void lex_token_destroy(struct lex_token *tok);
static inline bool lex_token_is_symbol(
struct lex_token *tok,
enum token_symbol sym)
{
return (tok->tok_type == TOK_SYMBOL && tok->tok_symbol == sym);
}
static inline bool lex_token_is_keyword(
struct lex_token *tok,
enum token_keyword kw)
{
return (tok->tok_type == TOK_KEYWORD && tok->tok_keyword == kw);
}
extern const char *lex_token_to_string(const struct lex_token *tok);
extern const char *bshell_lex_token_type_to_string(enum token_type type);
extern const char *token_keyword_to_string(enum token_keyword keyword);
extern const char *token_symbol_to_string(enum token_symbol sym);
#endif