diff --git a/Sujet.pdf b/Sujet.pdf index a7b1ad2d0dc8957c072be8539d1f9bcafbac0fe3..91b343c098fa8b5ffdb6a8055a32342e9d93248b 100644 Binary files a/Sujet.pdf and b/Sujet.pdf differ diff --git a/alpaga/README.md b/alpaga/README.md index 91c986064c3f370a07d11e224137a2a9f276132e..87f1e36f459b8424335528542d6b89b191c6d92e 100644 --- a/alpaga/README.md +++ b/alpaga/README.md @@ -82,13 +82,13 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire : accolades, qui sera copié au début du code source généré pour l'analyseur syntaxique. (en fait dans le squelette qui vous est fourni, ce bloc de code est déjà présent, et vous n'avez qu'à le remplir.) - + - après chaque règle 'X -> w1 w2 ... wn', ajoutez du code entre accolades qui construit le sous-arbre correspondant à la dérivation effectuée par cette règle. On appelle ce code une **action**. - + 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]) } @@ -100,22 +100,22 @@ arbre de syntaxe abstraite. Pour ce faire, vous avez deux choses à faire : 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, la variable $1 correspond à l'arbre rendu par le non-terminal GLOBDEF. - + Les définitions des arbres et nœuds sont trouvées dans le fichier src/ast.ml. - + 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> ''' - - ce qui créera le fichier <generated_parser.ml> à l'endroit où vous l'avez + + Cela créera le fichier <generated_parser.ml> à l'endroit où vous l'avez indiqué. - + En fait, les différents Makefile de ce projet font que vous n'aurez normalement pas à écrire cette commande à la main : un simple 'make test' à la racine de ce projet devrait faire tout ce dont vous avez besoin. diff --git a/expr_grammar_action.g b/expr_grammar_action.g index a54468cf984589bec121a874a728340df9fe29ba..52bbaf13f443e3a3a0b189366991a599eadd4159 100644 --- a/expr_grammar_action.g +++ b/expr_grammar_action.g @@ -5,11 +5,11 @@ tokens SYM_EQUALITY SYM_NOTEQ SYM_LT SYM_LEQ SYM_GT SYM_GEQ non-terminals S INSTR INSTRS LINSTRS ELSE EXPR FACTOR non-terminals LPARAMS REST_PARAMS non-terminals IDENTIFIER INTEGER -non-terminals GLOBDEF +non-terminals FUNDEF FUNDEFS non-terminals ADD_EXPRS ADD_EXPR non-terminals MUL_EXPRS MUL_EXPR non-terminals CMP_EXPRS CMP_EXPR -non-terminals REQ_EXPRS REQ_EXPR +non-terminals EQ_EXPRS EQ_EXPR axiom S { @@ -29,4 +29,4 @@ axiom S } rules -S -> GLOBDEF SYM_EOF { Node (Tlistglobdef, []) } +S -> FUNDEFS SYM_EOF { Node (Tlistglobdef, []) }