/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* lm_parser.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: mndhlovu +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/04/20 15:24:51 by mndhlovu #+# #+# */ /* Updated: 2019/05/02 11:18:42 by mndhlovu ### ########.fr */ /* */ /* ************************************************************************** */ #include "lem_in.h" static void lm_locate_cd(int index, t_syntax *synt, char *line) { char *tmp; tmp = ft_strchr(line, '#'); if ((!synt->s_cmd || !synt->e_cmd) && (tmp != NULL && line[1] == '#' && lm_check_forbiden_chars(line, 1))) { if (!synt->s_cmd) { if (ft_strcmp(line, "##start") == 0) { synt->s_cmd = 1; synt->s_pos = index; } } if (!synt->e_cmd) { if (ft_strcmp(line, "##end") == 0) { synt->e_cmd = 1; synt->e_pos = index; } } } } static int lm_get_ant_(int counter, t_lmdata *ldata , t_syntax *synt, char *line) { int value; if (counter == 0 && lm_check_forbiden_chars(line, 0)) { value = lm_get_value(line); if (value > 0) { ldata->nbants = value; synt->nb_state = 1; return (1); } free(line); } return (0); } static int lm_get_vertices(int count, t_lmdata *data , t_syntax *syntax, t_holder *holder, char *line) { lm_get_cmd_vertices(count, syntax, data, line); if (!syntax->s_error && !syntax->e_error) { lm_get_vert_link(count, data, syntax, holder, line); if (!syntax->v_error && !syntax->l_error) return (1); } return (0); } int lm_parser(t_syntax *synt , t_lmdata *ldata, t_holder *holder) { char *raw; int index; index = 0; while (ft_getline(&raw) > 0 && raw[0] != '\0') { if ((add_line_map(ldata, raw))) return (0); if (!(lm_get_ant_(index, ldata, synt, raw)) && index == 0) return (0); lm_locate_cd(index, synt, raw); if (!(lm_get_vertices(index, ldata, synt, holder, raw))) return (0); index++; } ft_strdel(&raw); return (1); }