Expression arithmetique OK+if OK

This commit is contained in:
Foussats Morgane 2021-04-06 18:22:31 +02:00
parent 22d9a82ba6
commit f6d265e641
9 changed files with 720 additions and 476 deletions

BIN
a.out

Binary file not shown.

View file

@ -59,28 +59,34 @@ Grammaire
35 SuiteArgs: tVIRGULE tVAR SuiteArgs 35 SuiteArgs: tVIRGULE tVAR SuiteArgs
36 | %empty 36 | %empty
37 If: tIF tPO Cond tPF tAO Instructions tAF Else 37 $@1: %empty
38 Else: tELSE tAO Instructions tAF 38 $@2: %empty
39 | tELSE tIF tPO Cond tPF tAO Instructions tAF Else
40 While: tWHILE tPO Cond tPF tAO Instructions tAF 39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF $@2 Else
41 Cond: E tEGAL E 40 Else: tELSE tAO Instructions tAF
42 | E tDIFF E 41 | %empty
43 | E tLT E 42 | tELSE tIF tPO Cond tPF tAO Instructions tAF Else
44 | E tGT E
45 | E tLTE E
46 | E tGTE E
47 | E tAND Cond
48 | E tOR Cond
49 | tNOT Cond
50 Invocation: tVAR tPO Args tPF 43 While: tWHILE tPO Cond tPF tAO Instructions tAF
51 Print: tPRINT tPO tVAR tPF tPV 44 Cond: E tEGAL E
45 | E tDIFF E
46 | E tLT E
47 | E tGT E
48 | E tLTE E
49 | E tGTE E
50 | E tAND Cond
51 | E tOR Cond
52 | tNOT Cond
53 | E
52 Return: tRETURN E tPV 54 Invocation: tVAR tPO Args tPF
55 Print: tPRINT tPO tVAR tPF tPV
56 Return: tRETURN E tPV
Terminaux, suivis des règles où ils apparaissent Terminaux, suivis des règles où ils apparaissent
@ -93,32 +99,32 @@ tADD (260) 26
tSUB (261) 28 30 tSUB (261) 28 30
tMUL (262) 27 tMUL (262) 27
tDIV (263) 29 tDIV (263) 29
tPO (264) 1 32 37 39 40 50 51 tPO (264) 1 32 39 42 43 54 55
tPF (265) 1 32 37 39 40 50 51 tPF (265) 1 32 39 42 43 54 55
tAO (266) 7 37 38 39 40 tAO (266) 7 39 40 42 43
tAF (267) 7 37 38 39 40 tAF (267) 7 39 40 42 43
tERROR (268) tERROR (268)
tPV (269) 5 15 16 23 51 52 tPV (269) 5 15 16 23 55 56
tVIRGULE (270) 5 17 35 tVIRGULE (270) 5 17 35
tAFFECTATION (271) 21 23 tAFFECTATION (271) 21 23
tEGAL (272) 41 tEGAL (272) 44
tDIFF (273) 42 tDIFF (273) 45
tLT (274) 43 tLT (274) 46
tGT (275) 44 tGT (275) 47
tGTE (276) 46 tGTE (276) 49
tLTE (277) 45 tLTE (277) 48
tMAIN (278) 1 tMAIN (278) 1
tINT (279) 1 4 19 20 tINT (279) 1 4 19 20
tPRINT (280) 51 tPRINT (280) 55
tRETURN (281) 52 tRETURN (281) 56
tOR (282) 48 tOR (282) 51
tAND (283) 47 tAND (283) 50
tIF (284) 37 39 tIF (284) 39 42
tELSE (285) 38 39 tELSE (285) 40 42
tWHILE (286) 40 tWHILE (286) 43
tCONST (287) 20 tCONST (287) 20
tVAR (288) 4 21 22 23 25 33 35 50 51 tVAR (288) 4 21 22 23 25 33 35 54 55
tNOT (289) 49 tNOT (289) 52
Non-terminaux, suivis des règles où ils apparaissent Non-terminaux, suivis des règles où ils apparaissent
@ -136,7 +142,7 @@ SuiteParams (39)
Body (40) Body (40)
à gauche: 7, à droite: 1 à gauche: 7, à droite: 1
Instructions (41) Instructions (41)
à gauche: 8 9, à droite: 7 8 37 38 39 40 à gauche: 8 9, à droite: 7 8 39 40 42 43
Instruction (42) Instruction (42)
à gauche: 10 11 12 13 14 15, à droite: 8 à gauche: 10 11 12 13 14 15, à droite: 8
Decl (43) Decl (43)
@ -151,26 +157,30 @@ Aff (47)
à gauche: 23, à droite: 10 à gauche: 23, à droite: 10
E (48) E (48)
à gauche: 24 25 26 27 28 29 30 31 32, à droite: 21 23 26 27 28 à gauche: 24 25 26 27 28 29 30 31 32, à droite: 21 23 26 27 28
29 30 32 41 42 43 44 45 46 47 48 52 29 30 32 44 45 46 47 48 49 50 51 53 56
Args (49) Args (49)
à gauche: 33 34, à droite: 50 à gauche: 33 34, à droite: 54
SuiteArgs (50) SuiteArgs (50)
à gauche: 35 36, à droite: 33 35 à gauche: 35 36, à droite: 33 35
If (51) If (51)
à gauche: 37, à droite: 11 à gauche: 39, à droite: 11
Else (52) $@1 (52)
à gauche: 38 39, à droite: 37 39 à gauche: 37, à droite: 39
While (53) $@2 (53)
à gauche: 40, à droite: 12 à gauche: 38, à droite: 39
Cond (54) Else (54)
à gauche: 41 42 43 44 45 46 47 48 49, à droite: 37 39 40 47 48 à gauche: 40 41 42, à droite: 39 42
49 While (55)
Invocation (55) à gauche: 43, à droite: 12
à gauche: 50, à droite: 15 31 Cond (56)
Print (56) à gauche: 44 45 46 47 48 49 50 51 52 53, à droite: 39 42 43 50
à gauche: 51, à droite: 13 51 52
Return (57) Invocation (57)
à gauche: 52, à droite: 7 à gauche: 54, à droite: 15 31
Print (58)
à gauche: 55, à droite: 13
Return (59)
à gauche: 56, à droite: 7
État 0 État 0
@ -330,21 +340,21 @@ Return (57)
État 17 État 17
51 Print: tPRINT . tPO tVAR tPF tPV 55 Print: tPRINT . tPO tVAR tPF tPV
tPO décalage et aller à l'état 32 tPO décalage et aller à l'état 32
État 18 État 18
37 If: tIF . tPO Cond tPF tAO Instructions tAF Else 39 If: tIF . tPO Cond tPF $@1 tAO Instructions tAF $@2 Else
tPO décalage et aller à l'état 33 tPO décalage et aller à l'état 33
État 19 État 19
40 While: tWHILE . tPO Cond tPF tAO Instructions tAF 43 While: tWHILE . tPO Cond tPF tAO Instructions tAF
tPO décalage et aller à l'état 34 tPO décalage et aller à l'état 34
@ -359,7 +369,7 @@ Return (57)
État 21 État 21
23 Aff: tVAR . tAFFECTATION E tPV 23 Aff: tVAR . tAFFECTATION E tPV
50 Invocation: tVAR . tPO Args tPF 54 Invocation: tVAR . tPO Args tPF
tPO décalage et aller à l'état 36 tPO décalage et aller à l'état 36
tAFFECTATION décalage et aller à l'état 37 tAFFECTATION décalage et aller à l'état 37
@ -458,14 +468,14 @@ Return (57)
État 32 État 32
51 Print: tPRINT tPO . tVAR tPF tPV 55 Print: tPRINT tPO . tVAR tPF tPV
tVAR décalage et aller à l'état 45 tVAR décalage et aller à l'état 45
État 33 État 33
37 If: tIF tPO . Cond tPF tAO Instructions tAF Else 39 If: tIF tPO . Cond tPF $@1 tAO Instructions tAF $@2 Else
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -480,7 +490,7 @@ Return (57)
État 34 État 34
40 While: tWHILE tPO . Cond tPF tAO Instructions tAF 43 While: tWHILE tPO . Cond tPF tAO Instructions tAF
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -502,7 +512,7 @@ Return (57)
État 36 État 36
50 Invocation: tVAR tPO . Args tPF 54 Invocation: tVAR tPO . Args tPF
tVAR décalage et aller à l'état 55 tVAR décalage et aller à l'état 55
@ -526,7 +536,7 @@ Return (57)
État 38 État 38
52 Return: tRETURN . E tPV 56 Return: tRETURN . E tPV
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -588,7 +598,7 @@ Return (57)
État 45 État 45
51 Print: tPRINT tPO tVAR . tPF tPV 55 Print: tPRINT tPO tVAR . tPF tPV
tPF décalage et aller à l'état 63 tPF décalage et aller à l'état 63
@ -629,7 +639,7 @@ Return (57)
État 49 État 49
25 E: tVAR . 25 E: tVAR .
50 Invocation: tVAR . tPO Args tPF 54 Invocation: tVAR . tPO Args tPF
tPO décalage et aller à l'état 36 tPO décalage et aller à l'état 36
@ -638,7 +648,7 @@ Return (57)
État 50 État 50
49 Cond: tNOT . Cond 52 Cond: tNOT . Cond
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -657,14 +667,15 @@ Return (57)
27 | E . tMUL E 27 | E . tMUL E
28 | E . tSUB E 28 | E . tSUB E
29 | E . tDIV E 29 | E . tDIV E
41 Cond: E . tEGAL E 44 Cond: E . tEGAL E
42 | E . tDIFF E 45 | E . tDIFF E
43 | E . tLT E 46 | E . tLT E
44 | E . tGT E 47 | E . tGT E
45 | E . tLTE E 48 | E . tLTE E
46 | E . tGTE E 49 | E . tGTE E
47 | E . tAND Cond 50 | E . tAND Cond
48 | E . tOR Cond 51 | E . tOR Cond
53 | E .
tADD décalage et aller à l'état 67 tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68 tSUB décalage et aller à l'état 68
@ -679,10 +690,12 @@ Return (57)
tOR décalage et aller à l'état 77 tOR décalage et aller à l'état 77
tAND décalage et aller à l'état 78 tAND décalage et aller à l'état 78
$défaut réduction par utilisation de la règle 53 (Cond)
État 52 État 52
37 If: tIF tPO Cond . tPF tAO Instructions tAF Else 39 If: tIF tPO Cond . tPF $@1 tAO Instructions tAF $@2 Else
tPF décalage et aller à l'état 79 tPF décalage et aller à l'état 79
@ -696,7 +709,7 @@ Return (57)
État 54 État 54
40 While: tWHILE tPO Cond . tPF tAO Instructions tAF 43 While: tWHILE tPO Cond . tPF tAO Instructions tAF
tPF décalage et aller à l'état 80 tPF décalage et aller à l'état 80
@ -714,7 +727,7 @@ Return (57)
État 56 État 56
50 Invocation: tVAR tPO Args . tPF 54 Invocation: tVAR tPO Args . tPF
tPF décalage et aller à l'état 83 tPF décalage et aller à l'état 83
@ -740,7 +753,7 @@ Return (57)
27 | E . tMUL E 27 | E . tMUL E
28 | E . tSUB E 28 | E . tSUB E
29 | E . tDIV E 29 | E . tDIV E
52 Return: tRETURN E . tPV 56 Return: tRETURN E . tPV
tADD décalage et aller à l'état 67 tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68 tSUB décalage et aller à l'état 68
@ -787,7 +800,7 @@ Return (57)
État 63 État 63
51 Print: tPRINT tPO tVAR tPF . tPV 55 Print: tPRINT tPO tVAR tPF . tPV
tPV décalage et aller à l'état 89 tPV décalage et aller à l'état 89
@ -823,9 +836,9 @@ Return (57)
État 66 État 66
49 Cond: tNOT Cond . 52 Cond: tNOT Cond .
$défaut réduction par utilisation de la règle 49 (Cond) $défaut réduction par utilisation de la règle 52 (Cond)
État 67 État 67
@ -882,7 +895,7 @@ Return (57)
État 71 État 71
41 Cond: E tEGAL . E 44 Cond: E tEGAL . E
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -895,7 +908,7 @@ Return (57)
État 72 État 72
42 Cond: E tDIFF . E 45 Cond: E tDIFF . E
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -908,7 +921,7 @@ Return (57)
État 73 État 73
43 Cond: E tLT . E 46 Cond: E tLT . E
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -921,7 +934,7 @@ Return (57)
État 74 État 74
44 Cond: E tGT . E 47 Cond: E tGT . E
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -934,7 +947,7 @@ Return (57)
État 75 État 75
46 Cond: E tGTE . E 49 Cond: E tGTE . E
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -947,7 +960,7 @@ Return (57)
État 76 État 76
45 Cond: E tLTE . E 48 Cond: E tLTE . E
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -960,7 +973,7 @@ Return (57)
État 77 État 77
48 Cond: E tOR . Cond 51 Cond: E tOR . Cond
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -975,7 +988,7 @@ Return (57)
État 78 État 78
47 Cond: E tAND . Cond 50 Cond: E tAND . Cond
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -990,14 +1003,16 @@ Return (57)
État 79 État 79
37 If: tIF tPO Cond tPF . tAO Instructions tAF Else 39 If: tIF tPO Cond tPF . $@1 tAO Instructions tAF $@2 Else
tAO décalage et aller à l'état 103 $défaut réduction par utilisation de la règle 37 ($@1)
$@1 aller à l'état 103
État 80 État 80
40 While: tWHILE tPO Cond tPF . tAO Instructions tAF 43 While: tWHILE tPO Cond tPF . tAO Instructions tAF
tAO décalage et aller à l'état 104 tAO décalage et aller à l'état 104
@ -1018,9 +1033,9 @@ Return (57)
État 83 État 83
50 Invocation: tVAR tPO Args tPF . 54 Invocation: tVAR tPO Args tPF .
$défaut réduction par utilisation de la règle 50 (Invocation) $défaut réduction par utilisation de la règle 54 (Invocation)
État 84 État 84
@ -1032,9 +1047,9 @@ Return (57)
État 85 État 85
52 Return: tRETURN E tPV . 56 Return: tRETURN E tPV .
$défaut réduction par utilisation de la règle 52 (Return) $défaut réduction par utilisation de la règle 56 (Return)
État 86 État 86
@ -1073,9 +1088,9 @@ Return (57)
État 89 État 89
51 Print: tPRINT tPO tVAR tPF tPV . 55 Print: tPRINT tPO tVAR tPF tPV .
$défaut réduction par utilisation de la règle 51 (Print) $défaut réduction par utilisation de la règle 55 (Print)
État 90 État 90
@ -1144,55 +1159,7 @@ Return (57)
27 | E . tMUL E 27 | E . tMUL E
28 | E . tSUB E 28 | E . tSUB E
29 | E . tDIV E 29 | E . tDIV E
41 Cond: E tEGAL E . 44 Cond: E tEGAL E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 41 (Cond)
État 96
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
42 Cond: E tDIFF E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 42 (Cond)
État 97
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
43 Cond: E tLT E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 43 (Cond)
État 98
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
44 Cond: E tGT E .
tADD décalage et aller à l'état 67 tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68 tSUB décalage et aller à l'état 68
@ -1202,29 +1169,13 @@ Return (57)
$défaut réduction par utilisation de la règle 44 (Cond) $défaut réduction par utilisation de la règle 44 (Cond)
État 99 État 96
26 E: E . tADD E 26 E: E . tADD E
27 | E . tMUL E 27 | E . tMUL E
28 | E . tSUB E 28 | E . tSUB E
29 | E . tDIV E 29 | E . tDIV E
46 Cond: E tGTE E . 45 Cond: E tDIFF E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 46 (Cond)
État 100
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
45 Cond: E tLTE E .
tADD décalage et aller à l'état 67 tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68 tSUB décalage et aller à l'état 68
@ -1234,47 +1185,94 @@ Return (57)
$défaut réduction par utilisation de la règle 45 (Cond) $défaut réduction par utilisation de la règle 45 (Cond)
État 101 État 97
48 Cond: E tOR Cond . 26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
46 Cond: E tLT E .
$défaut réduction par utilisation de la règle 48 (Cond) tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 46 (Cond)
État 102 État 98
47 Cond: E tAND Cond . 26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
47 Cond: E tGT E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 47 (Cond) $défaut réduction par utilisation de la règle 47 (Cond)
État 99
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
49 Cond: E tGTE E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 49 (Cond)
État 100
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
48 Cond: E tLTE E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
tMUL décalage et aller à l'état 69
tDIV décalage et aller à l'état 70
$défaut réduction par utilisation de la règle 48 (Cond)
État 101
51 Cond: E tOR Cond .
$défaut réduction par utilisation de la règle 51 (Cond)
État 102
50 Cond: E tAND Cond .
$défaut réduction par utilisation de la règle 50 (Cond)
État 103 État 103
37 If: tIF tPO Cond tPF tAO . Instructions tAF Else 39 If: tIF tPO Cond tPF $@1 . tAO Instructions tAF $@2 Else
tINT décalage et aller à l'état 16 tAO décalage et aller à l'état 107
tPRINT décalage et aller à l'état 17
tIF décalage et aller à l'état 18
tWHILE décalage et aller à l'état 19
tCONST décalage et aller à l'état 20
tVAR décalage et aller à l'état 21
$défaut réduction par utilisation de la règle 9 (Instructions)
Instructions aller à l'état 107
Instruction aller à l'état 23
Decl aller à l'état 24
Type aller à l'état 25
Aff aller à l'état 26
If aller à l'état 27
While aller à l'état 28
Invocation aller à l'état 29
Print aller à l'état 30
État 104 État 104
40 While: tWHILE tPO Cond tPF tAO . Instructions tAF 43 While: tWHILE tPO Cond tPF tAO . Instructions tAF
tINT décalage et aller à l'état 16 tINT décalage et aller à l'état 16
tPRINT décalage et aller à l'état 17 tPRINT décalage et aller à l'état 17
@ -1316,14 +1314,31 @@ Return (57)
État 107 État 107
37 If: tIF tPO Cond tPF tAO Instructions . tAF Else 39 If: tIF tPO Cond tPF $@1 tAO . Instructions tAF $@2 Else
tAF décalage et aller à l'état 110 tINT décalage et aller à l'état 16
tPRINT décalage et aller à l'état 17
tIF décalage et aller à l'état 18
tWHILE décalage et aller à l'état 19
tCONST décalage et aller à l'état 20
tVAR décalage et aller à l'état 21
$défaut réduction par utilisation de la règle 9 (Instructions)
Instructions aller à l'état 110
Instruction aller à l'état 23
Decl aller à l'état 24
Type aller à l'état 25
Aff aller à l'état 26
If aller à l'état 27
While aller à l'état 28
Invocation aller à l'état 29
Print aller à l'état 30
État 108 État 108
40 While: tWHILE tPO Cond tPF tAO Instructions . tAF 43 While: tWHILE tPO Cond tPF tAO Instructions . tAF
tAF décalage et aller à l'état 111 tAF décalage et aller à l'état 111
@ -1337,39 +1352,57 @@ Return (57)
État 110 État 110
37 If: tIF tPO Cond tPF tAO Instructions tAF . Else 39 If: tIF tPO Cond tPF $@1 tAO Instructions . tAF $@2 Else
tELSE décalage et aller à l'état 112 tAF décalage et aller à l'état 112
Else aller à l'état 113
État 111 État 111
40 While: tWHILE tPO Cond tPF tAO Instructions tAF . 43 While: tWHILE tPO Cond tPF tAO Instructions tAF .
$défaut réduction par utilisation de la règle 40 (While) $défaut réduction par utilisation de la règle 43 (While)
État 112 État 112
38 Else: tELSE . tAO Instructions tAF 39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF . $@2 Else
39 | tELSE . tIF tPO Cond tPF tAO Instructions tAF Else
tAO décalage et aller à l'état 114 $défaut réduction par utilisation de la règle 38 ($@2)
tIF décalage et aller à l'état 115
$@2 aller à l'état 113
État 113 État 113
37 If: tIF tPO Cond tPF tAO Instructions tAF Else . 39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF $@2 . Else
$défaut réduction par utilisation de la règle 37 (If) tELSE décalage et aller à l'état 114
$défaut réduction par utilisation de la règle 41 (Else)
Else aller à l'état 115
État 114 État 114
38 Else: tELSE tAO . Instructions tAF 40 Else: tELSE . tAO Instructions tAF
42 | tELSE . tIF tPO Cond tPF tAO Instructions tAF Else
tAO décalage et aller à l'état 116
tIF décalage et aller à l'état 117
État 115
39 If: tIF tPO Cond tPF $@1 tAO Instructions tAF $@2 Else .
$défaut réduction par utilisation de la règle 39 (If)
État 116
40 Else: tELSE tAO . Instructions tAF
tINT décalage et aller à l'état 16 tINT décalage et aller à l'état 16
tPRINT décalage et aller à l'état 17 tPRINT décalage et aller à l'état 17
@ -1380,7 +1413,7 @@ Return (57)
$défaut réduction par utilisation de la règle 9 (Instructions) $défaut réduction par utilisation de la règle 9 (Instructions)
Instructions aller à l'état 116 Instructions aller à l'état 118
Instruction aller à l'état 23 Instruction aller à l'état 23
Decl aller à l'état 24 Decl aller à l'état 24
Type aller à l'état 25 Type aller à l'état 25
@ -1391,23 +1424,23 @@ Return (57)
Print aller à l'état 30 Print aller à l'état 30
État 115
39 Else: tELSE tIF . tPO Cond tPF tAO Instructions tAF Else
tPO décalage et aller à l'état 117
État 116
38 Else: tELSE tAO Instructions . tAF
tAF décalage et aller à l'état 118
État 117 État 117
39 Else: tELSE tIF tPO . Cond tPF tAO Instructions tAF Else 42 Else: tELSE tIF . tPO Cond tPF tAO Instructions tAF Else
tPO décalage et aller à l'état 119
État 118
40 Else: tELSE tAO Instructions . tAF
tAF décalage et aller à l'état 120
État 119
42 Else: tELSE tIF tPO . Cond tPF tAO Instructions tAF Else
tENTIER décalage et aller à l'état 46 tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47 tSUB décalage et aller à l'état 47
@ -1416,34 +1449,34 @@ Return (57)
tNOT décalage et aller à l'état 50 tNOT décalage et aller à l'état 50
E aller à l'état 51 E aller à l'état 51
Cond aller à l'état 119 Cond aller à l'état 121
Invocation aller à l'état 53 Invocation aller à l'état 53
État 118
38 Else: tELSE tAO Instructions tAF .
$défaut réduction par utilisation de la règle 38 (Else)
État 119
39 Else: tELSE tIF tPO Cond . tPF tAO Instructions tAF Else
tPF décalage et aller à l'état 120
État 120 État 120
39 Else: tELSE tIF tPO Cond tPF . tAO Instructions tAF Else 40 Else: tELSE tAO Instructions tAF .
tAO décalage et aller à l'état 121 $défaut réduction par utilisation de la règle 40 (Else)
État 121 État 121
39 Else: tELSE tIF tPO Cond tPF tAO . Instructions tAF Else 42 Else: tELSE tIF tPO Cond . tPF tAO Instructions tAF Else
tPF décalage et aller à l'état 122
État 122
42 Else: tELSE tIF tPO Cond tPF . tAO Instructions tAF Else
tAO décalage et aller à l'état 123
État 123
42 Else: tELSE tIF tPO Cond tPF tAO . Instructions tAF Else
tINT décalage et aller à l'état 16 tINT décalage et aller à l'état 16
tPRINT décalage et aller à l'état 17 tPRINT décalage et aller à l'état 17
@ -1454,7 +1487,7 @@ Return (57)
$défaut réduction par utilisation de la règle 9 (Instructions) $défaut réduction par utilisation de la règle 9 (Instructions)
Instructions aller à l'état 122 Instructions aller à l'état 124
Instruction aller à l'état 23 Instruction aller à l'état 23
Decl aller à l'état 24 Decl aller à l'état 24
Type aller à l'état 25 Type aller à l'état 25
@ -1465,24 +1498,26 @@ Return (57)
Print aller à l'état 30 Print aller à l'état 30
État 122
39 Else: tELSE tIF tPO Cond tPF tAO Instructions . tAF Else
tAF décalage et aller à l'état 123
État 123
39 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF . Else
tELSE décalage et aller à l'état 112
Else aller à l'état 124
État 124 État 124
39 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF Else . 42 Else: tELSE tIF tPO Cond tPF tAO Instructions . tAF Else
$défaut réduction par utilisation de la règle 39 (Else) tAF décalage et aller à l'état 125
État 125
42 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF . Else
tELSE décalage et aller à l'état 114
$défaut réduction par utilisation de la règle 41 (Else)
Else aller à l'état 126
État 126
42 Else: tELSE tIF tPO Cond tPF tAO Instructions tAF Else .
$défaut réduction par utilisation de la règle 42 (Else)

View file

@ -163,12 +163,14 @@ int yyparse (void);
#include <stdio.h> #include <stdio.h>
#include "table_symboles.h" #include "table_symboles.h"
#include "gen_assembleur.h"
enum Initialised_Variable init; enum Initialised_Variable init;
enum Symbole_Type type; enum Symbole_Type type;
Table_Symboles table; Table_Symboles table;
instructions_array array;
#line 172 "analyse_syntaxique.tab.c" /* yacc.c:358 */ #line 174 "analyse_syntaxique.tab.c" /* yacc.c:358 */
#ifdef short #ifdef short
# undef short # undef short
@ -410,16 +412,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */ /* YYFINAL -- State number of the termination state. */
#define YYFINAL 4 #define YYFINAL 4
/* YYLAST -- Last index in YYTABLE. */ /* YYLAST -- Last index in YYTABLE. */
#define YYLAST 133 #define YYLAST 134
/* YYNTOKENS -- Number of terminals. */ /* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 35 #define YYNTOKENS 35
/* YYNNTS -- Number of nonterminals. */ /* YYNNTS -- Number of nonterminals. */
#define YYNNTS 23 #define YYNNTS 25
/* YYNRULES -- Number of rules. */ /* YYNRULES -- Number of rules. */
#define YYNRULES 53 #define YYNRULES 57
/* YYNSTATES -- Number of states. */ /* YYNSTATES -- Number of states. */
#define YYNSTATES 125 #define YYNSTATES 127
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */ by yylex, with out-of-bounds checking. */
@ -468,12 +470,12 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] = static const yytype_uint8 yyrline[] =
{ {
0, 68, 68, 70, 71, 73, 76, 77, 80, 82, 0, 75, 75, 77, 78, 80, 83, 84, 87, 89,
83, 85, 86, 87, 88, 89, 90, 92, 94, 95, 90, 92, 93, 94, 95, 96, 97, 99, 101, 102,
97, 98, 100, 101, 104, 106, 107, 108, 109, 110, 104, 105, 107, 108, 111, 113, 114, 115, 116, 117,
111, 112, 113, 114, 117, 118, 120, 121, 123, 125, 118, 119, 120, 121, 124, 125, 127, 128, 130, 135,
126, 128, 130, 131, 132, 133, 134, 135, 136, 137, 130, 141, 142, 143, 145, 147, 148, 149, 150, 151,
138, 140, 142, 144 152, 153, 154, 155, 156, 158, 160, 162
}; };
#endif #endif
@ -489,7 +491,7 @@ static const char *const yytname[] =
"tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param", "tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param",
"SuiteParams", "Body", "Instructions", "Instruction", "Decl", "SuiteParams", "Body", "Instructions", "Instruction", "Decl",
"SuiteDecl", "Type", "Valeur", "Aff", "E", "Args", "SuiteArgs", "If", "SuiteDecl", "Type", "Valeur", "Aff", "E", "Args", "SuiteArgs", "If",
"Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR "$@1", "$@2", "Else", "While", "Cond", "Invocation", "Print", "Return", YY_NULLPTR
}; };
#endif #endif
@ -505,10 +507,10 @@ static const yytype_uint16 yytoknum[] =
}; };
# endif # endif
#define YYPACT_NINF -35 #define YYPACT_NINF -34
#define yypact_value_is_default(Yystate) \ #define yypact_value_is_default(Yystate) \
(!!((Yystate) == (-35))) (!!((Yystate) == (-34)))
#define YYTABLE_NINF -1 #define YYTABLE_NINF -1
@ -519,19 +521,19 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */ STATE-NUM. */
static const yytype_int8 yypact[] = static const yytype_int8 yypact[] =
{ {
-3, -12, 31, 34, -35, 20, 25, 50, 44, -35, -18, -14, 22, 35, -34, 8, 12, 49, 45, -34,
57, 20, -35, 46, -35, 44, -35, 52, 60, 65, 51, 8, -34, 47, -34, 45, -34, 52, 60, 61,
56, -4, 58, 46, -35, 43, -35, -35, -35, 69, 53, -8, 55, 47, -34, 42, -34, -34, -34, 68,
-35, 79, 61, 14, 14, -35, 63, 16, 16, 85, -34, 70, 54, 15, 15, -34, 56, 17, 17, 73,
-35, 82, 91, -35, -35, 90, -35, 16, 16, 98, -34, 74, 77, -34, -34, 83, -34, 17, 17, 92,
14, 45, 99, -35, 100, 101, 102, 81, 97, -35, 15, 46, 90, -34, 94, 96, 102, 91, 101, -34,
16, 43, 103, 104, 8, 22, -35, 16, 16, 16, 17, 42, 99, 100, 9, 23, -34, 17, 17, 17,
16, 16, 16, 16, 16, 16, 16, 14, 14, 108, 17, 17, 17, 17, 17, 17, 17, 15, 15, -34,
109, 80, -35, -35, -35, -35, 49, 91, -35, -35, 105, 84, -34, -34, -34, -34, 50, 77, -34, -34,
-35, 1, 8, 106, -35, 49, 49, 49, 49, 49, -34, 5, 9, 110, -34, 50, 50, 50, 50, 50,
49, -35, -35, 46, 46, 101, -35, 110, 111, -35, 50, -34, -34, 108, 47, 96, -34, 47, 109, -34,
94, -35, -5, -35, 46, 112, 113, 14, -35, 105, 111, -34, -34, 95, -4, -34, 47, 113, 112, 15,
115, 46, 116, 94, -35 -34, 116, 117, 47, 115, 95, -34
}; };
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@ -544,30 +546,30 @@ static const yytype_uint8 yydefact[] =
0, 0, 0, 10, 15, 0, 11, 12, 13, 0, 0, 0, 0, 10, 15, 0, 11, 12, 13, 0,
14, 0, 0, 0, 0, 21, 35, 0, 0, 0, 14, 0, 0, 0, 0, 21, 35, 0, 0, 0,
9, 23, 19, 16, 6, 0, 25, 0, 0, 26, 9, 23, 19, 16, 6, 0, 25, 0, 0, 26,
0, 0, 0, 32, 0, 37, 0, 0, 0, 8, 0, 54, 0, 32, 0, 37, 0, 0, 0, 8,
0, 0, 0, 0, 31, 0, 50, 0, 0, 0, 0, 0, 0, 0, 31, 0, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38,
0, 0, 34, 51, 24, 53, 22, 19, 17, 52, 0, 0, 34, 55, 24, 57, 22, 19, 17, 56,
33, 27, 29, 28, 30, 42, 43, 44, 45, 47, 33, 27, 29, 28, 30, 45, 46, 47, 48, 50,
46, 49, 48, 10, 10, 37, 18, 0, 0, 36, 49, 52, 51, 0, 10, 37, 18, 10, 0, 36,
0, 41, 0, 38, 10, 0, 0, 0, 39, 0, 0, 44, 39, 42, 0, 40, 10, 0, 0, 0,
0, 10, 0, 0, 40 41, 0, 0, 10, 0, 42, 43
}; };
/* YYPGOTO[NTERM-NUM]. */ /* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] = static const yytype_int8 yypgoto[] =
{ {
-35, -35, -35, 118, 117, -35, -22, -35, -35, 40, -34, -34, -34, 118, 119, -34, -21, -34, -34, 33,
-35, 70, -35, -34, -35, 28, -35, 7, -35, -32, -34, 69, -34, -33, -34, 26, -34, -34, -34, 7,
-13, -35, -35 -34, -31, -13, -34, -34
}; };
/* YYDEFGOTO[NTERM-NUM]. */ /* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] = static const yytype_int8 yydefgoto[] =
{ {
-1, 2, 7, 8, 12, 14, 22, 23, 24, 62, -1, 2, 7, 8, 12, 14, 22, 23, 24, 62,
25, 42, 26, 51, 56, 82, 27, 113, 28, 52, 25, 42, 26, 51, 56, 82, 27, 103, 113, 115,
53, 30, 39 28, 52, 53, 30, 39
}; };
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@ -575,38 +577,38 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */ number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_uint8 yytable[] = static const yytype_uint8 yytable[] =
{ {
29, 40, 54, 57, 58, 36, 114, 68, 69, 70, 29, 36, 40, 54, 57, 58, 1, 116, 37, 3,
29, 3, 37, 64, 65, 69, 70, 46, 66, 46, 29, 68, 69, 70, 64, 65, 69, 70, 46, 66,
47, 1, 47, 48, 115, 48, 86, 67, 68, 69, 46, 47, 4, 47, 48, 117, 48, 86, 67, 68,
70, 4, 90, 91, 92, 93, 94, 95, 96, 97, 69, 70, 6, 90, 91, 92, 93, 94, 95, 96,
98, 99, 100, 5, 6, 101, 102, 49, 50, 49, 97, 98, 99, 100, 5, 9, 101, 102, 49, 50,
67, 68, 69, 70, 67, 68, 69, 70, 9, 11, 49, 67, 68, 69, 70, 67, 68, 69, 70, 10,
10, 32, 71, 72, 73, 74, 75, 76, 13, 33, 11, 32, 13, 71, 72, 73, 74, 75, 76, 33,
16, 17, 77, 78, 34, 18, 41, 19, 20, 21, 34, 16, 17, 77, 78, 41, 18, 35, 19, 20,
35, 107, 108, 43, 38, 119, 67, 68, 69, 70, 21, 38, 43, 108, 44, 59, 110, 45, 121, 55,
29, 29, 116, 44, 45, 84, 55, 59, 60, 122, 60, 29, 61, 63, 29, 118, 67, 68, 69, 70,
63, 29, 67, 68, 69, 70, 61, 36, 29, 79, 79, 36, 124, 29, 80, 84, 67, 68, 69, 70,
80, 85, 83, 105, 70, 120, 81, 88, 89, 103, 29, 81, 83, 88, 89, 85, 104, 105, 70, 107,
104, 117, 110, 111, 112, 118, 121, 106, 123, 15, 106, 111, 119, 112, 120, 114, 122, 125, 123, 15,
124, 87, 31, 109 87, 109, 126, 0, 31
}; };
static const yytype_uint8 yycheck[] = static const yytype_int8 yycheck[] =
{ {
13, 23, 34, 37, 38, 9, 11, 6, 7, 8, 13, 9, 23, 34, 37, 38, 24, 11, 16, 23,
23, 23, 16, 47, 48, 7, 8, 3, 50, 3, 23, 6, 7, 8, 47, 48, 7, 8, 3, 50,
6, 24, 6, 9, 29, 9, 60, 5, 6, 7, 3, 6, 0, 6, 9, 29, 9, 60, 5, 6,
8, 0, 10, 67, 68, 69, 70, 71, 72, 73, 7, 8, 24, 10, 67, 68, 69, 70, 71, 72,
74, 75, 76, 9, 24, 77, 78, 33, 34, 33, 73, 74, 75, 76, 9, 33, 77, 78, 33, 34,
5, 6, 7, 8, 5, 6, 7, 8, 33, 15, 33, 5, 6, 7, 8, 5, 6, 7, 8, 10,
10, 9, 17, 18, 19, 20, 21, 22, 11, 9, 15, 9, 11, 17, 18, 19, 20, 21, 22, 9,
24, 25, 27, 28, 9, 29, 33, 31, 32, 33, 9, 24, 25, 27, 28, 33, 29, 24, 31, 32,
24, 103, 104, 14, 26, 117, 5, 6, 7, 8, 33, 26, 14, 104, 14, 12, 107, 33, 119, 33,
103, 104, 114, 14, 33, 14, 33, 12, 16, 121, 16, 104, 15, 10, 107, 116, 5, 6, 7, 8,
10, 114, 5, 6, 7, 8, 15, 9, 121, 10, 10, 9, 123, 116, 10, 14, 5, 6, 7, 8,
10, 14, 10, 33, 8, 10, 15, 14, 14, 11, 123, 15, 10, 14, 14, 14, 11, 33, 8, 11,
11, 9, 12, 12, 30, 12, 11, 87, 12, 11, 87, 12, 9, 12, 12, 30, 10, 12, 11, 11,
123, 61, 15, 105 61, 105, 125, -1, 15
}; };
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@ -615,17 +617,17 @@ static const yytype_uint8 yystos[] =
{ {
0, 24, 36, 23, 0, 9, 24, 37, 38, 33, 0, 24, 36, 23, 0, 9, 24, 37, 38, 33,
10, 15, 39, 11, 40, 38, 24, 25, 29, 31, 10, 15, 39, 11, 40, 38, 24, 25, 29, 31,
32, 33, 41, 42, 43, 45, 47, 51, 53, 55, 32, 33, 41, 42, 43, 45, 47, 51, 55, 57,
56, 39, 9, 9, 9, 24, 9, 16, 26, 57, 58, 39, 9, 9, 9, 24, 9, 16, 26, 59,
41, 33, 46, 14, 14, 33, 3, 6, 9, 33, 41, 33, 46, 14, 14, 33, 3, 6, 9, 33,
34, 48, 54, 55, 54, 33, 49, 48, 48, 12, 34, 48, 56, 57, 56, 33, 49, 48, 48, 12,
16, 15, 44, 10, 48, 48, 54, 5, 6, 7, 16, 15, 44, 10, 48, 48, 56, 5, 6, 7,
8, 17, 18, 19, 20, 21, 22, 27, 28, 10, 8, 17, 18, 19, 20, 21, 22, 27, 28, 10,
10, 15, 50, 10, 14, 14, 48, 46, 14, 14, 10, 15, 50, 10, 14, 14, 48, 46, 14, 14,
10, 48, 48, 48, 48, 48, 48, 48, 48, 48, 10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 54, 54, 11, 11, 33, 44, 41, 41, 50, 48, 56, 56, 52, 11, 33, 44, 11, 41, 50,
12, 12, 30, 52, 11, 29, 41, 9, 12, 54, 41, 12, 12, 53, 30, 54, 11, 29, 41, 9,
10, 11, 41, 12, 52 12, 56, 10, 11, 41, 12, 54
}; };
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
@ -634,9 +636,9 @@ static const yytype_uint8 yyr1[] =
0, 35, 36, 37, 37, 38, 39, 39, 40, 41, 0, 35, 36, 37, 37, 38, 39, 39, 40, 41,
41, 42, 42, 42, 42, 42, 42, 43, 44, 44, 41, 42, 42, 42, 42, 42, 42, 43, 44, 44,
45, 45, 46, 46, 47, 48, 48, 48, 48, 48, 45, 45, 46, 46, 47, 48, 48, 48, 48, 48,
48, 48, 48, 48, 49, 49, 50, 50, 51, 52, 48, 48, 48, 48, 49, 49, 50, 50, 52, 53,
52, 53, 54, 54, 54, 54, 54, 54, 54, 54, 51, 54, 54, 54, 55, 56, 56, 56, 56, 56,
54, 55, 56, 57 56, 56, 56, 56, 56, 57, 58, 59
}; };
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@ -645,9 +647,9 @@ static const yytype_uint8 yyr2[] =
0, 2, 6, 0, 2, 2, 4, 0, 4, 2, 0, 2, 6, 0, 2, 2, 4, 0, 4, 2,
0, 1, 1, 1, 1, 1, 2, 4, 3, 0, 0, 1, 1, 1, 1, 1, 2, 4, 3, 0,
1, 2, 3, 1, 4, 1, 1, 3, 3, 3, 1, 2, 3, 1, 4, 1, 1, 3, 3, 3,
3, 2, 1, 3, 2, 0, 3, 0, 8, 4, 3, 2, 1, 3, 2, 0, 3, 0, 0, 0,
9, 7, 3, 3, 3, 3, 3, 3, 3, 3, 10, 4, 0, 9, 7, 3, 3, 3, 3, 3,
2, 4, 5, 3 3, 3, 3, 2, 1, 4, 5, 3
}; };
@ -1324,205 +1326,229 @@ yyreduce:
switch (yyn) switch (yyn)
{ {
case 2: case 2:
#line 68 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 75 "analyse_syntaxique.y" /* yacc.c:1646 */
{} {}
#line 1330 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1332 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 3: case 3:
#line 70 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 77 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Sans params\n");} {printf("Sans params\n");}
#line 1336 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1338 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 5: case 5:
#line 73 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 80 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Parametre : %s\n", (yyvsp[0].id));} {printf("Parametre : %s\n", (yyvsp[0].id));}
#line 1342 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1344 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 8: case 8:
#line 80 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 87 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans body\n");} {printf("Dans body\n");}
#line 1348 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1350 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 20: case 20:
#line 97 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 104 "analyse_syntaxique.y" /* yacc.c:1646 */
{type = TYPE_INT;} {type = TYPE_INT;}
#line 1354 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1356 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 21: case 21:
#line 98 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 105 "analyse_syntaxique.y" /* yacc.c:1646 */
{type = TYPE_CONST_INT;} {type = TYPE_CONST_INT;}
#line 1360 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1362 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 22: case 22:
#line 100 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 107 "analyse_syntaxique.y" /* yacc.c:1646 */
{add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth);} {add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth); free_temp(&table);}
#line 1366 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1368 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 23: case 23:
#line 101 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 108 "analyse_syntaxique.y" /* yacc.c:1646 */
{add_symbole_top(&table, (yyvsp[0].id), type, NOT_INITIALISED, table.depth);} {add_symbole_top(&table, (yyvsp[0].id), type, NOT_INITIALISED, table.depth);}
#line 1372 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1374 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 24: case 24:
#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 111 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Affectation : %s\n", (yyvsp[-3].id));} {printf("Affectation : %s\n", (yyvsp[-3].id)); free_temp(&table);}
#line 1378 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1380 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 25: case 25:
#line 106 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 113 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("int %d\n", (yyvsp[0].nombre));} {int vt = gen_entier(&table, &array, (yyvsp[0].nombre)); (yyval.nombre) = vt;}
#line 1384 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1386 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 26: case 26:
#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 114 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("var %s\n", (yyvsp[0].id));} {int vt = gen_var(&table, &array, (yyvsp[0].id)); (yyval.nombre) = vt;}
#line 1390 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1392 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 27: case 27:
#line 108 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 115 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Addition\n");} {gen_arithmetique(&array, ADD, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1396 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1398 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 28: case 28:
#line 109 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 116 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Multiplication\n");} {gen_arithmetique(&array, MUL, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1402 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1404 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 29: case 29:
#line 110 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 117 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Soustraction\n");} {gen_arithmetique(&array, SOU, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1408 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1410 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 30: case 30:
#line 111 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 118 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Division\n");} {gen_arithmetique(&array, DIV, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1414 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1416 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 31: case 31:
#line 112 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 119 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Soustraction\n");} {printf("Variable negative\n");}
#line 1420 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1422 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 32:
#line 120 "analyse_syntaxique.y" /* yacc.c:1646 */
{(yyval.nombre) = 1234;}
#line 1428 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 33: case 33:
#line 114 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 121 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Parenthèse\n");} {printf("Parenthèse\n"); (yyval.nombre) = (yyvsp[-1].nombre); }
#line 1426 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1434 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 38: case 38:
#line 123 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 130 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans if\n");} {
#line 1432 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ gen_jmpf(&table, &array, (yyvsp[-1].nombre));
(yyvsp[-3].nombre) = array.index;
}
#line 1443 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 39: case 39:
#line 125 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 135 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("else\n");} {
#line 1438 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ int adr_jmp = array.index;
update_jump(&array, (yyvsp[-7].nombre), adr_jmp);
}
#line 1452 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 40: case 40:
#line 126 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 139 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("elsif\n");} {printf("Dans if\n");}
#line 1444 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1458 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 41: case 41:
#line 128 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 141 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans while\n");} {printf("else\n");}
#line 1450 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1464 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 42:
#line 130 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond ==\n");}
#line 1456 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 43: case 43:
#line 131 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 143 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond !=\n");} {printf("elsif\n");}
#line 1462 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1470 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 44: case 44:
#line 132 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 145 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond <\n");} {printf("Dans while\n");}
#line 1468 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1476 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 45: case 45:
#line 133 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 147 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond >\n");} {printf("Cond ==\n");}
#line 1474 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1482 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 46: case 46:
#line 134 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 148 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond <=\n");} {printf("Cond !=\n");}
#line 1480 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1488 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 47: case 47:
#line 135 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 149 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond >=\n");} {printf("Cond <\n");}
#line 1486 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1494 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 48: case 48:
#line 136 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 150 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond &&\n");} {printf("Cond >\n");}
#line 1492 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1500 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 49: case 49:
#line 137 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 151 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond ||\n");} {printf("Cond <=\n");}
#line 1498 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1506 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 50: case 50:
#line 138 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 152 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond !\n");} {printf("Cond >=\n");}
#line 1504 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1512 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 51: case 51:
#line 140 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 153 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans invocation\n");} {printf("Cond &&\n");}
#line 1510 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1518 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 52: case 52:
#line 142 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 154 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("printf de %s\n", (yyvsp[-2].id));} {printf("Cond ||\n");}
#line 1516 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1524 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
case 53: case 53:
#line 144 "analyse_syntaxique.y" /* yacc.c:1646 */ #line 155 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("return\n");} {printf("Cond !\n");}
#line 1522 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1530 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 55:
#line 158 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans invocation\n");}
#line 1536 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 56:
#line 160 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("printf de %s\n", (yyvsp[-2].id));}
#line 1542 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 57:
#line 162 "analyse_syntaxique.y" /* yacc.c:1646 */
{(yyval.nombre)= gen_return(&table, &array, (yyvsp[-1].nombre));}
#line 1548 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break; break;
#line 1526 "analyse_syntaxique.tab.c" /* yacc.c:1646 */ #line 1552 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
default: break; default: break;
} }
/* User semantic actions sometimes alter yychar, and that requires /* User semantic actions sometimes alter yychar, and that requires
@ -1750,14 +1776,16 @@ yyreturn:
#endif #endif
return yyresult; return yyresult;
} }
#line 146 "analyse_syntaxique.y" /* yacc.c:1906 */ #line 164 "analyse_syntaxique.y" /* yacc.c:1906 */
#include <stdio.h> #include <stdio.h>
void main(void){ void main(void){
//TODO: rajouter gestion des erreurs
initialise_table(&table); initialise_table(&table);
initialise_asm(&array);
yyparse(); yyparse();
print_table(&table); print_table(&table);
remove_symboles(&table, 0); //remove_symboles(&table, 0);
print_table(&table); //print_table(&table);
} }

View file

@ -6,16 +6,23 @@ char id[30];
%{ %{
#include <stdio.h> #include <stdio.h>
#include "table_symboles.h" #include "table_symboles.h"
#include "gen_assembleur.h"
enum Initialised_Variable init; enum Initialised_Variable init;
enum Symbole_Type type; enum Symbole_Type type;
Table_Symboles table; Table_Symboles table;
instructions_array array;
%} %}
%token<nombre> tENTIER %token<nombre> tENTIER
%token<nombre> tENTIEREXP %token<nombre> tENTIEREXP
%type<nombre> E
%type<nombre> Return
%type<nombre> Cond
%token tADD %token tADD
%token tSUB %token tSUB
%token tMUL %token tMUL
@ -43,7 +50,7 @@ Table_Symboles table;
%token tRETURN %token tRETURN
%token tOR %token tOR
%token tAND %token tAND
%token tIF %token<nombre> tIF
%token tELSE %token tELSE
%token tWHILE %token tWHILE
%token tCONST %token tCONST
@ -97,21 +104,21 @@ SuiteDecl: ;
Type : tINT {type = TYPE_INT;} ; Type : tINT {type = TYPE_INT;} ;
Type : tCONST tINT {type = TYPE_CONST_INT;} ; Type : tCONST tINT {type = TYPE_CONST_INT;} ;
Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth);}; Valeur : tVAR tAFFECTATION E {add_symbole_top(&table, $1, type, INITIALISED, table.depth); free_temp(&table);};
Valeur : tVAR {add_symbole_top(&table, $1, type, NOT_INITIALISED, table.depth);}; Valeur : tVAR {add_symbole_top(&table, $1, type, NOT_INITIALISED, table.depth);};
Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1);}; Aff : tVAR tAFFECTATION E tPV {printf("Affectation : %s\n", $1); free_temp(&table);};
E : tENTIER {printf("int %d\n", $1);}; E : tENTIER {int vt = gen_entier(&table, &array, $1); $$ = vt;};
E : tVAR {printf("var %s\n", $1);}; E : tVAR {int vt = gen_var(&table, &array, $1); $$ = vt;};
E : E tADD E {printf("Addition\n");} ; E : E tADD E {gen_arithmetique(&array, ADD, $1, $3); free_temp(&table); $$ = $1;} ;
E : E tMUL E {printf("Multiplication\n");} ; E : E tMUL E {gen_arithmetique(&array, MUL, $1, $3); free_temp(&table); $$ = $1;} ;
E : E tSUB E {printf("Soustraction\n");} ; E : E tSUB E {gen_arithmetique(&array, SOU, $1, $3); free_temp(&table); $$ = $1;} ;
E : E tDIV E {printf("Division\n");} ; E : E tDIV E {gen_arithmetique(&array, DIV, $1, $3); free_temp(&table); $$ = $1;} ;
E : tSUB E {printf("Soustraction\n");} ; E : tSUB E {printf("Variable negative\n");} ;
E : Invocation ; E : Invocation {$$ = 1234;};
E : tPO E tPF {printf("Parenthèse\n");} ; E : tPO E tPF {printf("Parenthèse\n"); $$ = $2; } ;
Args : tVAR SuiteArgs ; Args : tVAR SuiteArgs ;
@ -120,9 +127,19 @@ Args : ;
SuiteArgs : tVIRGULE tVAR SuiteArgs ; SuiteArgs : tVIRGULE tVAR SuiteArgs ;
SuiteArgs : ; SuiteArgs : ;
If : tIF tPO Cond tPF tAO Instructions tAF Else {printf("Dans if\n");}; If : tIF tPO Cond tPF {
gen_jmpf(&table, &array, $3);
$1 = array.index;
}
tAO Instructions tAF
{
int adr_jmp = array.index;
update_jump(&array, $1, adr_jmp);
}
Else {printf("Dans if\n");};
Else : tELSE tAO Instructions tAF {printf("else\n");} ; Else : tELSE tAO Instructions tAF {printf("else\n");} ;
Else : ;
Else : tELSE tIF tPO Cond tPF tAO Instructions tAF Else {printf("elsif\n");} ; Else : tELSE tIF tPO Cond tPF tAO Instructions tAF Else {printf("elsif\n");} ;
While : tWHILE tPO Cond tPF tAO Instructions tAF {printf("Dans while\n");}; While : tWHILE tPO Cond tPF tAO Instructions tAF {printf("Dans while\n");};
@ -136,21 +153,23 @@ Cond : E tGTE E{printf("Cond >=\n");} ;
Cond : E tAND Cond {printf("Cond &&\n");} ; Cond : E tAND Cond {printf("Cond &&\n");} ;
Cond : E tOR Cond {printf("Cond ||\n");} ; Cond : E tOR Cond {printf("Cond ||\n");} ;
Cond : tNOT Cond {printf("Cond !\n");} ; Cond : tNOT Cond {printf("Cond !\n");} ;
Cond : E;
Invocation : tVAR tPO Args tPF {printf("Dans invocation\n");}; Invocation : tVAR tPO Args tPF {printf("Dans invocation\n");};
Print : tPRINT tPO tVAR tPF tPV {printf("printf de %s\n", $3);}; Print : tPRINT tPO tVAR tPF tPV {printf("printf de %s\n", $3);};
Return : tRETURN E tPV {printf("return\n");}; Return : tRETURN E tPV {$$= gen_return(&table, &array, $2);};
%% %%
#include <stdio.h> #include <stdio.h>
void main(void){ void main(void){
//TODO: rajouter gestion des erreurs //TODO: rajouter gestion des erreurs
initialise_table(&table); initialise_table(&table);
initialise_asm(&array);
yyparse(); yyparse();
print_table(&table); print_table(&table);
remove_symboles(&table, 0); //remove_symboles(&table, 0);
print_table(&table); //print_table(&table);
} }

View file

@ -0,0 +1,139 @@
#include "gen_assembleur.h"
int new_temp(Table_Symboles * table){
int ret_addr ;
if(add_symbole_bottom(table) == -1) {
return -1;
}
ret_addr = table->indexAvailableBottom +1;
return ret_addr;
}
void gen_arithmetique(instructions_array * array, enum operation op, int arg1, int arg2){
instruction instru;
switch(op){
case ADD:
instru.operation = ADD;
instru.reg1 = arg1;
instru.reg2 = arg1;
instru.reg3 = arg2;
printf("%d ADD %d %d %d\n", array->index, arg1, arg1, arg2);
break;
case DIV:
instru.operation = DIV;
instru.reg1 = arg1;
instru.reg2 = arg1;
instru.reg3 = arg2;
printf("%d DIV %d %d %d\n", array->index, arg1, arg1, arg2);
break;
case SOU:
instru.operation = SOU;
instru.reg1 = arg1;
instru.reg2 = arg1;
instru.reg3 = arg2;
printf("%d SOU %d %d %d\n", array->index, arg1, arg1, arg2);
break;
case MUL:
instru.operation = MUL;
instru.reg1 = arg1;
instru.reg2 = arg1;
instru.reg3 = arg2;
printf("%d MUL %d %d %d\n", array->index, arg1, arg1, arg2);
break;
default:
break;
}
if (array->index < INSTRUCTION_TABLE_SIZE){
array->array[array->index] = instru;
array->index++;
}
}
int gen_var(Table_Symboles * table, instructions_array * array, char * varName){
int vt = new_temp(table);
int varAddr = variable_exists(table, varName);
//vérifier que non null
instruction instru;
instru.operation = CPY;
instru.reg1 = vt;
instru.reg2 = varAddr;
printf("%d CPY %d %d\n", array->index, vt, varAddr);
if (array->index < INSTRUCTION_TABLE_SIZE){
array->array[array->index] = instru;
array->index++;
}
return vt;
}
int gen_entier(Table_Symboles * table, instructions_array * array, int entier){
int vt = new_temp(table);
//vérifier que non null
instruction instru;
instru.operation = AFC;
instru.reg1 = vt;
instru.reg2 = entier;
printf("%d AFC %d %d\n", array->index, vt, entier);
if (array->index < INSTRUCTION_TABLE_SIZE){
array->array[array->index] = instru;
array->index++;
}
return vt;
}
int gen_return(Table_Symboles * table, instructions_array * array, int adr){
//vérifier que non null
instruction instru;
instru.operation = RET;
instru.reg1 = adr;
printf("%d RET %d\n", array->index, adr);
if (array->index < INSTRUCTION_TABLE_SIZE){
array->array[array->index] = instru;
array->index++;
}
free_temp(table);
return adr;
}
int gen_jmpf(Table_Symboles * table, instructions_array * array, int cond){
//vérifier que non null
instruction instru;
instru.operation = JMPF;
instru.reg1 = cond;
instru.reg2 = -1;
printf("%d JMPF %d %d\n", array->index, cond, -1);
if (array->index < INSTRUCTION_TABLE_SIZE){
array->array[array->index] = instru;
array->index++;
}
free_temp(table);
return cond;
}
void update_jump(instructions_array * array, int if_value, int adr_jmp){
array->array[if_value].reg2 = adr_jmp;
printf("%d JMPF %d %d\n", array->index, array->array[if_value].reg1, array->array[if_value].reg2);
}
void initialise_asm(instructions_array * array){
array->index = 0;
}

View file

@ -2,20 +2,39 @@
#define GEN_ASSEMBLEUR_H #define GEN_ASSEMBLEUR_H
#define INSTRUCTION_TABLE_SIZE 1000 #define INSTRUCTION_TABLE_SIZE 1000
#define INSTRUCTION_SIZE 100
#include "table_symboles.h"
enum operation{ADD, SOU, MUL, DIV, CPY, AFC, RET, JMPF};
typedef struct instruction{
enum operation operation;
int reg1;
int reg2;
int reg3;
}instruction;
//table des instructions //table des instructions
typedef struct table{ typedef struct instructions_array{
char* instruction array[INSTRUCTION_TABLE_SIZE];
} int index;
} instructions_array;
enum operation{ADD, SUB, MUL, DIV};
void gen_arithmetique(enum operation op, int arg1, int arg2);
void gen_arithmetique(instructions_array * array, enum operation op, int arg1, int arg2);
int gen_var(Table_Symboles * table, instructions_array * array, char * varName);
int gen_entier(Table_Symboles * table, instructions_array * array, int entier);
int gen_return(Table_Symboles * table, instructions_array * array, int adr);
int gen_jmpf(Table_Symboles * table, instructions_array * array, int cond);
void update_jump(instructions_array * array, int if_value, int adr_jmp);
//renvoie l'index (ou valeur?) de la premiere @ dispo //renvoie l'index (ou valeur?) de la premiere @ dispo
int new_temp(); int new_temp(Table_Symboles * table);
#endif #endif

View file

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

View file

@ -41,17 +41,12 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty
return 0; return 0;
} }
int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type, enum Initialised_Variable init){ int add_symbole_bottom(Table_Symboles * table){
Symbole symbole; Symbole symbole;
strcpy(symbole.Variable_Name, varName);
symbole.addr = table->indexAvailableBottom; symbole.addr = table->indexAvailableBottom;
symbole.init = init;
symbole.type = type;
//symbole.symbole_depth = -1; //symbole.symbole_depth = -1;
if (table->indexAvailableTop >= table->indexAvailableBottom){ if (table->indexAvailableTop >= table->indexAvailableBottom){
return -1; return -1;
} else if (variable_exists(table, varName) != 0){
return -2;
} else { } else {
table->array[table->indexAvailableBottom] = symbole; table->array[table->indexAvailableBottom] = symbole;
table->indexAvailableBottom--; table->indexAvailableBottom--;
@ -76,6 +71,10 @@ int remove_symboles(Table_Symboles * table, int depth){
return 0; return 0;
} }
void free_temp(Table_Symboles * table){
table->indexAvailableBottom++;
}
int initialise_symbole(Table_Symboles * table, char * varName){ int initialise_symbole(Table_Symboles * table, char * varName){
int index = variable_exists(table, varName); int index = variable_exists(table, varName);
if (index == -1){ if (index == -1){

View file

@ -41,12 +41,11 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty
/** /**
* Adds a symbole at the bottom (temp variables) * Adds a symbole at the bottom (temp variables)
* @param table * @param table
* @param varName
* @param type
* @param init
* @return 0 if symbole added successfully, -1 if the table is full and -2 if the varaible already exists in the table * @return 0 if symbole added successfully, -1 if the table is full and -2 if the varaible already exists in the table
*/ */
int add_symbole_bottom(Table_Symboles * table, char * varName, enum Symbole_Type type , enum Initialised_Variable init); int add_symbole_bottom(Table_Symboles * table);
/** /**
* Verifies if a varaible name is already present in the table to avoid duplicates * 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);
*/ */
int remove_symboles(Table_Symboles * table, int depth); int remove_symboles(Table_Symboles * table, int depth);
void free_temp(Table_Symboles * table);
/** /**
* Initialises an already exisiting symbole * Initialises an already exisiting symbole
* @param table * @param table