Expression arithmetique OK+if OK
This commit is contained in:
parent
22d9a82ba6
commit
f6d265e641
9 changed files with 720 additions and 476 deletions
BIN
a.out
BIN
a.out
Binary file not shown.
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
139
gen_assembleur.c
139
gen_assembleur.c
|
@ -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;
|
||||||
|
}
|
|
@ -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
|
|
@ -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
|
|
@ -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){
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue