Lexer using struct
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
/* This program is not finished! */
|
||||
|
||||
#include <stdio.h>
|
||||
#include "Lexer.h"
|
||||
#include "Lexer.c"
|
||||
|
||||
@@ -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) {
|
||||
|
||||
}
|
||||
@@ -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*);
|
||||
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user