Bonjour à tous!
Je viens solliciter votre aide car j'ai un petit problème. Je m'explique. Je dois réaliser un mini compilateur dans le cadre d'un cours. J'ai écris la grammaire qui caractérise mon programme. Le fichier flex reconnait bien tous les lexèmes et les envoi bien à cup. Mon problème, c'est que je dois gérer les instructions conditionnelles. Voici les règles correspondant :
Le problème, c'est que CUP exécute d'abord la règle "if_then" ensuite "liste_instruction" et puis seulement le code correspondant à "instruction_cond". Etant donné qu'il s'agit d'une instruction conditionnelle, dans le cas où la condition est fausse il ne faut pas exécuter "liste_instructions". Donc je recherche une astuce qui permettrait à CUP d'ignorer des lexèmes ou de ne pas les exécuter.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 if_then::= IF PARENG expr_bool:e PAREND THEN {: parser.ifEnable = true; if((Boolean)e){ parser.instruction = true; } else{ parser.instruction = false; } :} ; instruction_cond::= if_then ACCOLG liste_instructions ACCOLD {: parser.instruction = false; parser.ifEnable = false; :} ;
Je vous remercie pour votre aide! J'ai déjà énormément cherché sur le net, mais je n'ai rien trouvé.
Partager