refacto lexer
This commit is contained in:
parent
768473c996
commit
56b705b741
154
lexer.c
154
lexer.c
|
@ -17,6 +17,77 @@ Cursor prev = {
|
||||||
.offset = -2,
|
.offset = -2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void printtoken(Token* token){
|
||||||
|
if (token == NULL){
|
||||||
|
puts("NULL TOKEN");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (token->type) {
|
||||||
|
case UNDEFINED_TYPE:
|
||||||
|
printf("UNDEFINED_TYPE: ");
|
||||||
|
break;
|
||||||
|
case DONT_CARE:
|
||||||
|
printf("DONT_CARE: ");
|
||||||
|
break;
|
||||||
|
case TEXT:
|
||||||
|
printf("TEXT: ");
|
||||||
|
break;
|
||||||
|
case BODY:
|
||||||
|
printf("BODY: ");
|
||||||
|
break;
|
||||||
|
case END_BODY:
|
||||||
|
printf("END_BODY: ");
|
||||||
|
break;
|
||||||
|
case HTML:
|
||||||
|
printf("HTML: ");
|
||||||
|
break;
|
||||||
|
case END_HTML:
|
||||||
|
printf("END_HTML: ");
|
||||||
|
break;
|
||||||
|
case A:
|
||||||
|
printf("A: ");
|
||||||
|
break;
|
||||||
|
case END_A:
|
||||||
|
printf("END_A: ");
|
||||||
|
break;
|
||||||
|
case UL:
|
||||||
|
printf("UL: ");
|
||||||
|
break;
|
||||||
|
case LI:
|
||||||
|
printf("LI: ");
|
||||||
|
break;
|
||||||
|
case H1:
|
||||||
|
printf("H1: ");
|
||||||
|
break;
|
||||||
|
case H2:
|
||||||
|
printf("H2: ");
|
||||||
|
break;
|
||||||
|
case H3:
|
||||||
|
printf("H3: ");
|
||||||
|
break;
|
||||||
|
case H4:
|
||||||
|
printf("H4: ");
|
||||||
|
break;
|
||||||
|
case H5:
|
||||||
|
printf("H5: ");
|
||||||
|
break;
|
||||||
|
case H6:
|
||||||
|
printf("H6: ");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("ERROR: UNKNOWN TOKEN: ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (token->value == NULL){
|
||||||
|
puts("'NO VALUE FOUND'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("'%s'\n", token->value);
|
||||||
|
}
|
||||||
|
|
||||||
int increment_cursor(Cursor* cursor){
|
int increment_cursor(Cursor* cursor){
|
||||||
if (cursor->offset+1 < 0){
|
if (cursor->offset+1 < 0){
|
||||||
cursor->offset++;
|
cursor->offset++;
|
||||||
|
@ -96,7 +167,7 @@ TokenType token_by_name(const char name[HTML_BALISE_LEN]){
|
||||||
return DONT_CARE;
|
return DONT_CARE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_text_token(Token* token, char* cursor){
|
Token* create_text_token(Token* token, char* cursor){
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
@ -109,9 +180,11 @@ void create_text_token(Token* token, char* cursor){
|
||||||
token->type = TEXT;
|
token->type = TEXT;
|
||||||
token->value = "TODO";
|
token->value = "TODO";
|
||||||
token->len = i;
|
token->len = i;
|
||||||
|
|
||||||
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
void create_balise_token(Token* token, char* cursor){
|
Token* create_balise_token(Token* token, char* cursor){
|
||||||
char balise[HTML_BALISE_LEN] = {0};
|
char balise[HTML_BALISE_LEN] = {0};
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|
||||||
|
@ -132,6 +205,8 @@ void create_balise_token(Token* token, char* cursor){
|
||||||
do {
|
do {
|
||||||
cursor = nextchar();
|
cursor = nextchar();
|
||||||
} while (*cursor != '>');
|
} while (*cursor != '>');
|
||||||
|
|
||||||
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
Token* nexttoken(void){
|
Token* nexttoken(void){
|
||||||
|
@ -146,81 +221,10 @@ Token* nexttoken(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*cursor != '<'){
|
if (*cursor != '<'){
|
||||||
create_text_token(token, cursor);
|
token = create_text_token(token, cursor);
|
||||||
} else if (*cursor == '<'){
|
} else if (*cursor == '<'){
|
||||||
create_balise_token(token, cursor);
|
token = create_balise_token(token, cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return token;
|
return token;
|
||||||
}
|
}
|
||||||
|
|
||||||
void printtoken(Token* token){
|
|
||||||
if (token == NULL){
|
|
||||||
puts("NULL TOKEN");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (token->type) {
|
|
||||||
case UNDEFINED_TYPE:
|
|
||||||
printf("UNDEFINED_TYPE: ");
|
|
||||||
break;
|
|
||||||
case DONT_CARE:
|
|
||||||
printf("DONT_CARE: ");
|
|
||||||
break;
|
|
||||||
case TEXT:
|
|
||||||
printf("TEXT: ");
|
|
||||||
break;
|
|
||||||
case BODY:
|
|
||||||
printf("BODY: ");
|
|
||||||
break;
|
|
||||||
case END_BODY:
|
|
||||||
printf("END_BODY: ");
|
|
||||||
break;
|
|
||||||
case HTML:
|
|
||||||
printf("HTML: ");
|
|
||||||
break;
|
|
||||||
case END_HTML:
|
|
||||||
printf("END_HTML: ");
|
|
||||||
break;
|
|
||||||
case A:
|
|
||||||
printf("A: ");
|
|
||||||
break;
|
|
||||||
case END_A:
|
|
||||||
printf("END_A: ");
|
|
||||||
break;
|
|
||||||
case UL:
|
|
||||||
printf("UL: ");
|
|
||||||
break;
|
|
||||||
case LI:
|
|
||||||
printf("LI: ");
|
|
||||||
break;
|
|
||||||
case H1:
|
|
||||||
printf("H1: ");
|
|
||||||
break;
|
|
||||||
case H2:
|
|
||||||
printf("H2: ");
|
|
||||||
break;
|
|
||||||
case H3:
|
|
||||||
printf("H3: ");
|
|
||||||
break;
|
|
||||||
case H4:
|
|
||||||
printf("H4: ");
|
|
||||||
break;
|
|
||||||
case H5:
|
|
||||||
printf("H5: ");
|
|
||||||
break;
|
|
||||||
case H6:
|
|
||||||
printf("H6: ");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
printf("ERROR: UNKNOWN TOKEN: ");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (token->value == NULL){
|
|
||||||
puts("'NO VALUE FOUND'");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("'%s'\n", token->value);
|
|
||||||
}
|
|
||||||
|
|
2
main.c
2
main.c
|
@ -12,7 +12,7 @@ int main(int argc, char* argv[]){
|
||||||
token = nexttoken();
|
token = nexttoken();
|
||||||
printtoken(token);
|
printtoken(token);
|
||||||
//evaluate(token);
|
//evaluate(token);
|
||||||
} while (token != NULL && token->type != END_HTML);
|
} while (token != NULL && token->type != END_BODY);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue