aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorc+12023-05-03 10:23:35 -0400
committerc+12023-05-03 10:23:35 -0400
commit9d981a2597dca067572ee16d1a3f6e99f9c6ddd6 (patch)
tree37de867b64491259e2b1dd33330bc234fd0b6eb1
parent191c063e6c7332a8558835ce0d4710c3f8ba7de8 (diff)
in which i learn how c structs work
-rw-r--r--examples/hello.halk3
-rw-r--r--src/.DS_Storebin0 -> 6148 bytes
-rw-r--r--src/include/lexer.h20
-rw-r--r--src/include/main.h0
-rw-r--r--src/lexer.c52
5 files changed, 74 insertions, 1 deletions
diff --git a/examples/hello.halk b/examples/hello.halk
index f36db0a..da10494 100644
--- a/examples/hello.halk
+++ b/examples/hello.halk
@@ -1,4 +1,5 @@
-USE.io;
+USE."io";
message="Hello, World!";
+
io~o.message;
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..3246446
--- /dev/null
+++ b/src/.DS_Store
Binary files differ
diff --git a/src/include/lexer.h b/src/include/lexer.h
index e69de29..a20bf8c 100644
--- a/src/include/lexer.h
+++ b/src/include/lexer.h
@@ -0,0 +1,20 @@
+#ifndef LEXER_H
+#define LEXER_H
+#include "token.h"
+
+typedef struct LEXER_STRUC {
+ char c; // current character in content
+ unsigned int i; // index of c
+ char* content; // the code itself
+} lexer_T;
+
+lexer_T* lexer_init(char* content);
+void lexer_next(lexer_T* lexer);
+void lexer_pass(lexer_T* lexer);
+token_T* lexer_get_next_token(lexer_T* lexer);
+token_T* lexer_get_string(lexer_T* lexer);
+token_T* lexer_get_id(lexer_T* lexer);
+token_T* lexer_next_token(lexer_T* lexer, token_T* token);
+char* lexer_get_c_as_string(lexer_T* lexer);
+
+#endif
diff --git a/src/include/main.h b/src/include/main.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/include/main.h
diff --git a/src/lexer.c b/src/lexer.c
new file mode 100644
index 0000000..692a9c9
--- /dev/null
+++ b/src/lexer.c
@@ -0,0 +1,52 @@
+#include "include/lexer.h"
+#include <stdlib.h>
+#include <string.h>
+
+lexer_T* lexer_init(char* content) {
+ lexer_T* lexer = calloc(1, sizeof(struct LEXER_STRUC));
+
+ lexer->content = content;
+ lexer->i = 0;
+ lexer->c = content[lexer->i];
+
+ return lexer;
+}
+
+void lexer_next(lexer_T* lexer) {
+ // if not at end of line or file
+ if (lexer->c != '\0' && lexer->i < strlen(lexer->content)) {
+ lexer->i += 1; // advance index 1 character
+ lexer->c = lexer->content[lexer->i]; // set character w/ index
+ }
+}
+
+void lexer_pass(lexer_T* lexer) {
+ while (lexer->c == ' ' ||
+ lexer->c == '\t' ||
+ lexer->c == '\n') {
+ lexer_next(lexer);
+ }
+}
+
+token_T* lexer_get_next_token(lexer_T* lexer) {
+ while (lexer->c != '\0' && lexer->i < strlen(lexer->content)) {
+ if (lexer->c == ' ' ||
+ lexer->c == '\t' ||
+ lexer->c == '\n') {
+
+ }
+ }
+}
+
+token_T* lexer_get_string(lexer_T* lexer) {
+
+}
+token_T* lexer_get_id(lexer_T* lexer) {
+
+}
+token_T* lexer_next_token(lexer_T* lexer, token_T* token) {
+
+}
+char* lexer_get_c_as_string(lexer_T* lexer) {
+
+}