wip improve printer
This commit is contained in:
@@ -33,6 +33,7 @@ void launch_computorv1(char *input);
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
TOKEN_END = 0, // null (end of input)
|
||||||
TOKEN_VARIABLE, // x, y, etc.
|
TOKEN_VARIABLE, // x, y, etc.
|
||||||
TOKEN_NUMBER_INT, // int
|
TOKEN_NUMBER_INT, // int
|
||||||
TOKEN_NUMBER_DOUBLE, // double
|
TOKEN_NUMBER_DOUBLE, // double
|
||||||
@@ -43,12 +44,11 @@ typedef enum
|
|||||||
TOKEN_FACTOR_MULT, // *
|
TOKEN_FACTOR_MULT, // *
|
||||||
TOKEN_FACTOR_DIV, // / or :
|
TOKEN_FACTOR_DIV, // / or :
|
||||||
TOKEN_EQUAL, // =
|
TOKEN_EQUAL, // =
|
||||||
TOKEN_END // null (end of input)
|
|
||||||
} e_token_type;
|
} e_token_type;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TOKEN_NO_TAG,
|
TOKEN_NO_TAG = 0,
|
||||||
TOKEN_NUMBER,
|
TOKEN_NUMBER,
|
||||||
TOKEN_SIGN,
|
TOKEN_SIGN,
|
||||||
TOKEN_FACTOR,
|
TOKEN_FACTOR,
|
||||||
@@ -74,16 +74,16 @@ void lexerize(const char *input, s_token *tokens);
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TERM_LEFT, // a in "a = b"
|
TERM_POS_END = 0, // for last term
|
||||||
TERM_RIGHT, // b in "a = b"
|
TERM_LEFT, // a in "a = b"
|
||||||
TERM_POS_END, // last term
|
TERM_RIGHT, // b in "a = b"
|
||||||
} e_term_position;
|
} e_term_position;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
TERM_PLUS = '+', // +
|
TERM_SIGN_END = 0, // for last term
|
||||||
TERM_MINUS = '-', // -
|
TERM_PLUS = '+', // +
|
||||||
TERM_SIGN_END, // last term
|
TERM_MINUS = '-', // -
|
||||||
} e_term_sign;
|
} e_term_sign;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@@ -115,9 +115,9 @@ int reduce(s_term *terms, s_polynom *polynom, int max_exponent);
|
|||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
|
DELTA_ZERO = 0,
|
||||||
DELTA_PLUS = 1,
|
DELTA_PLUS = 1,
|
||||||
DELTA_MINUS = -1,
|
DELTA_MINUS = -1,
|
||||||
DELTA_ZERO = 0,
|
|
||||||
} e_delta_sign;
|
} e_delta_sign;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
|||||||
@@ -38,35 +38,6 @@ static size_t count_any_of(const char *s, const char *set)
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tokens_fill_null(s_token *tokens, size_t arg_len)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < arg_len)
|
|
||||||
{
|
|
||||||
tokens[i].type = TOKEN_END;
|
|
||||||
tokens[i].tag = TOKEN_NO_TAG;
|
|
||||||
tokens[i].value_char = '\0';
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void terms_fill_null(s_term *terms, size_t terms_count_prediction)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < terms_count_prediction)
|
|
||||||
{
|
|
||||||
terms[i].coefficient = 0.0;
|
|
||||||
terms[i].exponent = 0;
|
|
||||||
terms[i].position = TERM_POS_END;
|
|
||||||
terms[i].sign = TERM_SIGN_END;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int get_max_exponent(s_term *terms)
|
static int get_max_exponent(s_term *terms)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -115,20 +86,6 @@ static int get_number_of_exponents(s_term *terms, int max_exponent)
|
|||||||
return nbr_of_exponent;
|
return nbr_of_exponent;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void polynom_fill_null(s_polynom *polynom, int len)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < len)
|
|
||||||
{
|
|
||||||
polynom[i].coefficient = 0.0;
|
|
||||||
polynom[i].exponent = 0;
|
|
||||||
polynom[i].sign = TERM_SIGN_END;
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void launch_computorv1(char *input)
|
void launch_computorv1(char *input)
|
||||||
{
|
{
|
||||||
int max_exponent;
|
int max_exponent;
|
||||||
@@ -146,7 +103,7 @@ void launch_computorv1(char *input)
|
|||||||
print_debug("\n-> tokens[%i]\n", arg_len);
|
print_debug("\n-> tokens[%i]\n", arg_len);
|
||||||
s_token tokens[arg_len];
|
s_token tokens[arg_len];
|
||||||
tokens_g_err = tokens;
|
tokens_g_err = tokens;
|
||||||
tokens_fill_null(tokens, arg_len);
|
ft_bzero(tokens, sizeof(tokens));
|
||||||
lexerize(input, tokens);
|
lexerize(input, tokens);
|
||||||
|
|
||||||
// parse
|
// parse
|
||||||
@@ -154,7 +111,7 @@ void launch_computorv1(char *input)
|
|||||||
print_debug("-> terms[%i]\n\n", terms_count_prediction);
|
print_debug("-> terms[%i]\n\n", terms_count_prediction);
|
||||||
s_term terms[terms_count_prediction];
|
s_term terms[terms_count_prediction];
|
||||||
terms_g_err = terms;
|
terms_g_err = terms;
|
||||||
terms_fill_null(terms, terms_count_prediction);
|
ft_bzero(terms, sizeof(terms));
|
||||||
parse(tokens, terms, terms_count_prediction);
|
parse(tokens, terms, terms_count_prediction);
|
||||||
|
|
||||||
// reduce
|
// reduce
|
||||||
@@ -164,7 +121,7 @@ void launch_computorv1(char *input)
|
|||||||
print_debug("-> nbr_of_exponents: %i\n\n", nbr_of_exponents);
|
print_debug("-> nbr_of_exponents: %i\n\n", nbr_of_exponents);
|
||||||
s_polynom polynom[nbr_of_exponents + 2]; // +1 for last term, +1 for the degree (eg. degree 2 means 3 terms)
|
s_polynom polynom[nbr_of_exponents + 2]; // +1 for last term, +1 for the degree (eg. degree 2 means 3 terms)
|
||||||
polynom_g_err = polynom;
|
polynom_g_err = polynom;
|
||||||
polynom_fill_null(polynom, nbr_of_exponents + 2);
|
ft_bzero(polynom, sizeof(polynom));
|
||||||
degree = reduce(terms, polynom, max_exponent);
|
degree = reduce(terms, polynom, max_exponent);
|
||||||
print_debug("-> degree: %i\n\n", degree);
|
print_debug("-> degree: %i\n\n", degree);
|
||||||
|
|
||||||
|
|||||||
@@ -4,47 +4,56 @@
|
|||||||
|
|
||||||
const char *token_type_to_str(e_token_type enum_value)
|
const char *token_type_to_str(e_token_type enum_value)
|
||||||
{
|
{
|
||||||
if (enum_value > TOKEN_END || enum_value < TOKEN_VARIABLE)
|
if (enum_value == TOKEN_VARIABLE)
|
||||||
|
return "TOKEN_VARIABLE";
|
||||||
|
else if (enum_value == TOKEN_NUMBER_INT)
|
||||||
|
return "TOKEN_NUMBER_INT";
|
||||||
|
else if (enum_value == TOKEN_NUMBER_DOUBLE)
|
||||||
|
return "TOKEN_NUMBER_DOUBLE";
|
||||||
|
else if (enum_value == TOKEN_NUMBER_INT_SUPER)
|
||||||
|
return "TOKEN_NUMBER_INT_SUPER";
|
||||||
|
else if (enum_value == TOKEN_POWER)
|
||||||
|
return "TOKEN_POWER";
|
||||||
|
else if (enum_value == TOKEN_SIGN_PLUS)
|
||||||
|
return "TOKEN_SIGN_PLUS";
|
||||||
|
else if (enum_value == TOKEN_SIGN_MINUS)
|
||||||
|
return "TOKEN_SIGN_MINUS";
|
||||||
|
else if (enum_value == TOKEN_FACTOR_MULT)
|
||||||
|
return "TOKEN_FACTOR_MULT";
|
||||||
|
else if (enum_value == TOKEN_FACTOR_DIV)
|
||||||
|
return "TOKEN_FACTOR_DIV";
|
||||||
|
else if (enum_value == TOKEN_EQUAL)
|
||||||
|
return "TOKEN_EQUAL";
|
||||||
|
else if (enum_value == TOKEN_END)
|
||||||
|
return "TOKEN_END";
|
||||||
|
else
|
||||||
return "invalid enum value";
|
return "invalid enum value";
|
||||||
|
|
||||||
static const char *const token_type_str[TOKEN_END + 1] = {
|
|
||||||
[TOKEN_VARIABLE] = "TOKEN_VARIABLE",
|
|
||||||
[TOKEN_NUMBER_INT] = "TOKEN_NUMBER_INT",
|
|
||||||
[TOKEN_NUMBER_DOUBLE] = "TOKEN_NUMBER_DOUBLE",
|
|
||||||
[TOKEN_NUMBER_INT_SUPER] = "TOKEN_NUMBER_INT_SUPER",
|
|
||||||
[TOKEN_POWER] = "TOKEN_POWER",
|
|
||||||
[TOKEN_SIGN_PLUS] = "TOKEN_SIGN_PLUS",
|
|
||||||
[TOKEN_SIGN_MINUS] = "TOKEN_SIGN_MINUS",
|
|
||||||
[TOKEN_FACTOR_MULT] = "TOKEN_FACTOR_MULT",
|
|
||||||
[TOKEN_FACTOR_DIV] = "TOKEN_FACTOR_DIV",
|
|
||||||
[TOKEN_EQUAL] = "TOKEN_EQUAL",
|
|
||||||
[TOKEN_END] = "TOKEN_END"};
|
|
||||||
return token_type_str[enum_value];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *token_tag_to_str(e_token_tag enum_value)
|
const char *token_tag_to_str(e_token_tag enum_value)
|
||||||
{
|
{
|
||||||
if (enum_value > TOKEN_FACTOR || enum_value < TOKEN_NO_TAG)
|
if (enum_value == TOKEN_NO_TAG)
|
||||||
|
return "TOKEN_NO_TAG";
|
||||||
|
else if (enum_value == TOKEN_NUMBER)
|
||||||
|
return "TOKEN_NUMBER";
|
||||||
|
else if (enum_value == TOKEN_SIGN)
|
||||||
|
return "TOKEN_SIGN";
|
||||||
|
else if (enum_value == TOKEN_FACTOR)
|
||||||
|
return "TOKEN_FACTOR";
|
||||||
|
else
|
||||||
return "invalid enum value";
|
return "invalid enum value";
|
||||||
|
|
||||||
static const char *const token_tag_str[TOKEN_FACTOR + 1] = {
|
|
||||||
[TOKEN_NO_TAG] = "TOKEN_NO_TAG",
|
|
||||||
[TOKEN_NUMBER] = "TOKEN_NUMBER",
|
|
||||||
[TOKEN_SIGN] = "TOKEN_SIGN",
|
|
||||||
[TOKEN_FACTOR] = "TOKEN_FACTOR"};
|
|
||||||
return token_tag_str[enum_value];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *term_position_to_str(e_term_position enum_value)
|
const char *term_position_to_str(e_term_position enum_value)
|
||||||
{
|
{
|
||||||
if (enum_value > TERM_POS_END || enum_value < TERM_LEFT)
|
if (enum_value == TERM_LEFT)
|
||||||
|
return "TERM_LEFT";
|
||||||
|
else if (enum_value == TERM_RIGHT)
|
||||||
|
return "TERM_RIGHT";
|
||||||
|
else if (enum_value == TERM_POS_END)
|
||||||
|
return "TERM_POS_END";
|
||||||
|
else
|
||||||
return "invalid enum value";
|
return "invalid enum value";
|
||||||
|
|
||||||
static const char *const term_position_str[TERM_POS_END + 1] = {
|
|
||||||
[TERM_LEFT] = "TERM_LEFT",
|
|
||||||
[TERM_RIGHT] = "TERM_RIGHT",
|
|
||||||
[TERM_POS_END] = "TERM_POS_END"};
|
|
||||||
return term_position_str[enum_value];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *term_sign_to_str(e_term_sign enum_value)
|
const char *term_sign_to_str(e_term_sign enum_value)
|
||||||
|
|||||||
Reference in New Issue
Block a user