Mon 16 Mar 11:09:06 CET 2026

This commit is contained in:
sbosse 2026-03-16 11:10:20 +01:00
parent 0904e0af50
commit 2f8328ecf6

51
src/lexer.h Normal file
View File

@ -0,0 +1,51 @@
#ifndef _LEXER_H
#define _LEXER_H
#include "types.h"
/*
Code parser state
*/
typedef enum {
PSTART,
PEXPR,
PARGS,
PINSTR
} ps_t;
/*
Lexer (and parser) structure
*/
typedef struct {
char * input;
char * last; // input before NextToken
char * next;
index_t line; // line number
token_t token;
number_t x;
index_t ix;
token_t type;
char name[MAXNAMELEN+1];
char *arg;
index_t arglen;
ps_t ps;
int argN;
token_t lasttoken;
token_t uptoken; // which token, e.g. CCALL, calls compileexpr
#if HAS_FUNC > 0
char fun[MAXNAMELEN+1]; // function name
index_t fp[2]; // for local variables stored on the stack
index_t level; // scope nesting level, basically we have only 0 (top-level) and 1 (function)
#endif
#if PROFILE>0
index_t ntoken;
#endif
} lexer_t;
void LookAheadToken(lexer_t *lex);
void SkipToken (lexer_t *lex);
void NextToken (lexer_t *lex);
void LexerInit(lexer_t *L);
void LexerSetup(lexer_t *lex, char * input);
#endif