work in progess

This commit is contained in:
Олег Бородин
2025-10-16 17:46:55 +02:00
parent dfd504328d
commit bd89591945
8 changed files with 108 additions and 63 deletions
+13 -13
View File
@@ -19,10 +19,10 @@
#define RES_OK 0
#define RES_ERR -1
#define POS1TYPE TOKEN_WORD
#define POS2TYPE TOKEN_OPER
#define POS3TYPE TOKEN_WORD
#define POS4TYPE TOKEN_COMM
//#define POS1TYPE TLEX_TOKEN_WORD
//#define POS2TYPE TLEX_TOKEN_OPER
//#define POS3TYPE TLEX_TOKEN_WORD
//#define POS4TYPE TLEX_TOKEN_COMM
static char* strcopy(char* src) {
size_t srcsize = strlen(src) + 1;
@@ -62,25 +62,25 @@ int tccomp_parse(tccomp_t * comp) {
while (true) {
toktype = tclexer_get_token(lexer, token, MAX_TOK_SIZE);
if (toktype == TOKEN_SPACE) {
if (toktype == TLEX_TOKEN_SPACE) {
continue;
}
if (toktype == TOKEN_COMM) {
if (toktype == TLEX_TOKEN_COMM) {
continue;
}
//printf("tok=%d pos=%d line=%d [%s]\n", toktype, comp->pos, comp->lnum, token);
if (toktype == TOKEN_NEWLN) {
if (toktype == TLEX_TOKEN_NEWLN) {
comp->lnum++;
}
switch (comp->pos) {
case 0:{
if (toktype == TOKEN_NEWLN) {
if (toktype == TLEX_TOKEN_NEWLN) {
comp->pos = 0;
break;
}
if (toktype != TOKEN_WORD) {
if (toktype != TLEX_TOKEN_WORD) {
return -1;
}
comp->pos++;
@@ -88,14 +88,14 @@ int tccomp_parse(tccomp_t * comp) {
break;
}
case 1:{
if (toktype != TOKEN_OPER) {
if (toktype != TLEX_TOKEN_OPER) {
return -1;
}
comp->pos++;
break;
}
case 2:{
if (toktype != TOKEN_WORD) {
if (toktype != TLEX_TOKEN_WORD) {
return -1;
}
comp->pos++;
@@ -103,7 +103,7 @@ int tccomp_parse(tccomp_t * comp) {
break;
}
case 3:{
if (toktype != TOKEN_NEWLN && toktype != TOKEN_ENDFL) {
if (toktype != TLEX_TOKEN_NEWLN && toktype != TLEX_TOKEN_ENDFL) {
return -1;
}
comp->pos = 0;
@@ -114,7 +114,7 @@ int tccomp_parse(tccomp_t * comp) {
break;
}
}
if (toktype == TOKEN_ENDFL)
if (toktype == TLEX_TOKEN_ENDFL)
break;
}
return 0;
+7 -7
View File
@@ -78,7 +78,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
switch (lexer->context) {
case LEXCONT_ENDFL:{
return TOKEN_ENDFL;
return TLEX_TOKEN_ENDFL;
}
case LEXCONT_WORD:{
int newcontext = LEXCONT_WORD;
@@ -108,7 +108,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
if (newcontext != lexer->context) {
lexer->context = newcontext;
token[lexer->pos++] = '\0';
return TOKEN_WORD;
return TLEX_TOKEN_WORD;
}
token[lexer->pos++] = lexer->letter;
break;
@@ -129,7 +129,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
if (newcontext != lexer->context) {
token[lexer->pos++] = '\0';
lexer->context = newcontext;
return TOKEN_COMM;
return TLEX_TOKEN_COMM;
}
token[lexer->pos++] = lexer->letter;
break;
@@ -162,7 +162,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
if (newcontext != lexer->context) {
lexer->context = newcontext;
strcpy(token, "SPACE");
return TOKEN_SPACE;
return TLEX_TOKEN_SPACE;
}
token[lexer->pos++] = lexer->letter;
break;
@@ -195,7 +195,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
if (newcontext != lexer->context) {
lexer->context = newcontext;
strcpy(token, "=");
return TOKEN_OPER;
return TLEX_TOKEN_OPER;
}
token[lexer->pos++] = lexer->letter;
break;
@@ -224,7 +224,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
if (newcontext != lexer->context) {
lexer->context = newcontext;
strcpy(token, "NL");
return TOKEN_NEWLN;
return TLEX_TOKEN_NEWLN;
}
token[lexer->pos++] = lexer->letter;
break;
@@ -267,7 +267,7 @@ int tclexer_get_token(tclexer_t * lexer, char* token, int maxsize) {
}
lexer->letter = bstream_getc(lexer->stream);
}
return TOKEN_ENDFL;
return TLEX_TOKEN_ENDFL;
}
void tclexer_destroy(tclexer_t * lexer) {
+7 -7
View File
@@ -16,13 +16,13 @@ typedef struct {
#define MAX_TOK_SIZE 1024
#define TOKEN_NULL 0
#define TOKEN_WORD 1
#define TOKEN_SPACE 2
#define TOKEN_COMM 3
#define TOKEN_OPER 4
#define TOKEN_ENDFL 5
#define TOKEN_NEWLN 7
#define TLEX_TOKEN_NULL 0
#define TLEX_TOKEN_WORD 1
#define TLEX_TOKEN_SPACE 2
#define TLEX_TOKEN_COMM 3
#define TLEX_TOKEN_OPER 4
#define TLEX_TOKEN_ENDFL 5
#define TLEX_TOKEN_NEWLN 7
tclexer_t* new_tclexer(bstream_t * stream);
void tclexer_init(tclexer_t * tclexer, bstream_t * stream);