updated Separate string function and moved some part of main.c into SterlingCompiler.h
This commit is contained in:
parent
45030b0791
commit
0a66fcbd80
@ -0,0 +1,29 @@
|
|||||||
|
#ifndef STERLING_COMPILER_H
|
||||||
|
# define STERLING_COMPILER_H
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
TOK_NONE,
|
||||||
|
TOK_STRING,
|
||||||
|
TOK_TOKEN,
|
||||||
|
TOK_PREPROCESSOR,
|
||||||
|
} TKN_CTX;
|
||||||
|
|
||||||
|
typedef struct Token_s {
|
||||||
|
int size;
|
||||||
|
char *data;
|
||||||
|
TKN_CTX ctx;
|
||||||
|
} Token_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int size;
|
||||||
|
Token_t *token;
|
||||||
|
} TokenList;
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -1,11 +1,9 @@
|
|||||||
#include <stdlib.h>
|
#include <SterlingCompiler.h>
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
char *LoadFile(const char *filename) {
|
char *LoadFile(const char *filename) {
|
||||||
char *data = NULL;
|
char *data = NULL;
|
||||||
FILE *file = NULL;
|
FILE *file = NULL;
|
||||||
const int buff_size = 2048;
|
const int buff_size = 2048;//may change for max size of file in character
|
||||||
char buffer[buff_size];
|
char buffer[buff_size];
|
||||||
int count = 0;
|
int count = 0;
|
||||||
file = fopen(filename, "r");
|
file = fopen(filename, "r");
|
||||||
@ -16,64 +14,44 @@ char *LoadFile(const char *filename) {
|
|||||||
return (data);
|
return (data);
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
TOK_NONE,
|
|
||||||
TOK_STRING,
|
|
||||||
TOK_TOKEN,
|
|
||||||
TOK_PREPROCESSOR,
|
|
||||||
} TKN_CTX;
|
|
||||||
|
|
||||||
typedef struct Token_s {
|
|
||||||
int size;
|
|
||||||
char *data;
|
|
||||||
TKN_CTX ctx;
|
|
||||||
} Token_t;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int size;
|
|
||||||
Token_t *data;
|
|
||||||
} TokenList;
|
|
||||||
|
|
||||||
TokenList SeparateString(char *data) {
|
TokenList SeparateString(char *data) {
|
||||||
char* span = NULL;
|
char *span = NULL;
|
||||||
char* tok = NULL;
|
char *tok = NULL;
|
||||||
char* tmp = NULL;
|
char *tmp = NULL;
|
||||||
|
bool toggle = false;
|
||||||
Token_t buffer[256];
|
Token_t buffer[256];
|
||||||
tok = strtok_r(data, "\"\'", &span);
|
tok = strtok_r(data, "\"\'", &span);
|
||||||
int i = 0;
|
int i = 0;
|
||||||
buffer[i].ctx = TOK_NONE;
|
buffer[i].ctx = TOK_NONE;
|
||||||
while (tok) {
|
while (tok && i < (sizeof(buffer) / sizeof(Token_t))) {
|
||||||
size_t size = (span - tok);
|
size_t size = (span - tok);
|
||||||
tmp = calloc(size + 1, sizeof(char));
|
tmp = calloc(size + 1, sizeof(char));
|
||||||
memcpy_s(tmp, size, tok, size);
|
memcpy_s(tmp, size, tok, size);
|
||||||
tmp[size] = 0x00;
|
tmp[size] = 0x00;
|
||||||
buffer[i].data = tmp;
|
buffer[i].data = tmp;
|
||||||
buffer[i].size = size;
|
buffer[i].size = size;
|
||||||
|
if (toggle) {
|
||||||
//printf("|%s|\n", tmp);
|
buffer[i].ctx = TOK_STRING;
|
||||||
//free(tmp);
|
} else {
|
||||||
|
buffer[i].ctx = TOK_NONE;
|
||||||
|
}
|
||||||
tok = strtok_r(NULL, "\"\'", &span);
|
tok = strtok_r(NULL, "\"\'", &span);
|
||||||
i++;
|
i++;
|
||||||
buffer[i].ctx = TOK_STRING;
|
toggle ^= toggle;
|
||||||
|
|
||||||
}
|
}
|
||||||
TokenList token_list;
|
TokenList token_list;
|
||||||
token_list.data = calloc(i, sizeof(Token_t));
|
token_list.token = calloc(i, sizeof(Token_t));
|
||||||
token_list.size = i;
|
token_list.size = i;
|
||||||
|
memcpy(token_list.token, buffer, i);
|
||||||
|
for (int k = 0; k < i; k++) {
|
||||||
|
token_list.token[k] = buffer[i];
|
||||||
|
}
|
||||||
return (token_list);
|
return (token_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int ac, char **av) {
|
void tmpFunction() {
|
||||||
if (ac <= 1) {
|
char* data = NULL;
|
||||||
printf("no file specified");
|
|
||||||
return (-1);
|
|
||||||
}
|
|
||||||
char* data = LoadFile(av[1]);
|
|
||||||
TokenList tkn_lst;
|
|
||||||
//first pass on string
|
|
||||||
tkn_lst = SeparateString(data);
|
|
||||||
//second pass on ; and \n
|
|
||||||
//third pass on \t and space
|
|
||||||
|
|
||||||
char* span = NULL;
|
char* span = NULL;
|
||||||
char* tmp = NULL;
|
char* tmp = NULL;
|
||||||
char* delim = " \t\n";
|
char* delim = " \t\n";
|
||||||
@ -89,6 +67,22 @@ int main(int ac, char **av) {
|
|||||||
free(tmp);
|
free(tmp);
|
||||||
tok = strtok_r(NULL, " \t\n", &span);
|
tok = strtok_r(NULL, " \t\n", &span);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int ac, char **av) {
|
||||||
|
if (ac <= 1) {
|
||||||
|
printf("no file specified");
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
char* data = LoadFile(av[1]);
|
||||||
|
TokenList tkn_lst;
|
||||||
|
//first pass on string
|
||||||
|
tkn_lst = SeparateString(data);
|
||||||
|
//second pass on ; and \n
|
||||||
|
//third pass on \t and space
|
||||||
|
for (int i = 0; i < tkn_lst.size; i++) {
|
||||||
|
free(tkn_lst.token[i].data);
|
||||||
|
}
|
||||||
free(data);
|
free(data);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user