push
This commit is contained in:
65
srcs/srcs_asm/lexer/ft_automaton.c
Normal file
65
srcs/srcs_asm/lexer/ft_automaton.c
Normal file
@@ -0,0 +1,65 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* ft_automaton.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: jfleury <jfleury@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2019/06/06 14:48:26 by jfleury #+# #+# */
|
||||
/* Updated: 2019/07/16 14:30:23 by jfleury ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "asm.h"
|
||||
|
||||
static int ft_cal_i_string(int i_matrice, char *line, int *nb_char_token)
|
||||
{
|
||||
int i_string;
|
||||
|
||||
i_string = 0;
|
||||
if (line[*nb_char_token] == 0
|
||||
|| (i_matrice == 21 && line[*nb_char_token] != '\n'))
|
||||
i_string = 16;
|
||||
else
|
||||
while (!(ft_line_strchr(g_string_automaton[i_string],
|
||||
line[*nb_char_token])) && i_string < 15)
|
||||
i_string++;
|
||||
return (i_string);
|
||||
}
|
||||
|
||||
static int ft_end_error(int *nb_char_token, char *line)
|
||||
{
|
||||
g_nb_char = g_nb_char + *nb_char_token;
|
||||
ft_printf("error: syntax %d:%d char: %c\n",
|
||||
g_nb_line, g_nb_char + 1, line[*nb_char_token]);
|
||||
return (0);
|
||||
}
|
||||
|
||||
int ft_automaton(char *line, t_token *token, t_label *label,
|
||||
int *nb_char_token)
|
||||
{
|
||||
int i_matrice;
|
||||
int i_string;
|
||||
int type;
|
||||
|
||||
i_matrice = 0;
|
||||
while (1)
|
||||
{
|
||||
type = i_matrice;
|
||||
i_string = ft_cal_i_string(i_matrice, line, nb_char_token);
|
||||
i_matrice = g_matrice_automaton[i_matrice][i_string];
|
||||
if (i_matrice == -2 || i_matrice == -3)
|
||||
{
|
||||
if (i_matrice == -3)
|
||||
*nb_char_token = *nb_char_token - 1;
|
||||
g_nb_char = g_nb_char + *nb_char_token;
|
||||
ft_create_token_label(ft_create_string(line, *nb_char_token),
|
||||
type, token, label);
|
||||
return (1);
|
||||
}
|
||||
else if (i_matrice == -1)
|
||||
return (ft_end_error(nb_char_token, line));
|
||||
else
|
||||
*nb_char_token = *nb_char_token + 1;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user