@@ -36,17 +36,57 @@ typedef struct {
3636} token_t ;
3737
3838bool token_any (program_t * program , token_t * token , char any []) {
39- char c [1 ] = { program -> code [program -> iter ];} ;
39+ char c [] = { program -> code [program -> iter ] } ;
4040 int idx = strspn (c , any );
4141 if (idx >= strlen (any )) { return false; }
4242 token -> token [0 ] = c [0 ];
4343 token -> len = 1 ;
4444}
4545
46- const char token_single [] = "[]{}|(}'`." ;
47- const char token_prfix [] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!$%&*/:<=>?^_~" ;
48- const char token_in [] = "1234567890+-.@" ;
46+ const char reserved [] = "[]{}|" ;
47+ bool is_reserved (char _c ) {
48+ char c [] = { _c };
49+ return strspn (c , reserved );
50+ }
51+
52+ const char token_character [] = "()'`,." ;
53+ bool is_token_chararcter (char _c ) {
54+ char c [] = { _c };
55+ return strspn (c , token_character );
56+ }
57+
58+ // comma(,) is also a token_character, with ,@ the same
59+ bool token_comma (program_t * program , token_t * token ) {
60+ char c = program -> code [program -> iter ];
61+ char n = program -> code [program -> iter + 1 ];
62+ char t = program -> code [program -> iter + 2 ];
63+ if ( c == ',' && isblank (n ) ) {
64+ program -> iter ++ , program -> col ++ ;
65+ token -> token [0 ] = ',' , token -> len = 1 ;
66+ return true;
67+ } else if ( c == ',' && n == '@' && isblank (t )) {
68+ program -> iter ++ , program -> col ++ ;
69+ token -> token [0 ] = ',' , token -> token [1 ] = '@' , token -> len = 2 ;
70+ return true;
71+ }
72+ return false;
73+ }
4974
75+ const char special_initial [] = "!$%&*/:<=>?^_~" ;
76+ bool is_special_initial (char _c ) {
77+ char c [] = { _c };
78+ return strspn (c , special_initial );
79+ }
80+
81+ const char special_subquent [] = "+-.@" ;
82+ bool is_special_subquent (char _c ) {
83+ char c [] = { _c };
84+ return strspn (c , special_subquent );
85+ }
86+
87+ // const char peculiar_identifier = "+-..."
88+
89+ /*
5090bool token_identifier(program_t *program, token_t *token) {
5191 int token_len = 0;
5292 while ( isblank(program->code[program->iter] ) {
@@ -80,7 +120,7 @@ bool token_next(program_t *program, token_t *token) {
80120 token->code[0] = c, token->code[1] = n, token->len = 2;
81121 program->iter += 2, program->cos += 2;
82122 return true;
83- } else if ( token_any (program , token , token_prefix ) ) {
123+ } else if ( token_any(program, token, token_prefix) || isalpha(c) ) {
84124
85125 }
86126
@@ -94,7 +134,7 @@ bool token_next(program_t *program, token_t *token) {
94134 return true;
95135 }
96136}
97-
137+ */
98138int main (void ) {
99139 program_t program ;
100140 program_load ("./code.scm" , & program );
0 commit comments