Skip to content

Commit 51f91fd

Browse files
committed
refactory all about lexer
1 parent 568f39a commit 51f91fd

File tree

4 files changed

+46
-6
lines changed

4 files changed

+46
-6
lines changed

.sconsign.dblite

1.81 KB
Binary file not shown.

lexer.c

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,57 @@ typedef struct {
3636
} token_t;
3737

3838
bool 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+
/*
5090
bool 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+
*/
98138
int main (void) {
99139
program_t program;
100140
program_load("./code.scm", &program);

lexer.o

2.34 KB
Binary file not shown.

word.exe

50.4 KB
Binary file not shown.

0 commit comments

Comments
 (0)