#ifndef FONCTION_HPP_INCLUDED
#define FONCTION_HPP_INCLUDED

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <map>
using namespace std;

/*
bool recursivite_direct_gauche(map<string, vector< vector<string> > > &, vector<string> &, vector<string> &);
bool recursivite_indirect_gauche(map<string, vector< vector<string> > > &grammaire, vector<string> &terminaux, vector<string> &non_terminaux);
void make_new_rulls(map<string, vector< vector<string> > > &grammaire, vector<string> &add, string &S, string A);
*/

bool lecture_Grammaire(map<string, vector< vector<string> > > &, vector<string> &, vector<string> &, string &);
void print_grammaire(map<string, vector< vector<string> > > &grammaire, vector<string> &terminaux, vector<string> &non_terminaux);
void recu_indirect(map<string, vector< vector<string> > > &grammaire, vector<string> &terminaux, vector<string> &non_terminaux, string state);
void recu_direct(map<string, vector< vector<string> > > &grammaire, vector<string> &terminaux, vector<string> &non_terminaux, string state);
void fact_gauche(map<string, vector< vector<string> > > &grammaire, vector<string> &terminaux, vector<string> &non_terminaux, string state);
bool is_in_b(string &a, vector<string> &b);
bool is_in_b(vector<string> &a, vector <vector<string> > &b);
bool is_in_b(vector<string> &a, vector<string> &b);
void desambigueur(string name);
void nettoyage_de_primptemp(map<string, vector< vector<string> > > &grammaire, vector<string> &terminaux, vector<string> &non_terminaux);

#endif // FONCTION_HPP_INCLUDED
