summary refs log tree commit diff
path: root/tokenizer.c
diff options
context:
space:
mode:
authorNakidai <nakidai@disroot.org>2025-03-24 22:53:57 +0300
committerNakidai <nakidai@disroot.org>2025-03-24 22:53:57 +0300
commite8703c985af8cbe2de5eb235c7ec295ce1811c7f (patch)
treea6f82af9b65624d46ef19160f24ac0d7f2e03211 /tokenizer.c
parentf312b357ab2ec3cf83a67945f3641b964a59e8d2 (diff)
download3cl-e8703c985af8cbe2de5eb235c7ec295ce1811c7f.tar.gz
3cl-e8703c985af8cbe2de5eb235c7ec295ce1811c7f.zip
Some improvements
- Fix paser
- Add verbose mode
Diffstat (limited to 'tokenizer.c')
-rw-r--r--tokenizer.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/tokenizer.c b/tokenizer.c
index 04e2137..e843ef1 100644
--- a/tokenizer.c
+++ b/tokenizer.c
@@ -2,10 +2,11 @@
 
 #include <assert.h>
 #include <err.h>
+#include <stdio.h>
 #include <stddef.h>
 
 
-size_t tokenize(const char *code, size_t size, struct cccl_Token tokens[], size_t tokens_length)
+size_t cccl_tokenize(const char *code, size_t size, struct cccl_Token tokens[], size_t tokens_length)
 {
     size_t i = 0, tokeni = 0;
     int comment = 0;
@@ -38,11 +39,12 @@ size_t tokenize(const char *code, size_t size, struct cccl_Token tokens[], size_
         case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': 
         case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': 
         case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
+        case '_':
             X(IDENTIFIER);
-        case '^': case '+': case '-': case '*': case '~':
+        case '^': case '+': case '-': case '*': case '~': case '#': case ':':
             X(COMMAND);
-        case '%': case '=': case '!': case '$': case '&':
-        case '<': case '>': case '#': case ':': case '@':
+        case '%': case '=': case '!': case '$':
+        case '&': case '<': case '>': case '@':
             X(COMMANDWITHARG);
         case '{': case '(': case '[': case '?':
             X(BLOCKSTART);
@@ -54,7 +56,7 @@ size_t tokenize(const char *code, size_t size, struct cccl_Token tokens[], size_
         {
             if (comment)
                 break;
-            errx(1, "Illegal symbol in a code: [%d] %c", code[i], code[i]);
+            errx(1, "Illegal symbol in a code at byte %lu: [%d] %c", i, code[i], code[i]);
         } break;
 #undef X
         }