Source: https://www.univ-usto.dz/faculte/fac-mathinfo/Cours/Traitement_Langage2014.pdf