From 4c7b95cb32b8650e8b797eebbb46778e42541f2c Mon Sep 17 00:00:00 2001 From: Wilke Pierre <pierre.wilke@centralesupelec.fr> Date: Thu, 27 Feb 2020 00:32:04 +0100 Subject: [PATCH] Update README.md --- alpaga/README.md | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/alpaga/README.md b/alpaga/README.md index 91c9860..f3c29bc 100644 --- a/alpaga/README.md +++ b/alpaga/README.md @@ -6,10 +6,10 @@ Le format d'entrée (simple) est le suivant : Premièrement, on définit les terminaux du langage : -''' +``` tokens SYM_EOF SYM_IF SYM_IDENTIFIER<string> SYM_INTEGER<int> SYM_PLUS SYM_MINUS tokens SYM_ASTERISK SYM_DIV -''' +``` Les "SYM_XXX" correspondent aux symboles définis dans src/symbols.ml @@ -18,41 +18,44 @@ caractères ou un entier, n indique son type entre chevrons < et >. Ensuite, on définit les non-terminaux du langage : -''' + +``` non-terminals S EXPR TERM FACTOR non-terminals EXPRS TERMS -''' +``` Puis le non-terminal distingué qui sert d'axiome à la grammaire : -''' +``` axiom S -''' +``` Ensuite le mot clé 'rules' indique le début des règles de la grammaire -'''rules''' +``` +rules +``` Une règle est simplement de la forme 'N -> SYM_TRUC AUTRE_NON_TERMINAL SYM_MACHIN' Par exemple, -''' +``` S -> EXPR SYM_EOF EXPR -> TERM EXPRS EXPRS -> SYM_PLUS TERM EXPRS EXPRS -> SYM_MINUS TERM EXPRS EXPRS -> -''' +``` La dernière ligne de cette grammaire indique une règle qui produit le mot vide (Epsilon) pour le non-terminal EXPRS. Vous pouvez lancer ALPAGA avec la commande suivante : -''' +``` ./ml_parser_generator -g <votre_fichier_de_grammaire.g> -t <table.html> -''' +``` Cela va analyser votre grammaire et produire un fichier HTML, que vous pouvez ouvrir avec un navigateur web, et qui contient les tables Null, First et Follow @@ -90,7 +93,7 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire : Le code que vous écrivez correspond donc à la construction d'un terme OCaml. Par exemple, le morceau suivant vous est fourni : - ''' + ``` S -> GLOBDEF SYM_EOF { Node (Tlistglobdef, [$1]) } IDENTIFIER -> SYM_IDENTIFIER { StringLeaf ($1) } INTEGER -> SYM_INTEGER { IntLeaf ($1) } @@ -99,7 +102,7 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire : let instr = $5 in Node (Tfundef, [$1; Node (Tfunargs, fargs) ; instr ]) } - ''' + ``` Pour une règle X -> w1 w2 ... wn, les variables $i correspondent aux actions générées par le symbole wi. Par exemple, dans l'action de la première règle, @@ -109,9 +112,9 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire : Ces actions vont servir à générer le parser, ce qui se fera avec la commande : - ''' -./ml_parser_generator -g <votre_fichier_de_grammaire.g> -t <table.html> -pml <generated_parser.ml> - ''' + ``` + ./ml_parser_generator -g <votre_fichier_de_grammaire.g> -t <table.html> -pml <generated_parser.ml> + ``` ce qui créera le fichier <generated_parser.ml> à l'endroit où vous l'avez indiqué. -- GitLab