aboutsummaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-06-08 15:17:13 +0200
committerThomas Voss <mail@thomasvoss.com> 2024-06-08 15:17:13 +0200
commitd21121e59b21c73afa3622abe256771f1e73ff69 (patch)
treed91acbc4fac4062cd5acda237d759e2a51047648 /src/main.c
parent46e676254e5121f38c5d3668855c34a4496f88ec (diff)
Switch to an SOA for lexemes
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c89
1 files changed, 62 insertions, 27 deletions
diff --git a/src/main.c b/src/main.c
index 9969401..bef6b0d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -24,40 +24,75 @@ main(int argc, char **argv)
} file;
file.p = readfile(argv[1], &file.len);
- struct {
- struct lexeme *p;
- size_t len;
- } toks;
- toks.p = lexstring(file.p, file.len, &toks.len);
+ struct lexemes_soa toks = lexstring(file.p, file.len);
for (size_t i = 0; i < toks.len; i++) {
- struct lexeme l = toks.p[i];
- switch (l.kind) {
- case LEXIDENT:
- printf("Identifier: ā€˜%.*sā€™\n", (int)l.len, l.p);
- break;
- case LEXCOLON: puts("Colon"); break;
- case LEXLBRACE: puts("Left brace"); break;
- case LEXLPAR: puts("Left parenthesis"); break;
- case LEXRBRACE: puts("Right brace"); break;
- case LEXRPAR: puts("Right parenthesis"); break;
- case LEXSEMI: puts("Semicolon"); break;
- case LEXAMP: puts("Ampersand"); break;
- case LEXEQ: puts("Equals"); break;
- case LEXLANGL: puts("Left angle bracket"); break;
- case LEXMINUS: puts("Minus"); break;
- case LEXPIPE: puts("Pipe"); break;
- case LEXPLUS: puts("Plus"); break;
- case LEXRANGL: puts("Right angle bracket"); break;
- case LEXSLASH: puts("Slash"); break;
- case LEXSTAR: puts("Asterisk"); break;
- case LEXTILDE: puts("Tilde"); break;
+ switch (toks.kinds[i]) {
+ case LEXIDENT: {
+ struct strview sv = toks.strs[i];
+ printf("Identifier: ā€˜%.*sā€™\n", (int)sv.len, sv.p);
+ break;
+ }
+ case LEXAMP:
+ puts("Ampersand");
+ break;
+ case LEXCOLON:
+ puts("Colon");
+ break;
+ case LEXEQ:
+ puts("Equals");
+ break;
+ case LEXLANGL:
+ puts("Left angle bracket");
+ break;
+ case LEXLBRACE:
+ puts("Left brace");
+ break;
+ case LEXLBRKT:
+ puts("Right bracket");
+ break;
+ case LEXLPAR:
+ puts("Left parenthesis");
+ break;
+ case LEXMINUS:
+ puts("Minus");
+ break;
+ case LEXPIPE:
+ puts("Pipe");
+ break;
+ case LEXPLUS:
+ puts("Plus");
+ break;
+ case LEXRANGL:
+ puts("Right angle bracket");
+ break;
+ case LEXRBRACE:
+ puts("Right brace");
+ break;
+ case LEXRBRKT:
+ puts("Right bracket");
+ break;
+ case LEXRPAR:
+ puts("Right parenthesis");
+ break;
+ case LEXSEMI:
+ puts("Semicolon");
+ break;
+ case LEXSLASH:
+ puts("Slash");
+ break;
+ case LEXSTAR:
+ puts("Asterisk");
+ break;
+ case LEXTILDE:
+ puts("Tilde");
+ break;
}
}
#if DEBUG
free(file.p);
- free(toks.p);
+ lexemes_free(toks);
#endif
return EXIT_SUCCESS;
}