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
36 | %empty
37 If: tIF tPO Cond tPF tAO Instructions tAF Else
37 $@1: %empty
38 Else: tELSE tAO Instructions tAF
39 | tELSE tIF tPO Cond tPF tAO Instructions tAF Else
38 $@2: %empty
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
42 | E tDIFF E
43 | E tLT E
44 | E tGT E
45 | E tLTE E
46 | E tGTE E
47 | E tAND Cond
48 | E tOR Cond
49 | tNOT Cond
40 Else: tELSE tAO Instructions tAF
41 | %empty
42 | tELSE tIF tPO Cond tPF tAO Instructions tAF Else
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
@ -93,32 +99,32 @@ tADD (260) 26
tSUB (261) 28 30
tMUL (262) 27
tDIV (263) 29
tPO (264) 1 32 37 39 40 50 51
tPF (265) 1 32 37 39 40 50 51
tAO (266) 7 37 38 39 40
tAF (267) 7 37 38 39 40
tPO (264) 1 32 39 42 43 54 55
tPF (265) 1 32 39 42 43 54 55
tAO (266) 7 39 40 42 43
tAF (267) 7 39 40 42 43
tERROR (268)
tPV (269) 5 15 16 23 51 52
tPV (269) 5 15 16 23 55 56
tVIRGULE (270) 5 17 35
tAFFECTATION (271) 21 23
tEGAL (272) 41
tDIFF (273) 42
tLT (274) 43
tGT (275) 44
tGTE (276) 46
tLTE (277) 45
tEGAL (272) 44
tDIFF (273) 45
tLT (274) 46
tGT (275) 47
tGTE (276) 49
tLTE (277) 48
tMAIN (278) 1
tINT (279) 1 4 19 20
tPRINT (280) 51
tRETURN (281) 52
tOR (282) 48
tAND (283) 47
tIF (284) 37 39
tELSE (285) 38 39
tWHILE (286) 40
tPRINT (280) 55
tRETURN (281) 56
tOR (282) 51
tAND (283) 50
tIF (284) 39 42
tELSE (285) 40 42
tWHILE (286) 43
tCONST (287) 20
tVAR (288) 4 21 22 23 25 33 35 50 51
tNOT (289) 49
tVAR (288) 4 21 22 23 25 33 35 54 55
tNOT (289) 52
Non-terminaux, suivis des règles où ils apparaissent
@ -136,7 +142,7 @@ SuiteParams (39)
Body (40)
à gauche: 7, à droite: 1
Instructions (41)
à gauche: 8 9, à droite: 7 8 37 38 39 40
à gauche: 8 9, à droite: 7 8 39 40 42 43
Instruction (42)
à gauche: 10 11 12 13 14 15, à droite: 8
Decl (43)
@ -151,26 +157,30 @@ Aff (47)
à gauche: 23, à droite: 10
E (48)
à 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)
à gauche: 33 34, à droite: 50
à gauche: 33 34, à droite: 54
SuiteArgs (50)
à gauche: 35 36, à droite: 33 35
If (51)
à gauche: 37, à droite: 11
Else (52)
à gauche: 38 39, à droite: 37 39
While (53)
à gauche: 40, à droite: 12
Cond (54)
à gauche: 41 42 43 44 45 46 47 48 49, à droite: 37 39 40 47 48
49
Invocation (55)
à gauche: 50, à droite: 15 31
Print (56)
à gauche: 51, à droite: 13
Return (57)
à gauche: 52, à droite: 7
à gauche: 39, à droite: 11
$@1 (52)
à gauche: 37, à droite: 39
$@2 (53)
à gauche: 38, à droite: 39
Else (54)
à gauche: 40 41 42, à droite: 39 42
While (55)
à gauche: 43, à droite: 12
Cond (56)
à gauche: 44 45 46 47 48 49 50 51 52 53, à droite: 39 42 43 50
51 52
Invocation (57)
à gauche: 54, à droite: 15 31
Print (58)
à gauche: 55, à droite: 13
Return (59)
à gauche: 56, à droite: 7
État 0
@ -330,21 +340,21 @@ Return (57)
État 17
51 Print: tPRINT . tPO tVAR tPF tPV
55 Print: tPRINT . tPO tVAR tPF tPV
tPO décalage et aller à l'état 32
É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
É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
@ -359,7 +369,7 @@ Return (57)
État 21
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
tAFFECTATION décalage et aller à l'état 37
@ -458,14 +468,14 @@ Return (57)
État 32
51 Print: tPRINT tPO . tVAR tPF tPV
55 Print: tPRINT tPO . tVAR tPF tPV
tVAR décalage et aller à l'état 45
É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
tSUB décalage et aller à l'état 47
@ -480,7 +490,7 @@ Return (57)
É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
tSUB décalage et aller à l'état 47
@ -502,7 +512,7 @@ Return (57)
État 36
50 Invocation: tVAR tPO . Args tPF
54 Invocation: tVAR tPO . Args tPF
tVAR décalage et aller à l'état 55
@ -526,7 +536,7 @@ Return (57)
État 38
52 Return: tRETURN . E tPV
56 Return: tRETURN . E tPV
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -588,7 +598,7 @@ Return (57)
État 45
51 Print: tPRINT tPO tVAR . tPF tPV
55 Print: tPRINT tPO tVAR . tPF tPV
tPF décalage et aller à l'état 63
@ -629,7 +639,7 @@ Return (57)
État 49
25 E: tVAR .
50 Invocation: tVAR . tPO Args tPF
54 Invocation: tVAR . tPO Args tPF
tPO décalage et aller à l'état 36
@ -638,7 +648,7 @@ Return (57)
État 50
49 Cond: tNOT . Cond
52 Cond: tNOT . Cond
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -657,14 +667,15 @@ Return (57)
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
41 Cond: E . tEGAL E
42 | E . tDIFF E
43 | E . tLT E
44 | E . tGT E
45 | E . tLTE E
46 | E . tGTE E
47 | E . tAND Cond
48 | E . tOR Cond
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
53 | E .
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
@ -679,10 +690,12 @@ Return (57)
tOR décalage et aller à l'état 77
tAND décalage et aller à l'état 78
$défaut réduction par utilisation de la règle 53 (Cond)
É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
@ -696,7 +709,7 @@ Return (57)
É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
@ -714,7 +727,7 @@ Return (57)
État 56
50 Invocation: tVAR tPO Args . tPF
54 Invocation: tVAR tPO Args . tPF
tPF décalage et aller à l'état 83
@ -740,7 +753,7 @@ Return (57)
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
52 Return: tRETURN E . tPV
56 Return: tRETURN E . tPV
tADD décalage et aller à l'état 67
tSUB décalage et aller à l'état 68
@ -787,7 +800,7 @@ Return (57)
État 63
51 Print: tPRINT tPO tVAR tPF . tPV
55 Print: tPRINT tPO tVAR tPF . tPV
tPV décalage et aller à l'état 89
@ -823,9 +836,9 @@ Return (57)
É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
@ -882,7 +895,7 @@ Return (57)
État 71
41 Cond: E tEGAL . E
44 Cond: E tEGAL . E
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -895,7 +908,7 @@ Return (57)
État 72
42 Cond: E tDIFF . E
45 Cond: E tDIFF . E
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -908,7 +921,7 @@ Return (57)
État 73
43 Cond: E tLT . E
46 Cond: E tLT . E
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -921,7 +934,7 @@ Return (57)
État 74
44 Cond: E tGT . E
47 Cond: E tGT . E
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -934,7 +947,7 @@ Return (57)
État 75
46 Cond: E tGTE . E
49 Cond: E tGTE . E
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -947,7 +960,7 @@ Return (57)
État 76
45 Cond: E tLTE . E
48 Cond: E tLTE . E
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -960,7 +973,7 @@ Return (57)
État 77
48 Cond: E tOR . Cond
51 Cond: E tOR . Cond
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -975,7 +988,7 @@ Return (57)
État 78
47 Cond: E tAND . Cond
50 Cond: E tAND . Cond
tENTIER décalage et aller à l'état 46
tSUB décalage et aller à l'état 47
@ -990,14 +1003,16 @@ Return (57)
É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
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
@ -1018,9 +1033,9 @@ Return (57)
É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
@ -1032,9 +1047,9 @@ Return (57)
É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
@ -1073,9 +1088,9 @@ Return (57)
É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
@ -1144,55 +1159,7 @@ Return (57)
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
41 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 .
44 Cond: E tEGAL E .
tADD décalage et aller à l'état 67
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)
État 99
État 96
26 E: E . tADD E
27 | E . tMUL E
28 | E . tSUB E
29 | E . tDIV E
46 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 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 .
45 Cond: E tDIFF E .
tADD décalage et aller à l'état 67
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)
É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)
É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
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
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
tAO décalage et aller à l'état 107
É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
tPRINT décalage et aller à l'état 17
@ -1316,14 +1314,31 @@ Return (57)
É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
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
@ -1337,39 +1352,57 @@ Return (57)
É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
Else aller à l'état 113
tAF décalage et aller à l'état 112
É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
38 Else: tELSE . tAO Instructions tAF
39 | tELSE . 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 114
tIF décalage et aller à l'état 115
$défaut réduction par utilisation de la règle 38 ($@2)
$@2 aller à l'é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
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
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)
Instructions aller à l'état 116
Instructions aller à l'état 118
Instruction aller à l'état 23
Decl aller à l'état 24
Type aller à l'état 25
@ -1391,23 +1424,23 @@ Return (57)
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
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
tSUB décalage et aller à l'état 47
@ -1416,34 +1449,34 @@ Return (57)
tNOT décalage et aller à l'état 50
E aller à l'état 51
Cond aller à l'état 119
Cond aller à l'état 121
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
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
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
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)
Instructions aller à l'état 122
Instructions aller à l'état 124
Instruction aller à l'état 23
Decl aller à l'état 24
Type aller à l'état 25
@ -1465,24 +1498,26 @@ Return (57)
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
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 "table_symboles.h"
#include "gen_assembleur.h"
enum Initialised_Variable init;
enum Symbole_Type type;
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
# undef short
@ -410,16 +412,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 4
/* YYLAST -- Last index in YYTABLE. */
#define YYLAST 133
#define YYLAST 134
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 35
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 23
#define YYNNTS 25
/* YYNRULES -- Number of rules. */
#define YYNRULES 53
#define YYNRULES 57
/* YYNSTATES -- Number of states. */
#define YYNSTATES 125
#define YYNSTATES 127
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
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. */
static const yytype_uint8 yyrline[] =
{
0, 68, 68, 70, 71, 73, 76, 77, 80, 82,
83, 85, 86, 87, 88, 89, 90, 92, 94, 95,
97, 98, 100, 101, 104, 106, 107, 108, 109, 110,
111, 112, 113, 114, 117, 118, 120, 121, 123, 125,
126, 128, 130, 131, 132, 133, 134, 135, 136, 137,
138, 140, 142, 144
0, 75, 75, 77, 78, 80, 83, 84, 87, 89,
90, 92, 93, 94, 95, 96, 97, 99, 101, 102,
104, 105, 107, 108, 111, 113, 114, 115, 116, 117,
118, 119, 120, 121, 124, 125, 127, 128, 130, 135,
130, 141, 142, 143, 145, 147, 148, 149, 150, 151,
152, 153, 154, 155, 156, 158, 160, 162
};
#endif
@ -489,7 +491,7 @@ static const char *const yytname[] =
"tCONST", "tVAR", "tNOT", "$accept", "Main", "Params", "Param",
"SuiteParams", "Body", "Instructions", "Instruction", "Decl",
"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
@ -505,10 +507,10 @@ static const yytype_uint16 yytoknum[] =
};
# endif
#define YYPACT_NINF -35
#define YYPACT_NINF -34
#define yypact_value_is_default(Yystate) \
(!!((Yystate) == (-35)))
(!!((Yystate) == (-34)))
#define YYTABLE_NINF -1
@ -519,19 +521,19 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
-3, -12, 31, 34, -35, 20, 25, 50, 44, -35,
57, 20, -35, 46, -35, 44, -35, 52, 60, 65,
56, -4, 58, 46, -35, 43, -35, -35, -35, 69,
-35, 79, 61, 14, 14, -35, 63, 16, 16, 85,
-35, 82, 91, -35, -35, 90, -35, 16, 16, 98,
14, 45, 99, -35, 100, 101, 102, 81, 97, -35,
16, 43, 103, 104, 8, 22, -35, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 14, 14, 108,
109, 80, -35, -35, -35, -35, 49, 91, -35, -35,
-35, 1, 8, 106, -35, 49, 49, 49, 49, 49,
49, -35, -35, 46, 46, 101, -35, 110, 111, -35,
94, -35, -5, -35, 46, 112, 113, 14, -35, 105,
115, 46, 116, 94, -35
-18, -14, 22, 35, -34, 8, 12, 49, 45, -34,
51, 8, -34, 47, -34, 45, -34, 52, 60, 61,
53, -8, 55, 47, -34, 42, -34, -34, -34, 68,
-34, 70, 54, 15, 15, -34, 56, 17, 17, 73,
-34, 74, 77, -34, -34, 83, -34, 17, 17, 92,
15, 46, 90, -34, 94, 96, 102, 91, 101, -34,
17, 42, 99, 100, 9, 23, -34, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 15, 15, -34,
105, 84, -34, -34, -34, -34, 50, 77, -34, -34,
-34, 5, 9, 110, -34, 50, 50, 50, 50, 50,
50, -34, -34, 108, 47, 96, -34, 47, 109, -34,
111, -34, -34, 95, -4, -34, 47, 113, 112, 15,
-34, 116, 117, 47, 115, 95, -34
};
/* 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,
14, 0, 0, 0, 0, 21, 35, 0, 0, 0,
9, 23, 19, 16, 6, 0, 25, 0, 0, 26,
0, 0, 0, 32, 0, 37, 0, 0, 0, 8,
0, 0, 0, 0, 31, 0, 50, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 34, 51, 24, 53, 22, 19, 17, 52,
33, 27, 29, 28, 30, 42, 43, 44, 45, 47,
46, 49, 48, 10, 10, 37, 18, 0, 0, 36,
0, 41, 0, 38, 10, 0, 0, 0, 39, 0,
0, 10, 0, 0, 40
0, 54, 0, 32, 0, 37, 0, 0, 0, 8,
0, 0, 0, 0, 31, 0, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 38,
0, 0, 34, 55, 24, 57, 22, 19, 17, 56,
33, 27, 29, 28, 30, 45, 46, 47, 48, 50,
49, 52, 51, 0, 10, 37, 18, 10, 0, 36,
0, 44, 39, 42, 0, 40, 10, 0, 0, 0,
41, 0, 0, 10, 0, 42, 43
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
-35, -35, -35, 118, 117, -35, -22, -35, -35, 40,
-35, 70, -35, -34, -35, 28, -35, 7, -35, -32,
-13, -35, -35
-34, -34, -34, 118, 119, -34, -21, -34, -34, 33,
-34, 69, -34, -33, -34, 26, -34, -34, -34, 7,
-34, -31, -13, -34, -34
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
-1, 2, 7, 8, 12, 14, 22, 23, 24, 62,
25, 42, 26, 51, 56, 82, 27, 113, 28, 52,
53, 30, 39
25, 42, 26, 51, 56, 82, 27, 103, 113, 115,
28, 52, 53, 30, 39
};
/* 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. */
static const yytype_uint8 yytable[] =
{
29, 40, 54, 57, 58, 36, 114, 68, 69, 70,
29, 3, 37, 64, 65, 69, 70, 46, 66, 46,
47, 1, 47, 48, 115, 48, 86, 67, 68, 69,
70, 4, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 5, 6, 101, 102, 49, 50, 49,
67, 68, 69, 70, 67, 68, 69, 70, 9, 11,
10, 32, 71, 72, 73, 74, 75, 76, 13, 33,
16, 17, 77, 78, 34, 18, 41, 19, 20, 21,
35, 107, 108, 43, 38, 119, 67, 68, 69, 70,
29, 29, 116, 44, 45, 84, 55, 59, 60, 122,
63, 29, 67, 68, 69, 70, 61, 36, 29, 79,
80, 85, 83, 105, 70, 120, 81, 88, 89, 103,
104, 117, 110, 111, 112, 118, 121, 106, 123, 15,
124, 87, 31, 109
29, 36, 40, 54, 57, 58, 1, 116, 37, 3,
29, 68, 69, 70, 64, 65, 69, 70, 46, 66,
46, 47, 4, 47, 48, 117, 48, 86, 67, 68,
69, 70, 6, 90, 91, 92, 93, 94, 95, 96,
97, 98, 99, 100, 5, 9, 101, 102, 49, 50,
49, 67, 68, 69, 70, 67, 68, 69, 70, 10,
11, 32, 13, 71, 72, 73, 74, 75, 76, 33,
34, 16, 17, 77, 78, 41, 18, 35, 19, 20,
21, 38, 43, 108, 44, 59, 110, 45, 121, 55,
60, 29, 61, 63, 29, 118, 67, 68, 69, 70,
79, 36, 124, 29, 80, 84, 67, 68, 69, 70,
29, 81, 83, 88, 89, 85, 104, 105, 70, 107,
106, 111, 119, 112, 120, 114, 122, 125, 123, 15,
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,
23, 23, 16, 47, 48, 7, 8, 3, 50, 3,
6, 24, 6, 9, 29, 9, 60, 5, 6, 7,
8, 0, 10, 67, 68, 69, 70, 71, 72, 73,
74, 75, 76, 9, 24, 77, 78, 33, 34, 33,
5, 6, 7, 8, 5, 6, 7, 8, 33, 15,
10, 9, 17, 18, 19, 20, 21, 22, 11, 9,
24, 25, 27, 28, 9, 29, 33, 31, 32, 33,
24, 103, 104, 14, 26, 117, 5, 6, 7, 8,
103, 104, 114, 14, 33, 14, 33, 12, 16, 121,
10, 114, 5, 6, 7, 8, 15, 9, 121, 10,
10, 14, 10, 33, 8, 10, 15, 14, 14, 11,
11, 9, 12, 12, 30, 12, 11, 87, 12, 11,
123, 61, 15, 105
13, 9, 23, 34, 37, 38, 24, 11, 16, 23,
23, 6, 7, 8, 47, 48, 7, 8, 3, 50,
3, 6, 0, 6, 9, 29, 9, 60, 5, 6,
7, 8, 24, 10, 67, 68, 69, 70, 71, 72,
73, 74, 75, 76, 9, 33, 77, 78, 33, 34,
33, 5, 6, 7, 8, 5, 6, 7, 8, 10,
15, 9, 11, 17, 18, 19, 20, 21, 22, 9,
9, 24, 25, 27, 28, 33, 29, 24, 31, 32,
33, 26, 14, 104, 14, 12, 107, 33, 119, 33,
16, 104, 15, 10, 107, 116, 5, 6, 7, 8,
10, 9, 123, 116, 10, 14, 5, 6, 7, 8,
123, 15, 10, 14, 14, 14, 11, 33, 8, 11,
87, 12, 9, 12, 12, 30, 10, 12, 11, 11,
61, 105, 125, -1, 15
};
/* 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,
10, 15, 39, 11, 40, 38, 24, 25, 29, 31,
32, 33, 41, 42, 43, 45, 47, 51, 53, 55,
56, 39, 9, 9, 9, 24, 9, 16, 26, 57,
32, 33, 41, 42, 43, 45, 47, 51, 55, 57,
58, 39, 9, 9, 9, 24, 9, 16, 26, 59,
41, 33, 46, 14, 14, 33, 3, 6, 9, 33,
34, 48, 54, 55, 54, 33, 49, 48, 48, 12,
16, 15, 44, 10, 48, 48, 54, 5, 6, 7,
34, 48, 56, 57, 56, 33, 49, 48, 48, 12,
16, 15, 44, 10, 48, 48, 56, 5, 6, 7,
8, 17, 18, 19, 20, 21, 22, 27, 28, 10,
10, 15, 50, 10, 14, 14, 48, 46, 14, 14,
10, 48, 48, 48, 48, 48, 48, 48, 48, 48,
48, 54, 54, 11, 11, 33, 44, 41, 41, 50,
12, 12, 30, 52, 11, 29, 41, 9, 12, 54,
10, 11, 41, 12, 52
48, 56, 56, 52, 11, 33, 44, 11, 41, 50,
41, 12, 12, 53, 30, 54, 11, 29, 41, 9,
12, 56, 10, 11, 41, 12, 54
};
/* 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,
41, 42, 42, 42, 42, 42, 42, 43, 44, 44,
45, 45, 46, 46, 47, 48, 48, 48, 48, 48,
48, 48, 48, 48, 49, 49, 50, 50, 51, 52,
52, 53, 54, 54, 54, 54, 54, 54, 54, 54,
54, 55, 56, 57
48, 48, 48, 48, 49, 49, 50, 50, 52, 53,
51, 54, 54, 54, 55, 56, 56, 56, 56, 56,
56, 56, 56, 56, 56, 57, 58, 59
};
/* 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, 1, 1, 1, 1, 1, 2, 4, 3, 0,
1, 2, 3, 1, 4, 1, 1, 3, 3, 3,
3, 2, 1, 3, 2, 0, 3, 0, 8, 4,
9, 7, 3, 3, 3, 3, 3, 3, 3, 3,
2, 4, 5, 3
3, 2, 1, 3, 2, 0, 3, 0, 0, 0,
10, 4, 0, 9, 7, 3, 3, 3, 3, 3,
3, 3, 3, 2, 1, 4, 5, 3
};
@ -1324,205 +1326,229 @@ yyreduce:
switch (yyn)
{
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;
case 3:
#line 70 "analyse_syntaxique.y" /* yacc.c:1646 */
#line 77 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Sans params\n");}
#line 1336 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1338 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
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));}
#line 1342 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1344 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 8:
#line 80 "analyse_syntaxique.y" /* yacc.c:1646 */
#line 87 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans body\n");}
#line 1348 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1350 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 20:
#line 97 "analyse_syntaxique.y" /* yacc.c:1646 */
#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */
{type = TYPE_INT;}
#line 1354 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1356 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 21:
#line 98 "analyse_syntaxique.y" /* yacc.c:1646 */
#line 105 "analyse_syntaxique.y" /* yacc.c:1646 */
{type = TYPE_CONST_INT;}
#line 1360 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1362 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 22:
#line 100 "analyse_syntaxique.y" /* yacc.c:1646 */
{add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth);}
#line 1366 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */
{add_symbole_top(&table, (yyvsp[-2].id), type, INITIALISED, table.depth); free_temp(&table);}
#line 1368 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
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);}
#line 1372 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1374 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 24:
#line 104 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Affectation : %s\n", (yyvsp[-3].id));}
#line 1378 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 111 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Affectation : %s\n", (yyvsp[-3].id)); free_temp(&table);}
#line 1380 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 25:
#line 106 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("int %d\n", (yyvsp[0].nombre));}
#line 1384 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 113 "analyse_syntaxique.y" /* yacc.c:1646 */
{int vt = gen_entier(&table, &array, (yyvsp[0].nombre)); (yyval.nombre) = vt;}
#line 1386 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 26:
#line 107 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("var %s\n", (yyvsp[0].id));}
#line 1390 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 114 "analyse_syntaxique.y" /* yacc.c:1646 */
{int vt = gen_var(&table, &array, (yyvsp[0].id)); (yyval.nombre) = vt;}
#line 1392 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 27:
#line 108 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Addition\n");}
#line 1396 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 115 "analyse_syntaxique.y" /* yacc.c:1646 */
{gen_arithmetique(&array, ADD, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1398 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 28:
#line 109 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Multiplication\n");}
#line 1402 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 116 "analyse_syntaxique.y" /* yacc.c:1646 */
{gen_arithmetique(&array, MUL, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1404 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 29:
#line 110 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Soustraction\n");}
#line 1408 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 117 "analyse_syntaxique.y" /* yacc.c:1646 */
{gen_arithmetique(&array, SOU, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1410 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 30:
#line 111 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Division\n");}
#line 1414 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 118 "analyse_syntaxique.y" /* yacc.c:1646 */
{gen_arithmetique(&array, DIV, (yyvsp[-2].nombre), (yyvsp[0].nombre)); free_temp(&table); (yyval.nombre) = (yyvsp[-2].nombre);}
#line 1416 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 31:
#line 112 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Soustraction\n");}
#line 1420 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 119 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Variable negative\n");}
#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;
case 33:
#line 114 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Parenthèse\n");}
#line 1426 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 121 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Parenthèse\n"); (yyval.nombre) = (yyvsp[-1].nombre); }
#line 1434 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 38:
#line 123 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans if\n");}
#line 1432 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 130 "analyse_syntaxique.y" /* 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;
case 39:
#line 125 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("else\n");}
#line 1438 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 135 "analyse_syntaxique.y" /* 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;
case 40:
#line 126 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("elsif\n");}
#line 1444 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 139 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans if\n");}
#line 1458 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 41:
#line 128 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans while\n");}
#line 1450 "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 */
#line 141 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("else\n");}
#line 1464 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 43:
#line 131 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond !=\n");}
#line 1462 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 143 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("elsif\n");}
#line 1470 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 44:
#line 132 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond <\n");}
#line 1468 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 145 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans while\n");}
#line 1476 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 45:
#line 133 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond >\n");}
#line 1474 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 147 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond ==\n");}
#line 1482 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 46:
#line 134 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond <=\n");}
#line 1480 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 148 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond !=\n");}
#line 1488 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 47:
#line 135 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond >=\n");}
#line 1486 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 149 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond <\n");}
#line 1494 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 48:
#line 136 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond &&\n");}
#line 1492 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 150 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond >\n");}
#line 1500 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 49:
#line 137 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond ||\n");}
#line 1498 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 151 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond <=\n");}
#line 1506 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 50:
#line 138 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond !\n");}
#line 1504 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 152 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond >=\n");}
#line 1512 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 51:
#line 140 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Dans invocation\n");}
#line 1510 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 153 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond &&\n");}
#line 1518 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 52:
#line 142 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("printf de %s\n", (yyvsp[-2].id));}
#line 1516 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 154 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond ||\n");}
#line 1524 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
break;
case 53:
#line 144 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("return\n");}
#line 1522 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 155 "analyse_syntaxique.y" /* yacc.c:1646 */
{printf("Cond !\n");}
#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;
#line 1526 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
#line 1552 "analyse_syntaxique.tab.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@ -1750,14 +1776,16 @@ yyreturn:
#endif
return yyresult;
}
#line 146 "analyse_syntaxique.y" /* yacc.c:1906 */
#line 164 "analyse_syntaxique.y" /* yacc.c:1906 */
#include <stdio.h>
void main(void){
//TODO: rajouter gestion des erreurs
initialise_table(&table);
initialise_asm(&array);
yyparse();
print_table(&table);
remove_symboles(&table, 0);
print_table(&table);
//remove_symboles(&table, 0);
//print_table(&table);
}

View file

@ -6,16 +6,23 @@ char id[30];
%{
#include <stdio.h>
#include "table_symboles.h"
#include "gen_assembleur.h"
enum Initialised_Variable init;
enum Symbole_Type type;
Table_Symboles table;
instructions_array array;
%}
%token<nombre> tENTIER
%token<nombre> tENTIEREXP
%type<nombre> E
%type<nombre> Return
%type<nombre> Cond
%token tADD
%token tSUB
%token tMUL
@ -43,7 +50,7 @@ Table_Symboles table;
%token tRETURN
%token tOR
%token tAND
%token tIF
%token<nombre> tIF
%token tELSE
%token tWHILE
%token tCONST
@ -97,21 +104,21 @@ SuiteDecl: ;
Type : tINT {type = TYPE_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);};
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 : tVAR {printf("var %s\n", $1);};
E : E tADD E {printf("Addition\n");} ;
E : E tMUL E {printf("Multiplication\n");} ;
E : E tSUB E {printf("Soustraction\n");} ;
E : E tDIV E {printf("Division\n");} ;
E : tSUB E {printf("Soustraction\n");} ;
E : Invocation ;
E : tPO E tPF {printf("Parenthèse\n");} ;
E : tENTIER {int vt = gen_entier(&table, &array, $1); $$ = vt;};
E : tVAR {int vt = gen_var(&table, &array, $1); $$ = vt;};
E : E tADD E {gen_arithmetique(&array, ADD, $1, $3); free_temp(&table); $$ = $1;} ;
E : E tMUL E {gen_arithmetique(&array, MUL, $1, $3); free_temp(&table); $$ = $1;} ;
E : E tSUB E {gen_arithmetique(&array, SOU, $1, $3); free_temp(&table); $$ = $1;} ;
E : E tDIV E {gen_arithmetique(&array, DIV, $1, $3); free_temp(&table); $$ = $1;} ;
E : tSUB E {printf("Variable negative\n");} ;
E : Invocation {$$ = 1234;};
E : tPO E tPF {printf("Parenthèse\n"); $$ = $2; } ;
Args : tVAR SuiteArgs ;
@ -120,9 +127,19 @@ Args : ;
SuiteArgs : tVIRGULE tVAR 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 : ;
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");};
@ -136,21 +153,23 @@ Cond : E tGTE E{printf("Cond >=\n");} ;
Cond : E tAND Cond {printf("Cond &&\n");} ;
Cond : E tOR Cond {printf("Cond ||\n");} ;
Cond : tNOT Cond {printf("Cond !\n");} ;
Cond : E;
Invocation : tVAR tPO Args tPF {printf("Dans invocation\n");};
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>
void main(void){
//TODO: rajouter gestion des erreurs
initialise_table(&table);
initialise_asm(&array);
yyparse();
print_table(&table);
remove_symboles(&table, 0);
print_table(&table);
//remove_symboles(&table, 0);
//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 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
typedef struct table{
char*
}
enum operation{ADD, SUB, MUL, DIV};
typedef struct instructions_array{
instruction array[INSTRUCTION_TABLE_SIZE];
int index;
} instructions_array;
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
int new_temp();
int new_temp(Table_Symboles * table);
#endif

View file

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

View file

@ -41,17 +41,12 @@ int add_symbole_top(Table_Symboles * table, char * varName, enum Symbole_Type ty
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;
strcpy(symbole.Variable_Name, varName);
symbole.addr = table->indexAvailableBottom;
symbole.init = init;
symbole.type = type;
//symbole.symbole_depth = -1;
if (table->indexAvailableTop >= table->indexAvailableBottom){
return -1;
} else if (variable_exists(table, varName) != 0){
return -2;
} else {
table->array[table->indexAvailableBottom] = symbole;
table->indexAvailableBottom--;
@ -76,6 +71,10 @@ int remove_symboles(Table_Symboles * table, int depth){
return 0;
}
void free_temp(Table_Symboles * table){
table->indexAvailableBottom++;
}
int initialise_symbole(Table_Symboles * table, char * varName){
int index = variable_exists(table, varName);
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)
* @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
*/
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
@ -64,6 +63,9 @@ int variable_exists(Table_Symboles * table, char * varName);
*/
int remove_symboles(Table_Symboles * table, int depth);
void free_temp(Table_Symboles * table);
/**
* Initialises an already exisiting symbole
* @param table