Browse Source

Expression arithmetique OK+if OK

Foussats Morgane 7 months ago
parent
commit
f6d265e641
9 changed files with 639 additions and 395 deletions
  1. BIN
      a.out
  2. 216
    181
      analyse_syntaxique.output
  3. 206
    178
      analyse_syntaxique.tab.c
  4. 35
    16
      analyse_syntaxique.y
  5. 139
    0
      gen_assembleur.c
  6. 26
    7
      gen_assembleur.h
  7. 6
    3
      script.sh
  8. 5
    6
      table_symboles.c
  9. 6
    4
      table_symboles.h

BIN
a.out View File


+ 216
- 181
analyse_syntaxique.output View File

@@ -59,28 +59,34 @@ Grammaire
59 59
    35 SuiteArgs: tVIRGULE tVAR SuiteArgs
60 60
    36          | %empty
61 61
 
62
-   37 If: tIF tPO Cond tPF tAO Instructions tAF Else
62
+   37 $@1: %empty
63 63
 
64
-   38 Else: tELSE tAO Instructions tAF
65
-   39     | tELSE tIF tPO Cond tPF tAO Instructions tAF Else
64
+   38 $@2: %empty
66 65
 
67
-   40 While: tWHILE tPO Cond tPF tAO Instructions tAF
66
+   39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF $@2 Else
68 67
 
69
-   41 Cond: E tEGAL E
70
-   42     | E tDIFF E
71
-   43     | E tLT E
72
-   44     | E tGT E
73
-   45     | E tLTE E
74
-   46     | E tGTE E
75
-   47     | E tAND Cond
76
-   48     | E tOR Cond
77
-   49     | tNOT Cond
68
+   40 Else: tELSE tAO Instructions tAF
69
+   41     | %empty
70
+   42     | tELSE tIF tPO Cond tPF tAO Instructions tAF Else
78 71
 
79
-   50 Invocation: tVAR tPO Args tPF
72
+   43 While: tWHILE tPO Cond tPF tAO Instructions tAF
80 73
 
81
-   51 Print: tPRINT tPO tVAR tPF tPV
74
+   44 Cond: E tEGAL E
75
+   45     | E tDIFF E
76
+   46     | E tLT E
77
+   47     | E tGT E
78
+   48     | E tLTE E
79
+   49     | E tGTE E
80
+   50     | E tAND Cond
81
+   51     | E tOR Cond
82
+   52     | tNOT Cond
83
+   53     | E
82 84
 
83
-   52 Return: tRETURN E tPV
85
+   54 Invocation: tVAR tPO Args tPF
86
+
87
+   55 Print: tPRINT tPO tVAR tPF tPV
88
+
89
+   56 Return: tRETURN E tPV
84 90
 
85 91
 
86 92
 Terminaux, suivis des règles où ils apparaissent
@@ -93,32 +99,32 @@ tADD (260) 26
93 99
 tSUB (261) 28 30
94 100
 tMUL (262) 27
95 101
 tDIV (263) 29
96
-tPO (264) 1 32 37 39 40 50 51
97
-tPF (265) 1 32 37 39 40 50 51
98
-tAO (266) 7 37 38 39 40
99
-tAF (267) 7 37 38 39 40
102
+tPO (264) 1 32 39 42 43 54 55
103
+tPF (265) 1 32 39 42 43 54 55
104
+tAO (266) 7 39 40 42 43
105
+tAF (267) 7 39 40 42 43
100 106
 tERROR (268)
101
-tPV (269) 5 15 16 23 51 52
107
+tPV (269) 5 15 16 23 55 56
102 108
 tVIRGULE (270) 5 17 35
103 109
 tAFFECTATION (271) 21 23
104
-tEGAL (272) 41
105
-tDIFF (273) 42
106
-tLT (274) 43
107
-tGT (275) 44
108
-tGTE (276) 46
109
-tLTE (277) 45
110
+tEGAL (272) 44
111
+tDIFF (273) 45
112
+tLT (274) 46
113
+tGT (275) 47
114
+tGTE (276) 49
115
+tLTE (277) 48
110 116
 tMAIN (278) 1
111 117
 tINT (279) 1 4 19 20
112
-tPRINT (280) 51
113
-tRETURN (281) 52
114
-tOR (282) 48
115
-tAND (283) 47
116
-tIF (284) 37 39
117
-tELSE (285) 38 39
118
-tWHILE (286) 40
118
+tPRINT (280) 55
119
+tRETURN (281) 56
120
+tOR (282) 51
121
+tAND (283) 50
122
+tIF (284) 39 42
123
+tELSE (285) 40 42
124
+tWHILE (286) 43
119 125
 tCONST (287) 20
120
-tVAR (288) 4 21 22 23 25 33 35 50 51
121
-tNOT (289) 49
126
+tVAR (288) 4 21 22 23 25 33 35 54 55
127
+tNOT (289) 52
122 128
 
123 129
 
124 130
 Non-terminaux, suivis des règles où ils apparaissent
@@ -136,7 +142,7 @@ SuiteParams (39)
136 142
 Body (40)
137 143
     à gauche: 7, à droite: 1
138 144
 Instructions (41)
139
-    à gauche: 8 9, à droite: 7 8 37 38 39 40
145
+    à gauche: 8 9, à droite: 7 8 39 40 42 43
140 146
 Instruction (42)
141 147
     à gauche: 10 11 12 13 14 15, à droite: 8
142 148
 Decl (43)
@@ -151,26 +157,30 @@ Aff (47)
151 157
     à gauche: 23, à droite: 10
152 158
 E (48)
153 159
     à gauche: 24 25 26 27 28 29 30 31 32, à droite: 21 23 26 27 28
154
-    29 30 32 41 42 43 44 45 46 47 48 52
160
+    29 30 32 44 45 46 47 48 49 50 51 53 56
155 161
 Args (49)
156
-    à gauche: 33 34, à droite: 50
162
+    à gauche: 33 34, à droite: 54
157 163
 SuiteArgs (50)
158 164
     à gauche: 35 36, à droite: 33 35
159 165
 If (51)
160
-    à gauche: 37, à droite: 11
161
-Else (52)
162
-    à gauche: 38 39, à droite: 37 39
163
-While (53)
164
-    à gauche: 40, à droite: 12
165
-Cond (54)
166
-    à gauche: 41 42 43 44 45 46 47 48 49, à droite: 37 39 40 47 48
167
-    49
168
-Invocation (55)
169
-    à gauche: 50, à droite: 15 31
170
-Print (56)
171
-    à gauche: 51, à droite: 13
172
-Return (57)
173
-    à gauche: 52, à droite: 7
166
+    à gauche: 39, à droite: 11
167
+$@1 (52)
168
+    à gauche: 37, à droite: 39
169
+$@2 (53)
170
+    à gauche: 38, à droite: 39
171
+Else (54)
172
+    à gauche: 40 41 42, à droite: 39 42
173
+While (55)
174
+    à gauche: 43, à droite: 12
175
+Cond (56)
176
+    à gauche: 44 45 46 47 48 49 50 51 52 53, à droite: 39 42 43 50
177
+    51 52
178
+Invocation (57)
179
+    à gauche: 54, à droite: 15 31
180
+Print (58)
181
+    à gauche: 55, à droite: 13
182
+Return (59)
183
+    à gauche: 56, à droite: 7
174 184
 
175 185
 
176 186
 État 0
@@ -330,21 +340,21 @@ Return (57)
330 340
 
331 341
 État 17
332 342
 
333
-   51 Print: tPRINT . tPO tVAR tPF tPV
343
+   55 Print: tPRINT . tPO tVAR tPF tPV
334 344
 
335 345
     tPO  décalage et aller à l'état 32
336 346
 
337 347
 
338 348
 État 18
339 349
 
340
-   37 If: tIF . tPO Cond tPF tAO Instructions tAF Else
350
+   39 If: tIF . tPO Cond tPF $@1 tAO Instructions tAF $@2 Else
341 351
 
342 352
     tPO  décalage et aller à l'état 33
343 353
 
344 354
 
345 355
 État 19
346 356
 
347
-   40 While: tWHILE . tPO Cond tPF tAO Instructions tAF
357
+   43 While: tWHILE . tPO Cond tPF tAO Instructions tAF
348 358
 
349 359
     tPO  décalage et aller à l'état 34
350 360
 
@@ -359,7 +369,7 @@ Return (57)
359 369
 État 21
360 370
 
361 371
    23 Aff: tVAR . tAFFECTATION E tPV
362
-   50 Invocation: tVAR . tPO Args tPF
372
+   54 Invocation: tVAR . tPO Args tPF
363 373
 
364 374
     tPO           décalage et aller à l'état 36
365 375
     tAFFECTATION  décalage et aller à l'état 37
@@ -458,14 +468,14 @@ Return (57)
458 468
 
459 469
 État 32
460 470
 
461
-   51 Print: tPRINT tPO . tVAR tPF tPV
471
+   55 Print: tPRINT tPO . tVAR tPF tPV
462 472
 
463 473
     tVAR  décalage et aller à l'état 45
464 474
 
465 475
 
466 476
 État 33
467 477
 
468
-   37 If: tIF tPO . Cond tPF tAO Instructions tAF Else
478
+   39 If: tIF tPO . Cond tPF $@1 tAO Instructions tAF $@2 Else
469 479
 
470 480
     tENTIER  décalage et aller à l'état 46
471 481
     tSUB     décalage et aller à l'état 47
@@ -480,7 +490,7 @@ Return (57)
480 490
 
481 491
 État 34
482 492
 
483
-   40 While: tWHILE tPO . Cond tPF tAO Instructions tAF
493
+   43 While: tWHILE tPO . Cond tPF tAO Instructions tAF
484 494
 
485 495
     tENTIER  décalage et aller à l'état 46
486 496
     tSUB     décalage et aller à l'état 47
@@ -502,7 +512,7 @@ Return (57)
502 512
 
503 513
 État 36
504 514
 
505
-   50 Invocation: tVAR tPO . Args tPF
515
+   54 Invocation: tVAR tPO . Args tPF
506 516
 
507 517
     tVAR  décalage et aller à l'état 55
508 518
 
@@ -526,7 +536,7 @@ Return (57)
526 536
 
527 537
 État 38
528 538
 
529
-   52 Return: tRETURN . E tPV
539
+   56 Return: tRETURN . E tPV
530 540
 
531 541
     tENTIER  décalage et aller à l'état 46
532 542
     tSUB     décalage et aller à l'état 47
@@ -588,7 +598,7 @@ Return (57)
588 598
 
589 599
 État 45
590 600
 
591
-   51 Print: tPRINT tPO tVAR . tPF tPV
601
+   55 Print: tPRINT tPO tVAR . tPF tPV
592 602
 
593 603
     tPF  décalage et aller à l'état 63
594 604
 
@@ -629,7 +639,7 @@ Return (57)
629 639
 État 49
630 640
 
631 641
    25 E: tVAR .
632
-   50 Invocation: tVAR . tPO Args tPF
642
+   54 Invocation: tVAR . tPO Args tPF
633 643
 
634 644
     tPO  décalage et aller à l'état 36
635 645
 
@@ -638,7 +648,7 @@ Return (57)
638 648
 
639 649
 État 50
640 650
 
641
-   49 Cond: tNOT . Cond
651
+   52 Cond: tNOT . Cond
642 652
 
643 653
     tENTIER  décalage et aller à l'état 46
644 654
     tSUB     décalage et aller à l'état 47
@@ -657,14 +667,15 @@ Return (57)
657 667
    27  | E . tMUL E
658 668
    28  | E . tSUB E
659 669
    29  | E . tDIV E
660
-   41 Cond: E . tEGAL E
661
-   42     | E . tDIFF E
662
-   43     | E . tLT E
663
-   44     | E . tGT E
664
-   45     | E . tLTE E
665
-   46     | E . tGTE E
666
-   47     | E . tAND Cond
667
-   48     | E . tOR Cond
670
+   44 Cond: E . tEGAL E
671
+   45     | E . tDIFF E
672
+   46     | E . tLT E
673
+   47     | E . tGT E
674
+   48     | E . tLTE E
675
+   49     | E . tGTE E
676
+   50     | E . tAND Cond
677
+   51     | E . tOR Cond
678
+   53     | E .
668 679
 
669 680
     tADD   décalage et aller à l'état 67
670 681
     tSUB   décalage et aller à l'état 68
@@ -679,10 +690,12 @@ Return (57)
679 690
     tOR    décalage et aller à l'état 77
680 691
     tAND   décalage et aller à l'état 78
681 692
 
693
+    $défaut  réduction par utilisation de la règle 53 (Cond)
694
+
682 695
 
683 696
 État 52
684 697
 
685
-   37 If: tIF tPO Cond . tPF tAO Instructions tAF Else
698
+   39 If: tIF tPO Cond . tPF $@1 tAO Instructions tAF $@2 Else
686 699
 
687 700
     tPF  décalage et aller à l'état 79
688 701
 
@@ -696,7 +709,7 @@ Return (57)
696 709
 
697 710
 État 54
698 711
 
699
-   40 While: tWHILE tPO Cond . tPF tAO Instructions tAF
712
+   43 While: tWHILE tPO Cond . tPF tAO Instructions tAF
700 713
 
701 714
     tPF  décalage et aller à l'état 80
702 715
 
@@ -714,7 +727,7 @@ Return (57)
714 727
 
715 728
 État 56
716 729
 
717
-   50 Invocation: tVAR tPO Args . tPF
730
+   54 Invocation: tVAR tPO Args . tPF
718 731
 
719 732
     tPF  décalage et aller à l'état 83
720 733
 
@@ -740,7 +753,7 @@ Return (57)
740 753
    27  | E . tMUL E
741 754
    28  | E . tSUB E
742 755
    29  | E . tDIV E
743
-   52 Return: tRETURN E . tPV
756
+   56 Return: tRETURN E . tPV
744 757
 
745 758
     tADD  décalage et aller à l'état 67
746 759
     tSUB  décalage et aller à l'état 68
@@ -787,7 +800,7 @@ Return (57)
787 800
 
788 801
 État 63
789 802
 
790
-   51 Print: tPRINT tPO tVAR tPF . tPV
803
+   55 Print: tPRINT tPO tVAR tPF . tPV
791 804
 
792 805
     tPV  décalage et aller à l'état 89
793 806
 
@@ -823,9 +836,9 @@ Return (57)
823 836
 
824 837
 État 66
825 838
 
826
-   49 Cond: tNOT Cond .
839
+   52 Cond: tNOT Cond .
827 840
 
828
-    $défaut  réduction par utilisation de la règle 49 (Cond)
841
+    $défaut  réduction par utilisation de la règle 52 (Cond)
829 842
 
830 843
 
831 844
 État 67
@@ -882,7 +895,7 @@ Return (57)
882 895
 
883 896
 État 71
884 897
 
885
-   41 Cond: E tEGAL . E
898
+   44 Cond: E tEGAL . E
886 899
 
887 900
     tENTIER  décalage et aller à l'état 46
888 901
     tSUB     décalage et aller à l'état 47
@@ -895,7 +908,7 @@ Return (57)
895 908
 
896 909
 État 72
897 910
 
898
-   42 Cond: E tDIFF . E
911
+   45 Cond: E tDIFF . E
899 912
 
900 913
     tENTIER  décalage et aller à l'état 46
901 914
     tSUB     décalage et aller à l'état 47
@@ -908,7 +921,7 @@ Return (57)
908 921
 
909 922
 État 73
910 923
 
911
-   43 Cond: E tLT . E
924
+   46 Cond: E tLT . E
912 925
 
913 926
     tENTIER  décalage et aller à l'état 46
914 927
     tSUB     décalage et aller à l'état 47
@@ -921,7 +934,7 @@ Return (57)
921 934
 
922 935
 État 74
923 936
 
924
-   44 Cond: E tGT . E
937
+   47 Cond: E tGT . E
925 938
 
926 939
     tENTIER  décalage et aller à l'état 46
927 940
     tSUB     décalage et aller à l'état 47
@@ -934,7 +947,7 @@ Return (57)
934 947
 
935 948
 État 75
936 949
 
937
-   46 Cond: E tGTE . E
950
+   49 Cond: E tGTE . E
938 951
 
939 952
     tENTIER  décalage et aller à l'état 46
940 953
     tSUB     décalage et aller à l'état 47
@@ -947,7 +960,7 @@ Return (57)
947 960
 
948 961
 État 76
949 962
 
950
-   45 Cond: E tLTE . E
963
+   48 Cond: E tLTE . E
951 964
 
952 965
     tENTIER  décalage et aller à l'état 46
953 966
     tSUB     décalage et aller à l'état 47
@@ -960,7 +973,7 @@ Return (57)
960 973
 
961 974
 État 77
962 975
 
963
-   48 Cond: E tOR . Cond
976
+   51 Cond: E tOR . Cond
964 977
 
965 978
     tENTIER  décalage et aller à l'état 46
966 979
     tSUB     décalage et aller à l'état 47
@@ -975,7 +988,7 @@ Return (57)
975 988
 
976 989
 État 78
977 990
 
978
-   47 Cond: E tAND . Cond
991
+   50 Cond: E tAND . Cond
979 992
 
980 993
     tENTIER  décalage et aller à l'état 46
981 994
     tSUB     décalage et aller à l'état 47
@@ -990,14 +1003,16 @@ Return (57)
990 1003
 
991 1004
 État 79
992 1005
 
993
-   37 If: tIF tPO Cond tPF . tAO Instructions tAF Else
1006
+   39 If: tIF tPO Cond tPF . $@1 tAO Instructions tAF $@2 Else
1007
+
1008
+    $défaut  réduction par utilisation de la règle 37 ($@1)
994 1009
 
995
-    tAO  décalage et aller à l'état 103
1010
+    $@1  aller à l'état 103
996 1011
 
997 1012
 
998 1013
 État 80
999 1014
 
1000
-   40 While: tWHILE tPO Cond tPF . tAO Instructions tAF
1015
+   43 While: tWHILE tPO Cond tPF . tAO Instructions tAF
1001 1016
 
1002 1017
     tAO  décalage et aller à l'état 104
1003 1018
 
@@ -1018,9 +1033,9 @@ Return (57)
1018 1033
 
1019 1034
 État 83
1020 1035
 
1021
-   50 Invocation: tVAR tPO Args tPF .
1036
+   54 Invocation: tVAR tPO Args tPF .
1022 1037
 
1023
-    $défaut  réduction par utilisation de la règle 50 (Invocation)
1038
+    $défaut  réduction par utilisation de la règle 54 (Invocation)
1024 1039
 
1025 1040
 
1026 1041
 État 84
@@ -1032,9 +1047,9 @@ Return (57)
1032 1047
 
1033 1048
 État 85
1034 1049
 
1035
-   52 Return: tRETURN E tPV .
1050
+   56 Return: tRETURN E tPV .
1036 1051
 
1037
-    $défaut  réduction par utilisation de la règle 52 (Return)
1052
+    $défaut  réduction par utilisation de la règle 56 (Return)
1038 1053
 
1039 1054
 
1040 1055
 État 86
@@ -1073,9 +1088,9 @@ Return (57)
1073 1088
 
1074 1089
 État 89
1075 1090
 
1076
-   51 Print: tPRINT tPO tVAR tPF tPV .
1091
+   55 Print: tPRINT tPO tVAR tPF tPV .
1077 1092
 
1078
-    $défaut  réduction par utilisation de la règle 51 (Print)
1093
+    $défaut  réduction par utilisation de la règle 55 (Print)
1079 1094
 
1080 1095
 
1081 1096
 État 90
@@ -1144,14 +1159,14 @@ Return (57)
1144 1159
    27  | E . tMUL E
1145 1160
    28  | E . tSUB E
1146 1161
    29  | E . tDIV E
1147
-   41 Cond: E tEGAL E .
1162
+   44 Cond: E tEGAL E .
1148 1163
 
1149 1164
     tADD  décalage et aller à l'état 67
1150 1165
     tSUB  décalage et aller à l'état 68
1151 1166
     tMUL  décalage et aller à l'état 69
1152 1167
     tDIV  décalage et aller à l'état 70
1153 1168
 
1154
-    $défaut  réduction par utilisation de la règle 41 (Cond)
1169
+    $défaut  réduction par utilisation de la règle 44 (Cond)
1155 1170
 
1156 1171
 
1157 1172
 État 96
@@ -1160,14 +1175,14 @@ Return (57)
1160 1175
    27  | E . tMUL E
1161 1176
    28  | E . tSUB E
1162 1177
    29  | E . tDIV E
1163
-   42 Cond: E tDIFF E .
1178
+   45 Cond: E tDIFF E .
1164 1179
 
1165 1180
     tADD  décalage et aller à l'état 67
1166 1181
     tSUB  décalage et aller à l'état 68
1167 1182
     tMUL  décalage et aller à l'état 69
1168 1183
     tDIV  décalage et aller à l'état 70
1169 1184
 
1170
-    $défaut  réduction par utilisation de la règle 42 (Cond)
1185
+    $défaut  réduction par utilisation de la règle 45 (Cond)
1171 1186
 
1172 1187
 
1173 1188
 État 97
@@ -1176,14 +1191,14 @@ Return (57)
1176 1191
    27  | E . tMUL E
1177 1192
    28  | E . tSUB E
1178 1193
    29  | E . tDIV E
1179
-   43 Cond: E tLT E .
1194
+   46 Cond: E tLT E .
1180 1195
 
1181 1196
     tADD  décalage et aller à l'état 67
1182 1197
     tSUB  décalage et aller à l'état 68
1183 1198
     tMUL  décalage et aller à l'état 69
1184 1199
     tDIV  décalage et aller à l'état 70
1185 1200
 
1186
-    $défaut  réduction par utilisation de la règle 43 (Cond)
1201
+    $défaut  réduction par utilisation de la règle 46 (Cond)
1187 1202
 
1188 1203
 
1189 1204
 État 98
@@ -1192,14 +1207,14 @@ Return (57)
1192 1207
    27  | E . tMUL E
1193 1208
    28  | E . tSUB E
1194 1209
    29  | E . tDIV E
1195
-   44 Cond: E tGT E .
1210
+   47 Cond: E tGT E .
1196 1211
 
1197 1212
     tADD  décalage et aller à l'état 67
1198 1213
     tSUB  décalage et aller à l'état 68
1199 1214
     tMUL  décalage et aller à l'état 69
1200 1215
     tDIV  décalage et aller à l'état 70
1201 1216
 
1202
-    $défaut  réduction par utilisation de la règle 44 (Cond)
1217
+    $défaut  réduction par utilisation de la règle 47 (Cond)
1203 1218
 
1204 1219
 
1205 1220
 État 99
@@ -1208,14 +1223,14 @@ Return (57)
1208 1223
    27  | E . tMUL E
1209 1224
    28  | E . tSUB E
1210 1225
    29  | E . tDIV E
1211
-   46 Cond: E tGTE E .
1226
+   49 Cond: E tGTE E .
1212 1227
 
1213 1228
     tADD  décalage et aller à l'état 67
1214 1229
     tSUB  décalage et aller à l'état 68
1215 1230
     tMUL  décalage et aller à l'état 69
1216 1231
     tDIV  décalage et aller à l'état 70
1217 1232
 
1218
-    $défaut  réduction par utilisation de la règle 46 (Cond)
1233
+    $défaut  réduction par utilisation de la règle 49 (Cond)
1219 1234
 
1220 1235
 
1221 1236
 État 100
@@ -1224,57 +1239,40 @@ Return (57)
1224 1239
    27  | E . tMUL E
1225 1240
    28  | E . tSUB E
1226 1241
    29  | E . tDIV E
1227
-   45 Cond: E tLTE E .
1242
+   48 Cond: E tLTE E .
1228 1243
 
1229 1244
     tADD  décalage et aller à l'état 67
1230 1245
     tSUB  décalage et aller à l'état 68
1231 1246
     tMUL  décalage et aller à l'état 69
1232 1247
     tDIV  décalage et aller à l'état 70
1233 1248
 
1234
-    $défaut  réduction par utilisation de la règle 45 (Cond)
1249
+    $défaut  réduction par utilisation de la règle 48 (Cond)
1235 1250
 
1236 1251
 
1237 1252
 État 101
1238 1253
 
1239
-   48 Cond: E tOR Cond .
1254
+   51 Cond: E tOR Cond .
1240 1255
 
1241
-    $défaut  réduction par utilisation de la règle 48 (Cond)
1256
+    $défaut  réduction par utilisation de la règle 51 (Cond)
1242 1257
 
1243 1258
 
1244 1259
 État 102
1245 1260
 
1246
-   47 Cond: E tAND Cond .
1261
+   50 Cond: E tAND Cond .
1247 1262
 
1248
-    $défaut  réduction par utilisation de la règle 47 (Cond)
1263
+    $défaut  réduction par utilisation de la règle 50 (Cond)
1249 1264
 
1250 1265
 
1251 1266
 État 103
1252 1267
 
1253
-   37 If: tIF tPO Cond tPF tAO . Instructions tAF Else
1254
-
1255
-    tINT    décalage et aller à l'état 16
1256
-    tPRINT  décalage et aller à l'état 17
1257
-    tIF     décalage et aller à l'état 18
1258
-    tWHILE  décalage et aller à l'état 19
1259
-    tCONST  décalage et aller à l'état 20
1260
-    tVAR    décalage et aller à l'état 21
1261
-
1262
-    $défaut  réduction par utilisation de la règle 9 (Instructions)
1268
+   39 If: tIF tPO Cond tPF $@1 . tAO Instructions tAF $@2 Else
1263 1269
 
1264
-    Instructions  aller à l'état 107
1265
-    Instruction   aller à l'état 23
1266
-    Decl          aller à l'état 24
1267
-    Type          aller à l'état 25
1268
-    Aff           aller à l'état 26
1269
-    If            aller à l'état 27
1270
-    While         aller à l'état 28
1271
-    Invocation    aller à l'état 29
1272
-    Print         aller à l'état 30
1270
+    tAO  décalage et aller à l'état 107
1273 1271
 
1274 1272
 
1275 1273
 État 104
1276 1274
 
1277
-   40 While: tWHILE tPO Cond tPF tAO . Instructions tAF
1275
+   43 While: tWHILE tPO Cond tPF tAO . Instructions tAF
1278 1276
 
1279 1277
     tINT    décalage et aller à l'état 16
1280 1278
     tPRINT  décalage et aller à l'état 17
@@ -1316,14 +1314,31 @@ Return (57)
1316 1314
 
1317 1315
 État 107
1318 1316
 
1319
-   37 If: tIF tPO Cond tPF tAO Instructions . tAF Else
1317
+   39 If: tIF tPO Cond tPF $@1 tAO . Instructions tAF $@2 Else
1320 1318
 
1321
-    tAF  décalage et aller à l'état 110
1319
+    tINT    décalage et aller à l'état 16
1320
+    tPRINT  décalage et aller à l'état 17
1321
+    tIF     décalage et aller à l'état 18
1322
+    tWHILE  décalage et aller à l'état 19
1323
+    tCONST  décalage et aller à l'état 20
1324
+    tVAR    décalage et aller à l'état 21
1325
+
1326
+    $défaut  réduction par utilisation de la règle 9 (Instructions)
1327
+
1328
+    Instructions  aller à l'état 110
1329
+    Instruction   aller à l'état 23
1330
+    Decl          aller à l'état 24
1331
+    Type          aller à l'état 25
1332
+    Aff           aller à l'état 26
1333
+    If            aller à l'état 27
1334
+    While         aller à l'état 28
1335
+    Invocation    aller à l'état 29
1336
+    Print         aller à l'état 30
1322 1337
 
1323 1338
 
1324 1339
 État 108
1325 1340
 
1326
-   40 While: tWHILE tPO Cond tPF tAO Instructions . tAF
1341
+   43 While: tWHILE tPO Cond tPF tAO Instructions . tAF
1327 1342
 
1328 1343
     tAF  décalage et aller à l'état 111
1329 1344
 
@@ -1337,39 +1352,57 @@ Return (57)
1337 1352
 
1338 1353
 État 110
1339 1354
 
1340
-   37 If: tIF tPO Cond tPF tAO Instructions tAF . Else
1341
-
1342
-    tELSE  décalage et aller à l'état 112
1355
+   39 If: tIF tPO Cond tPF $@1 tAO Instructions . tAF $@2 Else
1343 1356
 
1344
-    Else  aller à l'état 113
1357
+    tAF  décalage et aller à l'état 112
1345 1358
 
1346 1359
 
1347 1360
 État 111
1348 1361
 
1349
-   40 While: tWHILE tPO Cond tPF tAO Instructions tAF .
1362
+   43 While: tWHILE tPO Cond tPF tAO Instructions tAF .
1350 1363
 
1351
-    $défaut  réduction par utilisation de la règle 40 (While)
1364
+    $défaut  réduction par utilisation de la règle 43 (While)
1352 1365
 
1353 1366
 
1354 1367
 État 112
1355 1368
 
1356
-   38 Else: tELSE . tAO Instructions tAF
1357
-   39     | tELSE . tIF tPO Cond tPF tAO Instructions tAF Else
1369
+   39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF . $@2 Else
1358 1370
 
1359
-    tAO  décalage et aller à l'état 114
1360
-    tIF  décalage et aller à l'état 115
1371
+    $défaut  réduction par utilisation de la règle 38 ($@2)
1372
+
1373
+    $@2  aller à l'état 113
1361 1374
 
1362 1375
 
1363 1376
 État 113
1364 1377
 
1365
-   37 If: tIF tPO Cond tPF tAO Instructions tAF Else .
1378
+   39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF $@2 . Else
1379
+
1380
+    tELSE  décalage et aller à l'état 114
1366 1381
 
1367
-    $défaut  réduction par utilisation de la règle 37 (If)
1382
+    $défaut  réduction par utilisation de la règle 41 (Else)
1383
+
1384
+    Else  aller à l'état 115
1368 1385
 
1369 1386
 
1370 1387
 État 114
1371 1388
 
1372
-   38 Else: tELSE tAO . Instructions tAF
1389
+   40 Else: tELSE . tAO Instructions tAF
1390
+   42     | tELSE . tIF tPO Cond tPF tAO Instructions tAF Else
1391
+
1392
+    tAO  décalage et aller à l'état 116
1393
+    tIF  décalage et aller à l'état 117
1394
+
1395
+
1396
+État 115
1397
+
1398
+   39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF $@2 Else .
1399
+
1400
+    $défaut  réduction par utilisation de la règle 39 (If)
1401
+
1402
+
1403
+État 116
1404
+
1405
+   40 Else: tELSE tAO . Instructions tAF
1373 1406
 
1374 1407
     tINT    décalage et aller à l'état 16
1375 1408
     tPRINT  décalage et aller à l'état 17
@@ -1380,7 +1413,7 @@ Return (57)
1380 1413
 
1381 1414
     $défaut  réduction par utilisation de la règle 9 (Instructions)
1382 1415
 
1383
-    Instructions  aller à l'état 116
1416
+    Instructions  aller à l'état 118
1384 1417
     Instruction   aller à l'état 23
1385 1418
     Decl          aller à l'état 24
1386 1419
     Type          aller à l'état 25
@@ -1391,23 +1424,23 @@ Return (57)
1391 1424
     Print         aller à l'état 30
1392 1425
 
1393 1426
 
1394
-État 115
1427
+État 117
1395 1428
 
1396
-   39 Else: tELSE tIF . tPO Cond tPF tAO Instructions tAF Else
1429
+   42 Else: tELSE tIF . tPO Cond tPF tAO Instructions tAF Else
1397 1430
 
1398
-    tPO  décalage et aller à l'état 117
1431
+    tPO  décalage et aller à l'état 119
1399 1432
 
1400 1433
 
1401
-État 116
1434
+État 118
1402 1435
 
1403
-   38 Else: tELSE tAO Instructions . tAF
1436
+   40 Else: tELSE tAO Instructions . tAF
1404 1437
 
1405
-    tAF  décalage et aller à l'état 118
1438
+    tAF  décalage et aller à l'état 120
1406 1439
 
1407 1440
 
1408
-État 117
1441
+État 119
1409 1442
 
1410
-   39 Else: tELSE tIF tPO . Cond tPF tAO Instructions tAF Else
1443
+   42 Else: tELSE tIF tPO . Cond tPF tAO Instructions tAF Else
1411 1444
 
1412 1445
     tENTIER  décalage et aller à l'état 46
1413 1446
     tSUB     décalage et aller à l'état 47
@@ -1416,34 +1449,34 @@ Return (57)
1416 1449
     tNOT     décalage et aller à l'état 50
1417 1450
 
1418 1451
     E           aller à l'état 51
1419
-    Cond        aller à l'état 119
1452
+    Cond        aller à l'état 121
1420 1453
     Invocation  aller à l'état 53
1421 1454
 
1422 1455
 
1423
-État 118
1456
+État 120
1424 1457
 
1425
-   38 Else: tELSE tAO Instructions tAF .
1458
+   40 Else: tELSE tAO Instructions tAF .
1426 1459
 
1427
-    $défaut  réduction par utilisation de la règle 38 (Else)
1460
+    $défaut  réduction par utilisation de la règle 40 (Else)
1428 1461
 
1429 1462
 
1430
-État 119
1463
+État 121
1431 1464
 
1432
-   39 Else: tELSE tIF tPO Cond . tPF tAO Instructions tAF Else
1465
+   42 Else: tELSE tIF tPO Cond . tPF tAO Instructions tAF Else
1433 1466
 
1434
-    tPF  décalage et aller à l'état 120
1467
+    tPF  décalage et aller à l'état 122
1435 1468
 
1436 1469
 
1437
-État 120
1470
+État 122
1438 1471
 
1439
-   39 Else: tELSE tIF tPO Cond tPF . tAO Instructions tAF Else
1472
+   42 Else: tELSE tIF tPO Cond tPF . tAO Instructions tAF Else
1440 1473
 
1441
-    tAO  décalage et aller à l'état 121
1474
+    tAO  décalage et aller à l'état 123
1442 1475
 
1443 1476
 
1444
-État 121
1477
+État 123
1445 1478
 
1446
-   39 Else: tELSE tIF tPO Cond tPF tAO . Instructions tAF Else
1479
+   42 Else: tELSE tIF tPO Cond tPF tAO . Instructions tAF Else
1447 1480
 
1448 1481
     tINT    décalage et aller à l'état 16
1449 1482
     tPRINT  décalage et aller à l'état 17
@@ -1454,7 +1487,7 @@ Return (57)
1454 1487
 
1455 1488
     $défaut  réduction par utilisation de la règle 9 (Instructions)
1456 1489
 
1457
-    Instructions  aller à l'état 122
1490
+    Instructions  aller à l'état 124
1458 1491
     Instruction   aller à l'état 23
1459 1492
     Decl          aller à l'état 24
1460 1493
     Type          aller à l'état 25
@@ -1465,24 +1498,26 @@ Return (57)
1465 1498
     Print         aller à l'état 30
1466 1499
 
1467 1500
 
1468
-État 122
1501
+État 124
1469 1502
 
1470
-   39 Else: tELSE tIF tPO Cond tPF tAO Instructions . tAF Else
1503
+   42 Else: tELSE tIF tPO Cond tPF tAO Instructions . tAF Else
1471 1504
 
1472
-    tAF  décalage et aller à l'état 123
1505
+    tAF  décalage et aller à l'état 125
1473 1506
 
1474 1507
 
1475
-État 123
1508
+État 125
1476 1509
 
1477
-   39 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF . Else
1510
+   42 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF . Else
1478 1511
 
1479
-    tELSE  décalage et aller à l'état 112
1512
+    tELSE  décalage et aller à l'état 114
1480 1513
 
1481
-    Else  aller à l'état 124
1514
+    $défaut  réduction par utilisation de la règle 41 (Else)
1482 1515
 
1516
+    Else  aller à l'état 126
1483 1517
 
1484
-État 124
1485 1518
 
1486
-   39 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF Else .
1519
+État 126
1520
+
1521
+   42 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF Else .
1487 1522
 
1488
-    $défaut  réduction par utilisation de la règle 39 (Else)
1523
+    $défaut  réduction par utilisation de la règle 42 (Else)

+ 206
- 178
analyse_syntaxique.tab.c View File

@@ -163,12 +163,14 @@ int yyparse (void);
163 163
 
164 164
 #include <stdio.h>
165 165
 #include "table_symboles.h"
166
+#include "gen_assembleur.h"
166 167
 
167 168
 enum Initialised_Variable init;
168 169
 enum Symbole_Type type;
169 170
 Table_Symboles table;
171
+instructions_array array;
170 172
 
171
-#line 172 "analyse_syntaxique.tab.c" /* yacc.c:358  */
173
+#line 174 "analyse_syntaxique.tab.c" /* yacc.c:358  */
172 174
 
173 175
 #ifdef short
174 176
 # undef short
@@ -410,16 +412,16 @@ union yyalloc
410 412
 /* YYFINAL -- State number of the termination state.  */
411 413
 #define YYFINAL  4
412 414
 /* YYLAST -- Last index in YYTABLE.  */
413
-#define YYLAST   133
415
+#define YYLAST   134
414 416
 
415 417
 /* YYNTOKENS -- Number of terminals.  */
416 418
 #define YYNTOKENS  35
417 419
 /* YYNNTS -- Number of nonterminals.  */
418
-#define YYNNTS  23
420
+#define YYNNTS  25
419 421
 /* YYNRULES -- Number of rules.  */
420
-#define YYNRULES  53
422
+#define YYNRULES  57
421 423
 /* YYNSTATES -- Number of states.  */
422
-#define YYNSTATES  125
424
+#define YYNSTATES  127
423 425
 
424 426
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
425 427
    by yylex, with out-of-bounds checking.  */
@@ -468,12 +470,12 @@ static const yytype_uint8 yytranslate[] =
468 470
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
469 471
 static const yytype_uint8 yyrline[] =
470 472
 {
471
-       0,    68,    68,    70,    71,    73,    76,    77,    80,    82,
472
-      83,    85,    86,    87,    88,    89,    90,    92,    94,    95,
473
-      97,    98,   100,   101,   104,   106,   107,   108,   109,   110,
474
-     111,   112,   113,   114,   117,   118,   120,   121,   123,   125,
475
-     126,   128,   130,   131,   132,   133,   134,   135,   136,   137,
476
-     138,   140,   142,   144
473
+       0,    75,    75,    77,    78,    80,    83,    84,    87,    89,
474
+      90,    92,    93,    94,    95,    96,    97,    99,   101,   102,
475
+     104,   105,   107,   108,   111,   113,   114,   115,   116,   117,
476
+     118,   119,   120,   121,   124,   125,   127,   128,   130,   135,
477
+     130,   141,   142,   143,   145,   147,   148,   149,   150,   151,
478
+     152,   153,   154,   155,   156,   158,   160,   162
477 479
 };
478 480
 #endif
479 481
 
@@ -489,7 +491,7 @@ static const char *const yytname[] =
489 491
   "tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param",
490 492
   "SuiteParams", "Body", "Instructions", "Instruction", "Decl",
491 493
   "SuiteDecl", "Type", "Valeur", "Aff", "E", "Args", "SuiteArgs", "If",
492
-  "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR
494
+  "$@1", "$@2", "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR
493 495
 };
494 496
 #endif
495 497
 
@@ -505,10 +507,10 @@ static const yytype_uint16 yytoknum[] =
505 507
 };
506 508
 # endif
507 509
 
508
-#define YYPACT_NINF -35
510
+#define YYPACT_NINF -34
509 511
 
510 512
 #define yypact_value_is_default(Yystate) \
511
-  (!!((Yystate) == (-35)))
513
+  (!!((Yystate) == (-34)))
512 514
 
513 515
 #define YYTABLE_NINF -1
514 516
 
@@ -519,19 +521,19 @@ static const yytype_uint16 yytoknum[] =
519 521
      STATE-NUM.  */
520 522
 static const yytype_int8 yypact[] =
521 523
 {
522
-      -3,   -12,    31,    34,   -35,    20,    25,    50,    44,   -35,
523
-      57,    20,   -35,    46,   -35,    44,   -35,    52,    60,    65,
524
-      56,    -4,    58,    46,   -35,    43,   -35,   -35,   -35,    69,
525
-     -35,    79,    61,    14,    14,   -35,    63,    16,    16,    85,
526
-     -35,    82,    91,   -35,   -35,    90,   -35,    16,    16,    98,
527
-      14,    45,    99,   -35,   100,   101,   102,    81,    97,   -35,
528
-      16,    43,   103,   104,     8,    22,   -35,    16,    16,    16,
529
-      16,    16,    16,    16,    16,    16,    16,    14,    14,   108,
530
-     109,    80,   -35,   -35,   -35,   -35,    49,    91,   -35,   -35,
531
-     -35,     1,     8,   106,   -35,    49,    49,    49,    49,    49,
532
-      49,   -35,   -35,    46,    46,   101,   -35,   110,   111,   -35,
533
-      94,   -35,    -5,   -35,    46,   112,   113,    14,   -35,   105,
534
-     115,    46,   116,    94,   -35
524
+     -18,   -14,    22,    35,   -34,     8,    12,    49,    45,   -34,
525
+      51,     8,   -34,    47,   -34,    45,   -34,    52,    60,    61,
526
+      53,    -8,    55,    47,   -34,    42,   -34,   -34,   -34,    68,
527
+     -34,    70,    54,    15,    15,   -34,    56,    17,    17,    73,
528
+     -34,    74,    77,   -34,   -34,    83,   -34,    17,    17,    92,
529
+      15,    46,    90,   -34,    94,    96,   102,    91,   101,   -34,
530
+      17,    42,    99,   100,     9,    23,   -34,    17,    17,    17,
531
+      17,    17,    17,    17,    17,    17,    17,    15,    15,   -34,
532
+     105,    84,   -34,   -34,   -34,   -34,    50,    77,   -34,   -34,
533
+     -34,     5,     9,   110,   -34,    50,    50,    50,    50,    50,
534
+      50,   -34,   -34,   108,    47,    96,   -34,    47,   109,   -34,
535
+     111,   -34,   -34,    95,    -4,   -34,    47,   113,   112,    15,
536
+     -34,   116,   117,    47,   115,    95,   -34
535 537
 };
536 538
 
537 539
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -544,30 +546,30 @@ static const yytype_uint8 yydefact[] =
544 546
        0,     0,     0,    10,    15,     0,    11,    12,    13,     0,
545 547
       14,     0,     0,     0,     0,    21,    35,     0,     0,     0,
546 548
        9,    23,    19,    16,     6,     0,    25,     0,     0,    26,
547
-       0,     0,     0,    32,     0,    37,     0,     0,     0,     8,
548
-       0,     0,     0,     0,    31,     0,    50,     0,     0,     0,
549
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
550
-       0,     0,    34,    51,    24,    53,    22,    19,    17,    52,
551
-      33,    27,    29,    28,    30,    42,    43,    44,    45,    47,
552
-      46,    49,    48,    10,    10,    37,    18,     0,     0,    36,
553
-       0,    41,     0,    38,    10,     0,     0,     0,    39,     0,
554
-       0,    10,     0,     0,    40
549
+       0,    54,     0,    32,     0,    37,     0,     0,     0,     8,
550
+       0,     0,     0,     0,    31,     0,    53,     0,     0,     0,
551
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    38,
552
+       0,     0,    34,    55,    24,    57,    22,    19,    17,    56,
553
+      33,    27,    29,    28,    30,    45,    46,    47,    48,    50,
554
+      49,    52,    51,     0,    10,    37,    18,    10,     0,    36,
555
+       0,    44,    39,    42,     0,    40,    10,     0,     0,     0,
556
+      41,     0,     0,    10,     0,    42,    43
555 557
 };
556 558
 
557 559
   /* YYPGOTO[NTERM-NUM].  */
558 560
 static const yytype_int8 yypgoto[] =
559 561
 {
560
-     -35,   -35,   -35,   118,   117,   -35,   -22,   -35,   -35,    40,
561
-     -35,    70,   -35,   -34,   -35,    28,   -35,     7,   -35,   -32,
562
-     -13,   -35,   -35
562
+     -34,   -34,   -34,   118,   119,   -34,   -21,   -34,   -34,    33,
563
+     -34,    69,   -34,   -33,   -34,    26,   -34,   -34,   -34,     7,
564
+     -34,   -31,   -13,   -34,   -34
563 565
 };
564 566
 
565 567
   /* YYDEFGOTO[NTERM-NUM].  */
566 568
 static const yytype_int8 yydefgoto[] =
567 569
 {
568 570
       -1,     2,     7,     8,    12,    14,    22,    23,    24,    62,
569
-      25,    42,    26,    51,    56,    82,    27,   113,    28,    52,
570
-      53,    30,    39
571
+      25,    42,    26,    51,    56,    82,    27,   103,   113,   115,
572
+      28,    52,    53,    30,    39
571 573
 };
572 574
 
573 575
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -575,38 +577,38 @@ static const yytype_int8 yydefgoto[] =
575 577
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
576 578
 static const yytype_uint8 yytable[] =
577 579
 {
578
-      29,    40,    54,    57,    58,    36,   114,    68,    69,    70,
579
-      29,     3,    37,    64,    65,    69,    70,    46,    66,    46,
580
-      47,     1,    47,    48,   115,    48,    86,    67,    68,    69,
581
-      70,     4,    90,    91,    92,    93,    94,    95,    96,    97,
582
-      98,    99,   100,     5,     6,   101,   102,    49,    50,    49,
583
-      67,    68,    69,    70,    67,    68,    69,    70,     9,    11,
584
-      10,    32,    71,    72,    73,    74,    75,    76,    13,    33,
585
-      16,    17,    77,    78,    34,    18,    41,    19,    20,    21,
586
-      35,   107,   108,    43,    38,   119,    67,    68,    69,    70,
587
-      29,    29,   116,    44,    45,    84,    55,    59,    60,   122,
588
-      63,    29,    67,    68,    69,    70,    61,    36,    29,    79,
589
-      80,    85,    83,   105,    70,   120,    81,    88,    89,   103,
590
-     104,   117,   110,   111,   112,   118,   121,   106,   123,    15,
591
-     124,    87,    31,   109
580
+      29,    36,    40,    54,    57,    58,     1,   116,    37,     3,
581
+      29,    68,    69,    70,    64,    65,    69,    70,    46,    66,
582
+      46,    47,     4,    47,    48,   117,    48,    86,    67,    68,
583
+      69,    70,     6,    90,    91,    92,    93,    94,    95,    96,
584
+      97,    98,    99,   100,     5,     9,   101,   102,    49,    50,
585
+      49,    67,    68,    69,    70,    67,    68,    69,    70,    10,
586
+      11,    32,    13,    71,    72,    73,    74,    75,    76,    33,
587
+      34,    16,    17,    77,    78,    41,    18,    35,    19,    20,
588
+      21,    38,    43,   108,    44,    59,   110,    45,   121,    55,
589
+      60,    29,    61,    63,    29,   118,    67,    68,    69,    70,
590
+      79,    36,   124,    29,    80,    84,    67,    68,    69,    70,
591
+      29,    81,    83,    88,    89,    85,   104,   105,    70,   107,
592
+     106,   111,   119,   112,   120,   114,   122,   125,   123,    15,
593
+      87,   109,   126,     0,    31
592 594
 };
593 595
 
594
-static const yytype_uint8 yycheck[] =
596
+static const yytype_int8 yycheck[] =
595 597
 {
596
-      13,    23,    34,    37,    38,     9,    11,     6,     7,     8,
597
-      23,    23,    16,    47,    48,     7,     8,     3,    50,     3,
598
-       6,    24,     6,     9,    29,     9,    60,     5,     6,     7,
599
-       8,     0,    10,    67,    68,    69,    70,    71,    72,    73,
600
-      74,    75,    76,     9,    24,    77,    78,    33,    34,    33,
601
-       5,     6,     7,     8,     5,     6,     7,     8,    33,    15,
602
-      10,     9,    17,    18,    19,    20,    21,    22,    11,     9,
603
-      24,    25,    27,    28,     9,    29,    33,    31,    32,    33,
604
-      24,   103,   104,    14,    26,   117,     5,     6,     7,     8,
605
-     103,   104,   114,    14,    33,    14,    33,    12,    16,   121,
606
-      10,   114,     5,     6,     7,     8,    15,     9,   121,    10,
607
-      10,    14,    10,    33,     8,    10,    15,    14,    14,    11,
608
-      11,     9,    12,    12,    30,    12,    11,    87,    12,    11,
609
-     123,    61,    15,   105
598
+      13,     9,    23,    34,    37,    38,    24,    11,    16,    23,
599
+      23,     6,     7,     8,    47,    48,     7,     8,     3,    50,
600
+       3,     6,     0,     6,     9,    29,     9,    60,     5,     6,
601
+       7,     8,    24,    10,    67,    68,    69,    70,    71,    72,
602
+      73,    74,    75,    76,     9,    33,    77,    78,    33,    34,
603
+      33,     5,     6,     7,     8,     5,     6,     7,     8,    10,
604
+      15,     9,    11,    17,    18,    19,    20,    21,    22,     9,
605
+       9,    24,    25,    27,    28,    33,    29,    24,    31,    32,
606
+      33,    26,    14,   104,    14,    12,   107,    33,   119,    33,
607
+      16,   104,    15,    10,   107,   116,     5,     6,     7,     8,
608
+      10,     9,   123,   116,    10,    14,     5,     6,     7,     8,
609
+     123,    15,    10,    14,    14,    14,    11,    33,     8,    11,
610
+      87,    12,     9,    12,    12,    30,    10,    12,    11,    11,
611
+      61,   105,   125,    -1,    15
610 612
 };
611 613
 
612 614
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -615,17 +617,17 @@ static const yytype_uint8 yystos[] =
615 617
 {
616 618
        0,    24,    36,    23,     0,     9,    24,    37,    38,    33,
617 619
       10,    15,    39,    11,    40,    38,    24,    25,    29,    31,
618
-      32,    33,    41,    42,    43,    45,    47,    51,    53,    55,
619
-      56,    39,     9,     9,     9,    24,     9,    16,    26,    57,
620
+      32,    33,    41,    42,    43,    45,    47,    51,    55,    57,
621
+      58,    39,     9,     9,     9,    24,     9,    16,    26,    59,
620 622
       41,    33,    46,    14,    14,    33,     3,     6,     9,    33,
621
-      34,    48,    54,    55,    54,    33,    49,    48,    48,    12,
622
-      16,    15,    44,    10,    48,    48,    54,     5,     6,     7,
623
+      34,    48,    56,    57,    56,    33,    49,    48,    48,    12,
624
+      16,    15,    44,    10,    48,    48,    56,     5,     6,     7,
623 625
        8,    17,    18,    19,    20,    21,    22,    27,    28,    10,
624 626
       10,    15,    50,    10,    14,    14,    48,    46,    14,    14,
625 627
       10,    48,    48,    48,    48,    48,    48,    48,    48,    48,
626
-      48,    54,    54,    11,    11,    33,    44,    41,    41,    50,
627
-      12,    12,    30,    52,    11,    29,    41,     9,    12,    54,
628
-      10,    11,    41,    12,    52
628
+      48,    56,    56,    52,    11,    33,    44,    11,    41,    50,
629
+      41,    12,    12,    53,    30,    54,    11,    29,    41,     9,
630
+      12,    56,    10,    11,    41,    12,    54
629 631
 };
630 632
 
631 633
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -634,9 +636,9 @@ static const yytype_uint8 yyr1[] =
634 636
        0,    35,    36,    37,    37,    38,    39,    39,    40,    41,
635 637
       41,    42,    42,    42,    42,    42,    42,    43,    44,    44,
636 638
       45,    45,    46,    46,    47,    48,    48,    48,    48,    48,
637
-      48,    48,    48,    48,    49,    49,    50,    50,    51,    52,
638
-      52,    53,    54,    54,    54,    54,    54,    54,    54,    54,
639
-      54,    55,    56,    57
639
+      48,    48,    48,    48,    49,    49,    50,    50,    52,    53,
640
+      51,    54,    54,    54,    55,    56,    56,    56,    56,    56,
641
+      56,    56,    56,    56,    56,    57,    58,    59
640 642
 };
641 643
 
642 644
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -645,9 +647,9 @@ static const yytype_uint8 yyr2[] =
645 647
        0,     2,     6,     0,     2,     2,     4,     0,     4,     2,
646 648
        0,     1,     1,     1,     1,     1,     2,     4,     3,     0,
647 649
        1,     2,     3,     1,     4,     1,     1,     3,     3,     3,
648
-       3,     2,     1,     3,     2,     0,     3,     0,     8,     4,
649
-       9,     7,     3,     3,     3,     3,     3,     3,     3,     3,
650
-       2,     4,     5,     3
650
+       3,     2,     1,     3,     2,     0,     3,     0,     0,     0,
651
+      10,     4,     0,     9,     7,     3,     3,     3,     3,     3,
652
+       3,     3,     3,     2,     1,     4,     5,     3
651 653
 };
652 654
 
653 655
 
@@ -1324,205 +1326,229 @@ yyreduce:
1324 1326
   switch (yyn)
1325 1327
     {
1326 1328
         case 2:
1327
-#line 68 "analyse_syntaxique.y" /* yacc.c:1646  */
1329
+#line 75 "analyse_syntaxique.y" /* yacc.c:1646  */
1328 1330
     {}
1329
-#line 1330 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1331
+#line 1332 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1330 1332
     break;
1331 1333
 
1332 1334
   case 3:
1333
-#line 70 "analyse_syntaxique.y" /* yacc.c:1646  */
1335
+#line 77 "analyse_syntaxique.y" /* yacc.c:1646  */
1334 1336
     {printf("Sans params\n");}
1335
-#line 1336 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1337
+#line 1338 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1336 1338
     break;
1337 1339
 
1338 1340
   case 5:
1339
-#line 73 "analyse_syntaxique.y" /* yacc.c:1646  */
1341
+#line 80 "analyse_syntaxique.y" /* yacc.c:1646  */
1340 1342
     {printf("Parametre : %s\n", (yyvsp[0].id));}
1341
-#line 1342 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1343
+#line 1344 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1342 1344
     break;
1343 1345
 
1344 1346
   case 8:
1345
-#line 80 "analyse_syntaxique.y" /* yacc.c:1646  */
1347
+#line 87 "analyse_syntaxique.y" /* yacc.c:1646  */
1346 1348
     {printf("Dans body\n");}
1347
-#line 1348 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1349
+#line 1350 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1348 1350
     break;
1349 1351
 
1350 1352
   case 20:
1351
-#line 97 "analyse_syntaxique.y" /* yacc.c:1646  */
1353
+#line 104 "analyse_syntaxique.y" /* yacc.c:1646  */
1352 1354
     {type = TYPE_INT;}
1353
-#line 1354 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1355
+#line 1356 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1354 1356
     break;
1355 1357
 
1356 1358
   case 21:
1357
-#line 98 "analyse_syntaxique.y" /* yacc.c:1646  */
1359
+#line 105 "analyse_syntaxique.y" /* yacc.c:1646  */
1358 1360
     {type = TYPE_CONST_INT;}
1359
-#line 1360 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1361
+#line 1362 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1360 1362
     break;
1361 1363
 
1362 1364
   case 22:
1363
-#line 100 "analyse_syntaxique.y" /* yacc.c:1646  */
1364
-    {add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth);}
1365
-#line 1366 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1365
+#line 107 "analyse_syntaxique.y" /* yacc.c:1646  */
1366
+    {add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth); free_temp(&table);}
1367
+#line 1368 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1366 1368
     break;
1367 1369
 
1368 1370
   case 23:
1369
-#line 101 "analyse_syntaxique.y" /* yacc.c:1646  */
1371
+#line 108 "analyse_syntaxique.y" /* yacc.c:1646  */
1370 1372
     {add_symbole_top(&table, (yyvsp[0].id), type, NOT_INITIALISED, table.depth);}
1371
-#line 1372 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1373
+#line 1374 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1372 1374
     break;
1373 1375
 
1374 1376
   case 24:
1375
-#line 104 "analyse_syntaxique.y" /* yacc.c:1646  */
1376
-    {printf("Affectation : %s\n", (yyvsp[-3].id));}
1377
-#line 1378 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1377
+#line 111 "analyse_syntaxique.y" /* yacc.c:1646  */
1378
+    {printf("Affectation : %s\n", (yyvsp[-3].id)); free_temp(&table);}
1379
+#line 1380 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1378 1380
     break;
1379 1381
 
1380 1382
   case 25:
1381
-#line 106 "analyse_syntaxique.y" /* yacc.c:1646  */
1382
-    {printf("int %d\n", (yyvsp[0].nombre));}
1383
-#line 1384 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1383
+#line 113 "analyse_syntaxique.y" /* yacc.c:1646  */
1384
+    {int vt = gen_entier(&table, &array, (yyvsp[0].nombre)); (yyval.nombre) = vt;}
1385
+#line 1386 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1384 1386
     break;
1385 1387
 
1386 1388
   case 26:
1387
-#line 107 "analyse_syntaxique.y" /* yacc.c:1646  */
1388
-    {printf("var %s\n", (yyvsp[0].id));}
1389
-#line 1390 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1389
+#line 114 "analyse_syntaxique.y" /* yacc.c:1646  */
1390
+    {int vt = gen_var(&table, &array, (yyvsp[0].id)); (yyval.nombre) = vt;}
1391
+#line 1392 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1390 1392
     break;
1391 1393
 
1392 1394
   case 27:
1393
-#line 108 "analyse_syntaxique.y" /* yacc.c:1646  */
1394
-    {printf("Addition\n");}
1395
-#line 1396 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1395
+#line 115 "analyse_syntaxique.y" /* yacc.c:1646  */
1396
+    {gen_arithmetique(&array, ADD, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
1397
+#line 1398 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1396 1398
     break;
1397 1399
 
1398 1400
   case 28:
1399
-#line 109 "analyse_syntaxique.y" /* yacc.c:1646  */
1400
-    {printf("Multiplication\n");}
1401
-#line 1402 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1401
+#line 116 "analyse_syntaxique.y" /* yacc.c:1646  */
1402
+    {gen_arithmetique(&array, MUL, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
1403
+#line 1404 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1402 1404
     break;
1403 1405
 
1404 1406
   case 29:
1405
-#line 110 "analyse_syntaxique.y" /* yacc.c:1646  */
1406
-    {printf("Soustraction\n");}
1407
-#line 1408 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1407
+#line 117 "analyse_syntaxique.y" /* yacc.c:1646  */
1408
+    {gen_arithmetique(&array, SOU, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
1409
+#line 1410 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1408 1410
     break;
1409 1411
 
1410 1412
   case 30:
1411
-#line 111 "analyse_syntaxique.y" /* yacc.c:1646  */
1412
-    {printf("Division\n");}
1413
-#line 1414 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1413
+#line 118 "analyse_syntaxique.y" /* yacc.c:1646  */
1414
+    {gen_arithmetique(&array, DIV, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
1415
+#line 1416 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1414 1416
     break;
1415 1417
 
1416 1418
   case 31:
1417
-#line 112 "analyse_syntaxique.y" /* yacc.c:1646  */
1418
-    {printf("Soustraction\n");}
1419
-#line 1420 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1419
+#line 119 "analyse_syntaxique.y" /* yacc.c:1646  */
1420
+    {printf("Variable negative\n");}
1421
+#line 1422 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1422
+    break;
1423
+
1424
+  case 32:
1425
+#line 120 "analyse_syntaxique.y" /* yacc.c:1646  */
1426
+    {(yyval.nombre) = 1234;}
1427
+#line 1428 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1420 1428
     break;
1421 1429
 
1422 1430
   case 33:
1423
-#line 114 "analyse_syntaxique.y" /* yacc.c:1646  */
1424
-    {printf("Parenthèse\n");}
1425
-#line 1426 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1431
+#line 121 "analyse_syntaxique.y" /* yacc.c:1646  */
1432
+    {printf("Parenthèse\n"); (yyval.nombre) = (yyvsp[-1].nombre); }
1433
+#line 1434 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1426 1434
     break;
1427 1435
 
1428 1436
   case 38:
1429
-#line 123 "analyse_syntaxique.y" /* yacc.c:1646  */
1430
-    {printf("Dans if\n");}
1431
-#line 1432 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1437
+#line 130 "analyse_syntaxique.y" /* yacc.c:1646  */
1438
+    {
1439
+    gen_jmpf(&table, &array, (yyvsp[-1].nombre));
1440
+    (yyvsp[-3].nombre) = array.index;
1441
+}
1442
+#line 1443 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1432 1443
     break;
1433 1444
 
1434 1445
   case 39:
1435
-#line 125 "analyse_syntaxique.y" /* yacc.c:1646  */
1436
-    {printf("else\n");}
1437
-#line 1438 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1446
+#line 135 "analyse_syntaxique.y" /* yacc.c:1646  */
1447
+    {
1448
+    int adr_jmp = array.index;
1449
+    update_jump(&array, (yyvsp[-7].nombre), adr_jmp);
1450
+}
1451
+#line 1452 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1438 1452
     break;
1439 1453
 
1440 1454
   case 40:
1441
-#line 126 "analyse_syntaxique.y" /* yacc.c:1646  */
1442
-    {printf("elsif\n");}
1443
-#line 1444 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1455
+#line 139 "analyse_syntaxique.y" /* yacc.c:1646  */
1456
+    {printf("Dans if\n");}
1457
+#line 1458 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1444 1458
     break;
1445 1459
 
1446 1460
   case 41:
1447
-#line 128 "analyse_syntaxique.y" /* yacc.c:1646  */
1461
+#line 141 "analyse_syntaxique.y" /* yacc.c:1646  */
1462
+    {printf("else\n");}
1463
+#line 1464 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1464
+    break;
1465
+
1466
+  case 43:
1467
+#line 143 "analyse_syntaxique.y" /* yacc.c:1646  */
1468
+    {printf("elsif\n");}
1469
+#line 1470 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1470
+    break;
1471
+
1472
+  case 44:
1473
+#line 145 "analyse_syntaxique.y" /* yacc.c:1646  */
1448 1474
     {printf("Dans while\n");}
1449
-#line 1450 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1475
+#line 1476 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1450 1476
     break;
1451 1477
 
1452
-  case 42:
1453
-#line 130 "analyse_syntaxique.y" /* yacc.c:1646  */
1478
+  case 45:
1479
+#line 147 "analyse_syntaxique.y" /* yacc.c:1646  */
1454 1480
     {printf("Cond ==\n");}
1455
-#line 1456 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1481
+#line 1482 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1456 1482
     break;
1457 1483
 
1458
-  case 43:
1459
-#line 131 "analyse_syntaxique.y" /* yacc.c:1646  */
1484
+  case 46:
1485
+#line 148 "analyse_syntaxique.y" /* yacc.c:1646  */
1460 1486
     {printf("Cond !=\n");}
1461
-#line 1462 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1487
+#line 1488 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1462 1488
     break;
1463 1489
 
1464
-  case 44:
1465
-#line 132 "analyse_syntaxique.y" /* yacc.c:1646  */
1490
+  case 47:
1491
+#line 149 "analyse_syntaxique.y" /* yacc.c:1646  */
1466 1492
     {printf("Cond <\n");}
1467
-#line 1468 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1493
+#line 1494 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1468 1494
     break;
1469 1495
 
1470
-  case 45:
1471
-#line 133 "analyse_syntaxique.y" /* yacc.c:1646  */
1496
+  case 48:
1497
+#line 150 "analyse_syntaxique.y" /* yacc.c:1646  */
1472 1498
     {printf("Cond >\n");}
1473
-#line 1474 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1499
+#line 1500 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1474 1500
     break;
1475 1501
 
1476
-  case 46:
1477
-#line 134 "analyse_syntaxique.y" /* yacc.c:1646  */
1502
+  case 49:
1503
+#line 151 "analyse_syntaxique.y" /* yacc.c:1646  */
1478 1504
     {printf("Cond <=\n");}
1479
-#line 1480 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1505
+#line 1506 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1480 1506
     break;
1481 1507
 
1482
-  case 47:
1483
-#line 135 "analyse_syntaxique.y" /* yacc.c:1646  */
1508
+  case 50:
1509
+#line 152 "analyse_syntaxique.y" /* yacc.c:1646  */
1484 1510
     {printf("Cond >=\n");}
1485
-#line 1486 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1511
+#line 1512 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1486 1512
     break;
1487 1513
 
1488
-  case 48:
1489
-#line 136 "analyse_syntaxique.y" /* yacc.c:1646  */
1514
+  case 51:
1515
+#line 153 "analyse_syntaxique.y" /* yacc.c:1646  */
1490 1516
     {printf("Cond &&\n");}
1491
-#line 1492 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1517
+#line 1518 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1492 1518
     break;
1493 1519
 
1494
-  case 49:
1495
-#line 137 "analyse_syntaxique.y" /* yacc.c:1646  */
1520
+  case 52:
1521
+#line 154 "analyse_syntaxique.y" /* yacc.c:1646  */
1496 1522
     {printf("Cond ||\n");}
1497
-#line 1498 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1523
+#line 1524 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1498 1524
     break;
1499 1525
 
1500
-  case 50:
1501
-#line 138 "analyse_syntaxique.y" /* yacc.c:1646  */
1526
+  case 53:
1527
+#line 155 "analyse_syntaxique.y" /* yacc.c:1646  */
1502 1528
     {printf("Cond !\n");}
1503
-#line 1504 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1529
+#line 1530 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1504 1530
     break;
1505 1531
 
1506
-  case 51:
1507
-#line 140 "analyse_syntaxique.y" /* yacc.c:1646  */
1532
+  case 55:
1533
+#line 158 "analyse_syntaxique.y" /* yacc.c:1646  */
1508 1534
     {printf("Dans invocation\n");}
1509
-#line 1510 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1535
+#line 1536 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1510 1536
     break;
1511 1537
 
1512
-  case 52:
1513
-#line 142 "analyse_syntaxique.y" /* yacc.c:1646  */
1538
+  case 56:
1539
+#line 160 "analyse_syntaxique.y" /* yacc.c:1646  */
1514 1540
     {printf("printf de %s\n", (yyvsp[-2].id));}
1515
-#line 1516 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1541
+#line 1542 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1516 1542
     break;
1517 1543
 
1518
-  case 53:
1519
-#line 144 "analyse_syntaxique.y" /* yacc.c:1646  */
1520
-    {printf("return\n");}
1521
-#line 1522 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1544
+  case 57:
1545
+#line 162 "analyse_syntaxique.y" /* yacc.c:1646  */
1546
+    {(yyval.nombre)= gen_return(&table, &array, (yyvsp[-1].nombre));}
1547
+#line 1548 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1522 1548
     break;
1523 1549
 
1524 1550
 
1525
-#line 1526 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1551
+#line 1552 "analyse_syntaxique.tab.c" /* yacc.c:1646  */
1526 1552
       default: break;
1527 1553
     }
1528 1554
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1750,14 +1776,16 @@ yyreturn:
1750 1776
 #endif
1751 1777
   return yyresult;
1752 1778
 }
1753
-#line 146 "analyse_syntaxique.y" /* yacc.c:1906  */
1779
+#line 164 "analyse_syntaxique.y" /* yacc.c:1906  */
1754 1780
 
1755 1781
 #include <stdio.h>
1756 1782
 void main(void){
1783
+    //TODO: rajouter gestion des erreurs
1757 1784
     initialise_table(&table);
1785
+    initialise_asm(&array);
1758 1786
     yyparse();
1759 1787
     print_table(&table);
1760
-    remove_symboles(&table, 0);
1761
-    print_table(&table);
1788
+    //remove_symboles(&table, 0);
1789
+    //print_table(&table);
1762 1790
 }
1763 1791
 

+ 35
- 16
analyse_syntaxique.y View File

@@ -6,16 +6,23 @@ char id[30];
6 6
 %{
7 7
 #include <stdio.h>
8 8
 #include "table_symboles.h"
9
+#include "gen_assembleur.h"
9 10
 
10 11
 enum Initialised_Variable init;
11 12
 enum Symbole_Type type;
12 13
 Table_Symboles table;
14
+instructions_array array;
13 15
 %}
14 16
 
15 17
 
16 18
 %token<nombre> tENTIER
17 19
 %token<nombre> tENTIEREXP
18 20
 
21
+%type<nombre> E
22
+%type<nombre> Return
23
+%type<nombre> Cond
24
+
25
+
19 26
 %token tADD
20 27
 %token tSUB
21 28
 %token tMUL
@@ -43,7 +50,7 @@ Table_Symboles table;
43 50
 %token tRETURN
44 51
 %token tOR
45 52
 %token tAND
46
-%token tIF
53
+%token<nombre> tIF
47 54
 %token tELSE
48 55
 %token tWHILE
49 56
 %token tCONST
@@ -97,21 +104,21 @@ SuiteDecl: ;
97 104
 Type : tINT {type = TYPE_INT;} ; 
98 105
 Type : tCONST tINT {type = TYPE_CONST_INT;} ;
99 106
 
100
-Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth);};
107
+Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth); free_temp(&table);};
101 108
 Valeur : tVAR {add_symbole_top(&table, $1, type, NOT_INITIALISED, table.depth);};
102 109
 
103 110
 
104
-Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1);};
111
+Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1); free_temp(&table);};
105 112
 
106
-E : tENTIER {printf("int %d\n", $1);};
107
-E : tVAR {printf("var %s\n", $1);}; 
108
-E : E tADD E {printf("Addition\n");} ;
109
-E : E tMUL E {printf("Multiplication\n");}  ; 
110
-E : E tSUB E {printf("Soustraction\n");} ;
111
-E : E tDIV E {printf("Division\n");} ;
112
-E : tSUB E {printf("Soustraction\n");} ;
113
-E : Invocation ;
114
-E : tPO E tPF {printf("Parenthèse\n");} ;
113
+E : tENTIER {int vt = gen_entier(&table, &array, $1); $$ = vt;};
114
+E : tVAR {int vt = gen_var(&table, &array, $1); $$ = vt;}; 
115
+E : E tADD E {gen_arithmetique(&array, ADD, $1, $3); free_temp(&table); $$ = $1;} ;
116
+E : E tMUL E {gen_arithmetique(&array, MUL, $1, $3); free_temp(&table); $$ = $1;}  ; 
117
+E : E tSUB E {gen_arithmetique(&array, SOU, $1, $3); free_temp(&table); $$ = $1;} ;
118
+E : E tDIV E {gen_arithmetique(&array, DIV, $1, $3); free_temp(&table); $$ = $1;} ;
119
+E : tSUB E {printf("Variable negative\n");} ;
120
+E : Invocation {$$ = 1234;};
121
+E : tPO E tPF {printf("Parenthèse\n"); $$ = $2; } ;
115 122
 
116 123
 
117 124
 Args : tVAR SuiteArgs ;
@@ -120,9 +127,19 @@ Args : ;
120 127
 SuiteArgs : tVIRGULE tVAR SuiteArgs ;
121 128
 SuiteArgs : ;
122 129
 
123
-If : tIF tPO Cond tPF tAO Instructions tAF Else {printf("Dans if\n");};
130
+If : tIF tPO Cond tPF {
131
+    gen_jmpf(&table, &array, $3);
132
+    $1 = array.index;
133
+}
134
+tAO Instructions tAF 
135
+{
136
+    int adr_jmp = array.index;
137
+    update_jump(&array, $1, adr_jmp);
138
+}
139
+Else {printf("Dans if\n");};
124 140
 
125 141
 Else : tELSE tAO Instructions tAF {printf("else\n");} ;
142
+Else : ;
126 143
 Else : tELSE tIF tPO Cond tPF tAO Instructions tAF Else {printf("elsif\n");} ;
127 144
 
128 145
 While : tWHILE tPO Cond tPF tAO Instructions tAF {printf("Dans while\n");};
@@ -136,21 +153,23 @@ Cond : E tGTE E{printf("Cond >=\n");} ;
136 153
 Cond : E tAND Cond {printf("Cond &&\n");} ;
137 154
 Cond : E tOR Cond {printf("Cond ||\n");} ;
138 155
 Cond : tNOT Cond {printf("Cond !\n");} ;
156
+Cond : E;
139 157
 
140 158
 Invocation : tVAR tPO  Args  tPF {printf("Dans invocation\n");};
141 159
 
142 160
 Print : tPRINT tPO tVAR tPF tPV {printf("printf de %s\n", $3);};
143 161
 
144
-Return : tRETURN E tPV {printf("return\n");};
162
+Return : tRETURN E tPV {$$= gen_return(&table, &array, $2);};
145 163
 
146 164
 %%
147 165
 #include <stdio.h>
148 166
 void main(void){
149 167
     //TODO: rajouter gestion des erreurs
150 168
     initialise_table(&table);
169
+    initialise_asm(&array);
151 170
     yyparse();
152 171
     print_table(&table);
153
-    remove_symboles(&table, 0);
154
-    print_table(&table);
172
+    //remove_symboles(&table, 0);
173
+    //print_table(&table);
155 174
 }
156 175
 

+ 139
- 0
gen_assembleur.c View File

@@ -0,0 +1,139 @@
1
+#include "gen_assembleur.h"
2
+
3
+
4
+int new_temp(Table_Symboles * table){
5
+    int ret_addr ;
6
+    if(add_symbole_bottom(table) == -1) {
7
+        return -1;
8
+    }
9
+    ret_addr = table->indexAvailableBottom +1;
10
+    return ret_addr;
11
+}
12
+
13
+void gen_arithmetique(instructions_array * array, enum operation op, int arg1, int arg2){
14
+    instruction instru;
15
+    switch(op){
16
+        case ADD:
17
+            instru.operation = ADD; 
18
+            instru.reg1 = arg1; 
19
+            instru.reg2 = arg1; 
20
+            instru.reg3 = arg2; 
21
+            printf("%d ADD %d %d %d\n", array->index, arg1, arg1, arg2);
22
+            break;
23
+        case DIV:
24
+            instru.operation = DIV; 
25
+            instru.reg1 = arg1; 
26
+            instru.reg2 = arg1; 
27
+            instru.reg3 = arg2; 
28
+            printf("%d DIV %d %d %d\n",  array->index, arg1, arg1, arg2);
29
+            break;
30
+        case SOU:
31
+            instru.operation = SOU; 
32
+            instru.reg1 = arg1; 
33
+            instru.reg2 = arg1; 
34
+            instru.reg3 = arg2; 
35
+            printf("%d SOU %d %d %d\n", array->index, arg1, arg1, arg2);
36
+            break;
37
+        case MUL:
38
+            instru.operation = MUL; 
39
+            instru.reg1 = arg1; 
40
+            instru.reg2 = arg1; 
41
+            instru.reg3 = arg2; 
42
+            printf("%d MUL %d %d %d\n", array->index, arg1, arg1, arg2);
43
+            break;
44
+        default:
45
+            break;
46
+    } 
47
+    if (array->index < INSTRUCTION_TABLE_SIZE){
48
+        array->array[array->index] = instru;
49
+        array->index++;
50
+    }
51
+    
52
+}
53
+
54
+int gen_var(Table_Symboles * table, instructions_array * array, char * varName){
55
+    int vt = new_temp(table);
56
+    int varAddr = variable_exists(table, varName);
57
+
58
+    //vérifier que non null
59
+    instruction instru;
60
+    instru.operation = CPY;
61
+    instru.reg1 = vt;
62
+    instru.reg2 = varAddr; 
63
+
64
+    printf("%d CPY %d %d\n",  array->index, vt, varAddr);
65
+
66
+    if (array->index < INSTRUCTION_TABLE_SIZE){
67
+        array->array[array->index] = instru;
68
+        array->index++;
69
+    }
70
+
71
+    return vt;
72
+
73
+}
74
+
75
+int gen_entier(Table_Symboles * table, instructions_array * array, int entier){
76
+    int vt = new_temp(table);
77
+
78
+    //vérifier que non null
79
+    instruction instru;
80
+    instru.operation = AFC;
81
+    instru.reg1 = vt;
82
+    instru.reg2 = entier; 
83
+
84
+    printf("%d AFC %d %d\n",  array->index, vt, entier);
85
+
86
+    if (array->index < INSTRUCTION_TABLE_SIZE){
87
+        array->array[array->index] = instru;
88
+        array->index++;
89
+    }
90
+
91
+    return vt;
92
+}
93
+
94
+int gen_return(Table_Symboles * table, instructions_array * array, int adr){
95
+
96
+    //vérifier que non null
97
+    instruction instru;
98
+    instru.operation = RET;
99
+    instru.reg1 = adr;
100
+
101
+    printf("%d RET %d\n",  array->index, adr);
102
+
103
+    if (array->index < INSTRUCTION_TABLE_SIZE){
104
+        array->array[array->index] = instru;
105
+        array->index++;
106
+    }
107
+
108
+    free_temp(table);
109
+
110
+    return adr;
111
+}
112
+
113
+int gen_jmpf(Table_Symboles * table, instructions_array * array, int cond){
114
+       //vérifier que non null
115
+    instruction instru;
116
+    instru.operation = JMPF;
117
+    instru.reg1 = cond;
118
+    instru.reg2 = -1;
119
+
120
+    printf("%d JMPF %d %d\n",  array->index, cond, -1);
121
+
122
+    if (array->index < INSTRUCTION_TABLE_SIZE){
123
+        array->array[array->index] = instru;
124
+        array->index++;
125
+    }
126
+
127
+    free_temp(table);
128
+
129
+    return cond;
130
+}
131
+
132
+void update_jump(instructions_array * array, int if_value, int adr_jmp){
133
+    array->array[if_value].reg2 = adr_jmp;
134
+    printf("%d JMPF %d %d\n",  array->index, array->array[if_value].reg1, array->array[if_value].reg2);
135
+}
136
+
137
+void initialise_asm(instructions_array * array){
138
+    array->index = 0;
139
+}

+ 26
- 7
gen_assembleur.h View File

@@ -2,20 +2,39 @@
2 2
 #define GEN_ASSEMBLEUR_H
3 3
 
4 4
 #define INSTRUCTION_TABLE_SIZE 1000
5
-#define INSTRUCTION_SIZE 100
5
+
6
+#include "table_symboles.h"
7
+
8
+enum operation{ADD, SOU, MUL, DIV, CPY, AFC, RET, JMPF};
9
+
10
+typedef struct instruction{
11
+    enum operation operation;
12
+    int reg1;
13
+    int reg2;
14
+    int reg3;
15
+}instruction;
6 16
 
7 17
 //table des instructions
8
-typedef struct table{
9
-    char* 
10
-}
18
+typedef struct instructions_array{
19
+    instruction array[INSTRUCTION_TABLE_SIZE];
20
+    int index;
21
+} instructions_array;
22
+
23
+
24
+
25
+void gen_arithmetique(instructions_array * array, enum operation op, int arg1, int arg2);
26
+
27
+int gen_var(Table_Symboles * table, instructions_array * array, char * varName);
11 28
 
12
-enum operation{ADD, SUB, MUL, DIV};
29
+int gen_entier(Table_Symboles * table, instructions_array * array, int entier);
13 30
 
31
+int gen_return(Table_Symboles * table, instructions_array * array, int adr);
14 32
 
15
-void gen_arithmetique(enum operation op, int arg1, int arg2);
33
+int gen_jmpf(Table_Symboles * table, instructions_array * array, int cond);
16 34
 
35
+void update_jump(instructions_array * array, int if_value, int adr_jmp);
17 36
 
18 37
 //renvoie l'index (ou valeur?) de la premiere @ dispo
19
-int new_temp();
38
+int new_temp(Table_Symboles * table);
20 39
 
21 40
 #endif

+ 6
- 3
script.sh View File

@@ -4,8 +4,11 @@ gcc -w *.c -ly
4 4
 echo "
5 5
     int main(){
6 6
         const int var1 = 1, var2;
7
-        int var2;
8
-        int var3, var4 = 1;
9
-        return 1;
7
+        int var2 = 2 + 3;
8
+        int var3, var4 = 4;
9
+        if( 4){
10
+            var2 = 6;
11
+        }
12
+        return 5;
10 13
     }
11 14
 " | ./a.out

+ 5
- 6
table_symboles.c View File

@@ -41,17 +41,12 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty
41 41
     return 0;
42 42
 }
43 43
 
44
-int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type, enum Initialised_Variable init){
44
+int add_symbole_bottom(Table_Symboles * table){
45 45
     Symbole symbole;
46
-    strcpy(symbole.Variable_Name, varName);
47 46
     symbole.addr = table->indexAvailableBottom;
48
-    symbole.init = init;
49
-    symbole.type = type;
50 47
     //symbole.symbole_depth = -1;
51 48
     if (table->indexAvailableTop >= table->indexAvailableBottom){
52 49
         return -1;
53
-    } else if (variable_exists(table, varName) != 0){
54
-        return -2;
55 50
     } else {
56 51
         table->array[table->indexAvailableBottom] = symbole;
57 52
         table->indexAvailableBottom--;
@@ -76,6 +71,10 @@ int remove_symboles(Table_Symboles * table, int depth){
76 71
     return 0;
77 72
 }
78 73
 
74
+void free_temp(Table_Symboles * table){
75
+    table->indexAvailableBottom++;
76
+}
77
+
79 78
 int initialise_symbole(Table_Symboles * table, char * varName){
80 79
     int index = variable_exists(table, varName);
81 80
     if (index == -1){

+ 6
- 4
table_symboles.h View File

@@ -41,12 +41,11 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty
41 41
 /**
42 42
  * Adds a symbole at the bottom (temp variables)
43 43
  * @param table
44
- * @param varName
45
- * @param type
46
- * @param init
47 44
  * @return 0 if symbole added successfully, -1 if the table is full and -2 if the varaible already exists in the table
48 45
  */
49
-int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type , enum Initialised_Variable init);
46
+int add_symbole_bottom(Table_Symboles * table);
47
+
48
+
50 49
 
51 50
 /**
52 51
  * Verifies if a varaible name is already present in the table to avoid duplicates
@@ -64,6 +63,9 @@ int variable_exists(Table_Symboles * table, char * varName);
64 63
  */
65 64
 int remove_symboles(Table_Symboles * table, int depth);
66 65
 
66
+
67
+void free_temp(Table_Symboles * table);
68
+
67 69
 /**
68 70
  * Initialises an already exisiting symbole
69 71
  * @param table

Loading…
Cancel
Save