-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathREADME
123 lines (122 loc) · 4.51 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
condition: NON condition
condition:condition {ET OU} condition
condition: eag OPCOMP eag
Pour tester faire make ensuite lancer ./programme avec un test du repertoire test
Le main est dans programme.c
Les tests sont dans le repertoire test ,
executer ./tester.sh pour executer tout les tests
il attend apres chaque test un enter pour faire un clear et faire le test suivant
Les tests syntaxiques sont ceux commençant par testsyn
Les tests semantiques sont ceux commençant par testsem
Le reste des test sont des tests exemplaires qu'on a construit ou qu'on a adapter de ressources exterieur.
----------------------------------------------------------------------------------------------------------------------------
Dans notre projet, nous avons parcouru l'ensemble des étapes, débutant par les premières
phases relatives à la calculatrice, au sein desquelles nous avons intégré tous les fonctionnalités
et les fonctionnalités bonus, telles que la prise en charge des nombres décimaux (floats) ainsi
que l'exécution des opérations correspondantes, les operateur en tant que mots “ plus, PLUS,
moins, MOINS, MUL, mul, DIV, div ” …
Par la suite, dans la section dédiée à l'interpréteur, nous avons validé le bon fonctionnement de
chaque instruction en nous appuyant sur les tests fournis dans les diapositives de cours. Nous
avons également mis en place des tests supplémentaires, en plus de ceux inclus dans le zip
fourni, afin de tester lors de la soutenance.
Nous avons enrichi la grammaire avec quelques extensions :
- La possibilité de terminer un fichier par un point-virgule, les instructions de la boucle "tanque"
par un point-virgule, de même les instructions des commandes “si” , comme dans les exemples
ci-dessous, offrant une flexibilité dans la syntaxe.
- Dans le cadre des affectations, la prise en charge des valeurs booléennes via l'opérateur ":=",
ainsi que des affectations classiques à l'aide de "=".
Ce processus exhaustif nous a permis de développer un système complet et fonctionnel,
répondant aux exigences du projet.
La grammaire choisie pour les conditions est la suivante :
condition : NON condition
condition : condition {ET, OU} condition
condition : eag OPCOMP eag
Les instructions :
● ecrire, ex : ecrire(x); , ecrire(5); , ...
● lire, ex : lire(x); , lire(abc); , ...
● affectation normale, ex : x=5; , abc=6; , …
● condition, ex : 3>4, non x<=y, x==y ou z>=t et t!=p, …
● affectation booléenne, ex : x:=3<=5 et non z>y; , x:=d==p; , …
● si condition alors instructions sinon instructions fsi, ex :
si a>=b alors ecrire(x) sinon lire(y) fsi; ,
si a!=b alors
ecrire(x);
lire(v);
ecrire(v);
sinon
ecrire(t);
lire(g);
fsi; , …
● tanque condition faire instructions fait, ex :
tanque i<4 faire
ecrire(x);
i=i+1;
fait; , …
Pour déclencher les tests pré-écris, on exécute le Makefile et ensuite, on exécute le programme
shell ./test/tester.sh.
LEXEME:
ENTIER : ‘ <seq. de chiffres> ‘
DECIMAL : ‘ <seq. de chiffres> . <seq. de chiffres> ’
PLUS : ‘ + ’ ou ‘ plus ’ ou ‘ PLUS ’
MOINS : ‘ - ’ ou ‘ moins ’ ou ‘ MOINS ‘
MUL : ‘ * ’ ou ‘ mul ’ ou ‘ MUL ’
DIV : ‘ / ’ ou ‘ div ’ ou ‘ DIV ‘
PARO : ‘ ( ‘
PARF : ‘ ) ’
IDF : ‘ <lettre><seq. lettres ou chiffres> ’
AFF : ‘ = ‘
AFFB: ‘ := ‘
SEPINST : ‘ ; ‘
LIRE : ‘ lire ‘
ECRIRE : ‘ ecrire ‘
SI : ‘ si ‘
ALORS : ‘ alors ‘
SINON : ‘ sinon ‘
FSI : ‘ fsi ‘
EQ : ‘ == ‘
NE : ‘ != ‘
LT : ‘ < ‘
LE : ‘ <= ‘
GT : ‘ > ‘
GE : ‘ >= ‘
TANQUE : ‘ tanque ‘
FAIRE : ‘ faire ‘
FAIT : ‘ fait ‘
Grammaire :
pgm –-> seq_inst
seq_inst –-> inst suite_seq_inst
suite_seq_inst –-> SEPINST seq_inst
seq_inst –-> ε
inst –-> IDF AFF eag
inst –-> LIRE PARO IDF PARF
inst —> ECRIRE PARO eag PARF
inst —> SI condition ALORS seq_inst SINON seq_inst FSI
inst —> TANQUE condition FAIRE seq_inst FAIT
condition : NON condition
condition : condition {ET, OU} condition
condition : eag OPCOMP eag
opcomp —> EQ
opcomp —> NE
opcomp —> LT
opcomp —> LE
opcomp —> GT
opcomp —> GE
opbool —> ET
opbool —> OU
opbool —> NON
eag —> seq_terme
seq_terme —> terme suite_seq_terme
suite_seq_terme —> op1 terme suite_seq_terme
suite_seq_terme —> ε
terme —> seq_facteur
seq_facteur —> facteur suite_seq_facteur
suite_seq_facteur —> op2 facteur suite_seq_facteur
suite_seq_facteur —> ε
facteur —> ENTIER
facteur —> DECIMAL
facteur —> PARO eag PARF
facteur —> IDF
op1 —> PLUS
op1 —> MOINS
op2 —> MUL
op2 —> DIV