update file structure
This commit is contained in:
5
Makefile
5
Makefile
@@ -37,10 +37,11 @@ D_HEADERS = ./headers
|
|||||||
HEADERS = computorv1.h
|
HEADERS = computorv1.h
|
||||||
D_SRCS = ./src \
|
D_SRCS = ./src \
|
||||||
./src/utils
|
./src/utils
|
||||||
SRCS = computorv1.c \
|
SRCS = main.c \
|
||||||
|
launcher.c \
|
||||||
lexer.c \
|
lexer.c \
|
||||||
parser.c \
|
parser.c \
|
||||||
reduce.c \
|
reducer.c \
|
||||||
errors.c \
|
errors.c \
|
||||||
print_enums.c
|
print_enums.c
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
#include <termios.h> // For tcflush() and TCIFLUSH
|
#include <termios.h> // For tcflush() and TCIFLUSH
|
||||||
|
|
||||||
/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
* COMPUTORV1.C
|
* MAIN.C
|
||||||
*/
|
*/
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
@@ -24,6 +24,12 @@ typedef enum
|
|||||||
MODE_LOOP, //
|
MODE_LOOP, //
|
||||||
} e_program_mode;
|
} e_program_mode;
|
||||||
|
|
||||||
|
/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
* COMPUTORV1.C
|
||||||
|
*/
|
||||||
|
|
||||||
|
void launch_computorv1(char *input);
|
||||||
|
|
||||||
/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
/** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
* LEXER.C
|
* LEXER.C
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,22 +2,6 @@
|
|||||||
|
|
||||||
#include "computorv1.h"
|
#include "computorv1.h"
|
||||||
|
|
||||||
/**
|
|
||||||
* GLOBALS
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool flag_debug_mode;
|
|
||||||
bool flag_loop_mode;
|
|
||||||
char *input_g_err;
|
|
||||||
s_token *tokens_g_err;
|
|
||||||
s_term *terms_g_err;
|
|
||||||
double *polynom_g_err;
|
|
||||||
int polynom_len_g_err;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PROGRAM
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void remove_spaces(char *s)
|
static void remove_spaces(char *s)
|
||||||
{
|
{
|
||||||
char *read = s;
|
char *read = s;
|
||||||
@@ -114,7 +98,7 @@ static void polynom_fill_null(double *polynom, int len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void launch_argv(char *input)
|
void launch_computorv1(char *input)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int max_exponent;
|
int max_exponent;
|
||||||
@@ -160,145 +144,3 @@ static void launch_argv(char *input)
|
|||||||
// debug
|
// debug
|
||||||
print_state();
|
print_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
// trim spaces and quotes and newlines
|
|
||||||
static void clean_copy_input(char *input, char *line)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
size_t j;
|
|
||||||
size_t len;
|
|
||||||
size_t len_trim_end;
|
|
||||||
size_t len_trim_start;
|
|
||||||
|
|
||||||
len = ft_strlen(line);
|
|
||||||
|
|
||||||
// get len minus : ' | " | \n | <space>
|
|
||||||
i = len;
|
|
||||||
while (i > 0)
|
|
||||||
{
|
|
||||||
if (ft_strchr("\"\'\n", line[i]))
|
|
||||||
i--;
|
|
||||||
if (ft_isspace(line[i]))
|
|
||||||
i--;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len_trim_end = i;
|
|
||||||
|
|
||||||
// get len of leading chars : ' | " | <space> | \n
|
|
||||||
i = 0;
|
|
||||||
while (i < len_trim_end)
|
|
||||||
{
|
|
||||||
if (ft_strchr("\"\'\n", line[i]))
|
|
||||||
i++;
|
|
||||||
if (ft_isspace(line[i]))
|
|
||||||
i++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
len_trim_start = i;
|
|
||||||
|
|
||||||
// copy into input
|
|
||||||
i = len_trim_start;
|
|
||||||
j = 0;
|
|
||||||
while (i <= len_trim_end)
|
|
||||||
{
|
|
||||||
input[j] = line[i];
|
|
||||||
j++;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
input[j] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
static void launch_stdin()
|
|
||||||
{
|
|
||||||
char *line;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
line = NULL;
|
|
||||||
len = 0;
|
|
||||||
|
|
||||||
// get input
|
|
||||||
getline(&line, &len, stdin);
|
|
||||||
|
|
||||||
// prepare input
|
|
||||||
char input[len];
|
|
||||||
clean_copy_input(input, line);
|
|
||||||
|
|
||||||
// launch input
|
|
||||||
launch_argv(input);
|
|
||||||
|
|
||||||
// FREE LINE !
|
|
||||||
free(line);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void launch_stdin_loop()
|
|
||||||
{
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int ac, char **av)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *input;
|
|
||||||
e_program_mode program_mode;
|
|
||||||
|
|
||||||
// init flags
|
|
||||||
flag_debug_mode = false;
|
|
||||||
flag_loop_mode = false;
|
|
||||||
|
|
||||||
// check arguments
|
|
||||||
program_mode = MODE_ARGV;
|
|
||||||
if (ac == 1)
|
|
||||||
{
|
|
||||||
program_mode = MODE_STDIN;
|
|
||||||
}
|
|
||||||
else if (ac > 1)
|
|
||||||
{
|
|
||||||
// get flags
|
|
||||||
input = NULL;
|
|
||||||
i = 1;
|
|
||||||
while (i < ac)
|
|
||||||
{
|
|
||||||
if ((ft_strcmp(av[i], "-d") == 0))
|
|
||||||
{
|
|
||||||
flag_debug_mode = true;
|
|
||||||
}
|
|
||||||
else if ((ft_strcmp(av[i], "-l") == 0))
|
|
||||||
{
|
|
||||||
flag_loop_mode = true;
|
|
||||||
program_mode = MODE_LOOP;
|
|
||||||
}
|
|
||||||
else if (ft_strlen(av[i]) == 2 && av[i][0] == '-')
|
|
||||||
{
|
|
||||||
stop_errors("unknwon flag '%s'", av[i]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
input = av[i];
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
// if input was not set, it means interactiv mode
|
|
||||||
if (input == NULL)
|
|
||||||
{
|
|
||||||
program_mode = MODE_STDIN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// launch calculator
|
|
||||||
if (program_mode == MODE_ARGV)
|
|
||||||
{
|
|
||||||
launch_argv(input);
|
|
||||||
}
|
|
||||||
else if (program_mode == MODE_STDIN)
|
|
||||||
{
|
|
||||||
launch_stdin();
|
|
||||||
}
|
|
||||||
else if (program_mode == MODE_LOOP)
|
|
||||||
{
|
|
||||||
launch_stdin_loop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
161
src/main.c
Normal file
161
src/main.c
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
/* main.c */
|
||||||
|
|
||||||
|
#include "computorv1.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* GLOBALS
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool flag_debug_mode;
|
||||||
|
bool flag_loop_mode;
|
||||||
|
char *input_g_err;
|
||||||
|
s_token *tokens_g_err;
|
||||||
|
s_term *terms_g_err;
|
||||||
|
double *polynom_g_err;
|
||||||
|
int polynom_len_g_err;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* PROGRAM
|
||||||
|
*/
|
||||||
|
|
||||||
|
// trim spaces and quotes and newlines
|
||||||
|
static void clean_copy_input(char *input, char *line)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
size_t j;
|
||||||
|
size_t len;
|
||||||
|
size_t len_trim_end;
|
||||||
|
size_t len_trim_start;
|
||||||
|
|
||||||
|
len = ft_strlen(line);
|
||||||
|
|
||||||
|
// get len minus : ' | " | \n | <space>
|
||||||
|
i = len;
|
||||||
|
while (i > 0)
|
||||||
|
{
|
||||||
|
if (ft_strchr("\"\'\n", line[i]))
|
||||||
|
i--;
|
||||||
|
if (ft_isspace(line[i]))
|
||||||
|
i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len_trim_end = i;
|
||||||
|
|
||||||
|
// get len of leading chars : ' | " | <space> | \n
|
||||||
|
i = 0;
|
||||||
|
while (i < len_trim_end)
|
||||||
|
{
|
||||||
|
if (ft_strchr("\"\'\n", line[i]))
|
||||||
|
i++;
|
||||||
|
if (ft_isspace(line[i]))
|
||||||
|
i++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
len_trim_start = i;
|
||||||
|
|
||||||
|
// copy into input
|
||||||
|
i = len_trim_start;
|
||||||
|
j = 0;
|
||||||
|
while (i <= len_trim_end)
|
||||||
|
{
|
||||||
|
input[j] = line[i];
|
||||||
|
j++;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
input[j] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
static void launch_stdin()
|
||||||
|
{
|
||||||
|
char *line;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
line = NULL;
|
||||||
|
len = 0;
|
||||||
|
|
||||||
|
// get input
|
||||||
|
getline(&line, &len, stdin);
|
||||||
|
|
||||||
|
// prepare input
|
||||||
|
char input[len];
|
||||||
|
clean_copy_input(input, line);
|
||||||
|
|
||||||
|
// launch input
|
||||||
|
launch_computorv1(input);
|
||||||
|
|
||||||
|
// FREE LINE !
|
||||||
|
free(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void launch_stdin_loop()
|
||||||
|
{
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int ac, char **av)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char *input;
|
||||||
|
e_program_mode program_mode;
|
||||||
|
|
||||||
|
// init flags
|
||||||
|
flag_debug_mode = false;
|
||||||
|
flag_loop_mode = false;
|
||||||
|
|
||||||
|
// check arguments
|
||||||
|
program_mode = MODE_ARGV;
|
||||||
|
if (ac == 1)
|
||||||
|
{
|
||||||
|
program_mode = MODE_STDIN;
|
||||||
|
}
|
||||||
|
else if (ac > 1)
|
||||||
|
{
|
||||||
|
// get flags
|
||||||
|
input = NULL;
|
||||||
|
i = 1;
|
||||||
|
while (i < ac)
|
||||||
|
{
|
||||||
|
if ((ft_strcmp(av[i], "-d") == 0))
|
||||||
|
{
|
||||||
|
flag_debug_mode = true;
|
||||||
|
}
|
||||||
|
else if ((ft_strcmp(av[i], "-l") == 0))
|
||||||
|
{
|
||||||
|
flag_loop_mode = true;
|
||||||
|
program_mode = MODE_LOOP;
|
||||||
|
}
|
||||||
|
else if (ft_strlen(av[i]) == 2 && av[i][0] == '-')
|
||||||
|
{
|
||||||
|
stop_errors("unknwon flag '%s'", av[i]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
input = av[i];
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
// if input was not set, it means interactiv mode
|
||||||
|
if (input == NULL)
|
||||||
|
{
|
||||||
|
program_mode = MODE_STDIN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// launch calculator
|
||||||
|
if (program_mode == MODE_ARGV)
|
||||||
|
{
|
||||||
|
launch_computorv1(input);
|
||||||
|
}
|
||||||
|
else if (program_mode == MODE_STDIN)
|
||||||
|
{
|
||||||
|
launch_stdin();
|
||||||
|
}
|
||||||
|
else if (program_mode == MODE_LOOP)
|
||||||
|
{
|
||||||
|
launch_stdin_loop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user