Lexer using struct

This commit is contained in:
SinusFox
2023-06-06 15:30:02 +02:00
parent a9baf4f223
commit 6827ad66c1
4 changed files with 59 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
#include "Lexer.h"
void init_Lexer(Lexer_t* lexptr, char* src_in){
lexptr->state = _START_;
lexptr->source_code = src_in;
lexptr->current_pos = &src_in;
}
void run_Lexer(Lexer_t* lexer) {
}
+31
View File
@@ -0,0 +1,31 @@
/* symbols */
#define _LETTER_ 1
#define _DIGIT_ 2
#define _OPERATOR_ 3
#define _PUNCTUATION_ 4
#define _END_OF_LINE_ 5
#define _UNKNOWN_ 10
/* state */
#define _START_ 100
#define _GET_NEXT_CHARACTER_ 110
#define _READ_IDENTIFIER_ 120
#define _READ_NUM_LIT_ 130
#define _READ_OPERATOR_ 140
#define _READ_PUNCTUATION_ 150
#define _STOP_ 999
#define _ERROR_ 1000
// lexer struct
struct Lexer_s {
int state;
char* source_code;
char** current_pos;
};
// typedef
typedef struct Lexer_s Lexer_t;
// methods
void init_Lexer(Lexer_t*, char*);
void run_Lexer(Lexer_t*);
+15
View File
@@ -0,0 +1,15 @@
#include <stdio.h>
#include "Lexer.h"
int main() {
// creating a variable of type Lexer_s
struct Lexer_s this_Lexer; // declaring this_Lexer, not initialization -> random values
// initializing the lexer with proper values
init_Lexer(&this_Lexer, "index = 2 * count + 42;");
// starting the lexer
run_Lexer(&this_Lexer);
return 0;
}