filename update

This commit is contained in:
2025-07-20 22:24:25 +03:00
parent ea8e458b71
commit f1fb8610cd
3 changed files with 114 additions and 6 deletions

109
lexer.c Normal file
View File

@@ -0,0 +1,109 @@
#include <ctype.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
typedef struct{
char* mstr;
} mstring;
typedef struct{
int mint;
} mint;
typedef struct{
float myfloat;
} mfloat;
typedef enum{
TOKEN_PLUS,
TOKEN_MINUS,
TOKEN_INTEGER,
intdef,
TOKEN_UNKNOWN,
} symbols;
typedef struct{
symbols type;
char* text;
size_t text_len;
} Token;
typedef struct{
char *content;
// size_t cursor;
// size_t line;
} Lexer;
// Lexer
void lexer_new(char *content, size_t content_len){
}
// Token
void lexer_next(Lexer *mylexer){
}
Token read_from_tok(char* text, uint cursor){
Token mytoks;
static char buf[64];
size_t i = 0;
if (isdigit(text[cursor])) {
// Start of an integer token
size_t start = cursor;
while (isdigit(text[cursor])) {
buf[i++] = text[cursor++];
}
buf[i] = '\0';
mytoks.type = TOKEN_INTEGER;
mytoks.text = buf;
mytoks.text_len = i;
}else {
buf[0] = text[cursor];
buf[1] = '\0';
mytoks.text = buf;
switch (text[cursor]){
case '+':
mytoks.type = TOKEN_PLUS;
// asigning text is not really needed unless for debug
mytoks.text = "+";
break;
case '-':
mytoks.type = TOKEN_MINUS;
mytoks.text = "-";
break;
default:
mytoks.type = TOKEN_UNKNOWN;
}
}
return mytoks;
}
// Token* c
// operators accepted in int/digit or whatever type def only when they have a digit before AND after them
int main(){
Token newtok;
char* input = "32323 + 232";
int length1 = strlen(input);
int i = 0;
while (i < length1) {
Token result = read_from_tok(input, i);
printf("text: %s\ntype: %u\n\n", result.text, result.type);
if (result.type == TOKEN_INTEGER) {
i += result.text_len; // to skip the whole integer
} else {
i++;
}
}
}

5
main.c
View File

@@ -53,8 +53,7 @@ Token read_from_tok(char* text, uint cursor){
Token mytoks; Token mytoks;
static char buf[64]; static char buf[64];
size_t i = 0; size_t i = 0;
if (isdigit(text[cursor])) { if (isdigit(text[cursor])) {
// Start of an integer token
size_t start = cursor; size_t start = cursor;
while (isdigit(text[cursor])) { while (isdigit(text[cursor])) {
buf[i++] = text[cursor++]; buf[i++] = text[cursor++];
@@ -86,7 +85,7 @@ Token read_from_tok(char* text, uint cursor){
} }
// Token* c

6
nob.c
View File

@@ -5,8 +5,8 @@ int main(void){
nb_append(&cmd, "gcc"); nb_append(&cmd, "gcc");
nb_append(&cmd, "-Wall -Wextra"); nb_append(&cmd, "-Wall -Wextra");
nb_append(&cmd, "main.c"); nb_append(&cmd, "lexer.c");
nb_append(&cmd, "-o newl"); nb_append(&cmd, "-o lex");
nb_print_info(&cmd); nb_print_info(&cmd);
@@ -14,7 +14,7 @@ int main(void){
nb_free(&cmd); nb_free(&cmd);
nb_append(&cmd, "./newl"); nb_append(&cmd, "./lex");
nb_print_info(&cmd); nb_print_info(&cmd);