Réalisation d’un mini compilateur
Realise par :
- Medjahdi Islem
- Moussaoui Abdelmouncif
- Habouche Khaled Abderrahmène
- Kenniche Abderrazak
2CS - SIL1 - 2023/2024
1.Description du Language Cube
1.2.2 Declaration des variables simple :
1.2.3 Declaration des variables structures :
1.3 Les instructions de base :
1.4.1 Les opérateurs logiques :
1.4.2 Les opérateurs arithmétiques :
1.4.3 Les opérateurs de comparaison :
1.4.4 Règles d'associativité :
Un programme en Langage Cube se compose d'une séquence de déclarations et d'instructions.Chaque instruction doit occuper une seule ligne et se conclut par un point virgule ; Les blocs de code sont délimités par les mots-clés { et } .
Un commentaire est précédé par un ‘#’. Il doit être ignoré par le compilateur.
| # This is a comment in Cube |
|---|
Une déclaration peut prendre la forme de variables simples telles que des entiers, des réels, des caractères ou des booléens, ainsi que de variables structurées telles que des tableaux ou des enregistrements.
| Type | Description | Plages de valeurs |
|---|---|---|
| Integer | Représente les nombres entiers. | [ -2147483648 , 2147483647 ] |
| Real | Représente les nombres réels. | [ -3.4*10-38 , 3.4*1038 ] |
| Bool | Représente les valeurs de vérité | True ou False |
| Char | Représente un seul caractère. | Un caractère ASCII valide |
| Text | Représente une chaîne de caractères |
| Format | Example |
|---|---|
| TYPE variable_name ; | Integer amount; |
Les noms de variables commencent par une lettre ou un trait de soulignement, et peuvent contenir des caractères alphanumériques ou underscores.
Utilisez des guillemets pour entourer les chaînes de caractères.
Évitez les mots réservés et les caractères spéciaux (!, @, #, $, %).
| Structure | Format | Example |
|---|---|---|
| Tableau | TYPE nom[size]; | Integer a[4]; |
| Record | Record name : {{
}} |
Record student : {{
}} |
La taille d’un tableau doit être un entier positif
Pour accéder à un élément d’un tableau on utilise : table_name[index] avec index compris entre 0 et size-1
Pour accéder à un attribut d’un Record on utilise : record_name.attribute_name
| Format | Example |
|---|---|
| variable_name = value ; | x = 10; student.age = 21; |
| Format | Example |
|---|---|
If ( condition ) {
} else {
} |
If ( A > 10 ){
} else {
} |
| Format | Example |
|---|---|
Loop (init, condition , step){
} |
Loop (i=0, i<10 , i=i+1) {
} |
While ( condition ) {
} |
While( i < 10 ){
} |
On peut avoir des boucles imbriquées
| Instruction | Example |
|---|---|
| TYPE var_name = Input(prompt); | Real x = Input(‘Enter a number’); |
| Output(value); | Output(“Hello World!”); |
| Operateur | Format | Example |
|---|---|---|
| AND | Expression1 and Expression2 | (a>10) and ( isOk) |
| OR | Expression1 or Expression2 | (a>10) or (isOk) |
| NOT | not (Expression) | not (a>10) |
L'associativité s'applique aux opérations AND,OR .
| Operateur | Format | Example |
|---|---|---|
| + | Expression1 + Expression2 | 10 + A |
| - | Expression1 - Expression2 | A - 2 |
| * | Expression1 * Expression2 | (A+2) * 5 |
| // | Expression1 // Expression2 # Expression2 <> zero |
A // 3 |
| % | Expression1 % Expression2 | A % 2 # modulo |
L'associativité s'applique aux opérations + , *
| > , >= , < , <= , <> , == |
|---|
Ce passage explique les priorités et les règles d'associativité dans l'évaluation des expressions mathématiques ou logiques.
1. Parenthèses : Les opérations à l'intérieur des parenthèses ont la priorité la plus élevée et sont évaluées en premier.
2. Not : L'opérateur logique "not" (négation logique) est appliqué ensuite.
3. And : L'opérateur logique "and" (conjonction logique) a une priorité inférieure à "not" et est évalué après.
4. Or : L'opérateur logique "or" (disjonction logique) est appliqué après "and".
5. Multiplication, Division, Modulo : Ces opérations ont une priorité supérieure à l'addition et à la soustraction.
6. Addition, Soustraction : Les opérations d'addition et de soustraction ont une priorité inférieure à la multiplication, à la division et au modulo.
7. Comparaisons : Les opérations de comparaison (comme <, >, <=, >=, ==, <>) sont effectuées en dernier, ayant la priorité la plus basse.
En respectant ces règles, l'ordre d'exécution des opérations est déterminé dans une expression complexe, assurant une évaluation correcte et cohérente.