|
@@ -0,0 +1,31 @@
|
|
1
|
+# Générateur de parsers
|
|
2
|
+## Groupe
|
|
3
|
+* Léonie Gallois
|
|
4
|
+* Jean-Rémy Hok
|
|
5
|
+* Nabil Moukhlis
|
|
6
|
+* Yohan Simard
|
|
7
|
+* Elies Tali
|
|
8
|
+* Arnaud Vergnet
|
|
9
|
+
|
|
10
|
+## Pré-requis
|
|
11
|
+La compilation nécessite python3 et gcc.
|
|
12
|
+
|
|
13
|
+## Fonctionnement
|
|
14
|
+* Écrire la grammaire dans le fichier `grammar.txt`
|
|
15
|
+* Exécuter la commande `make`, qui générera l'exécutable `parser`
|
|
16
|
+* Exécuter le parser avec `./parser "le mot à parser"`
|
|
17
|
+* Si le parser affiche OK, le mot fait partie du langage, s'il affiche KO, il n'en fait pas partie.
|
|
18
|
+
|
|
19
|
+## Limitations
|
|
20
|
+Le parser ne backtrack pas, ce qui signifie que l'ordre des règles a une importance : si un non-terminal a été reconnu par une règle, on ne reviendra pas dessus, et donc les règles suivantes ne seront pas testées même en cas d'échec plus loin dans le mot.
|
|
21
|
+
|
|
22
|
+## Format de l'entrée
|
|
23
|
+La syntaxe de la **grammaire** est la suivante :
|
|
24
|
+- Une règle par ligne ;
|
|
25
|
+- Partie gauche separée de la partie droite par ":" ;
|
|
26
|
+- Les non-terminaux sont des mots avec un premier symbole correspondant à une majuscule ;
|
|
27
|
+- Les terminaux sont en minuscules ;
|
|
28
|
+- Les terminaux et non-terminaux sont separés par un espace dans la partie droite ;
|
|
29
|
+- L'axiome est le non-terminal de gauche de la première règle de la grammaire.
|
|
30
|
+
|
|
31
|
+Le **mot à parser** doit être fourni avec tous les terminaux concaténés avec un espace, et entre guillemets pour qu'il soit considéré comme un seul argument.
|