• Aucun résultat trouvé

Version Jean-Luc Béchennec Mikaël Briday Pierre Molinaro

N/A
N/A
Protected

Academic year: 2022

Partager "Version Jean-Luc Béchennec Mikaël Briday Pierre Molinaro"

Copied!
488
0
0

Texte intégral

(1)

GALGAS

Version 3.2.7

Jean-Luc Béchennec

Mikaël Briday

Pierre Molinaro

5 septembre 2016

(2)

Table des matières

Table des matières 2

Liste des tableaux 29

Table des figures 31

I Utilisation 32

1 Tutorial : le langage LOGO 33

1.1 Description rapide de GALGAS. . . 33

1.2 Présentation du langage LOGO . . . 34

1.2.1 Quelques exemples. . . 35

1.2.2 Définition lexicale. . . 35

1.2.3 Définition syntaxique. . . 36

1.2.4 Sémantique statique . . . 37

1.2.5 Sémantique dynamique . . . 37

1.3 Installation de GALGAS. . . 38

1.3.1 Téléchargement des sources et compilation. . . 38

1.3.2 Installation . . . 39

1.4 Création du squelette du compilateur LOGO . . . 39

1.4.1 Visite guidée du répertoire créé. . . 40

1.4.2 Première compilation du projet . . . 40

1.5 Analyseur lexical . . . 42

1.5.1 Analyse lexicale d’un identificateur et d’un mot réservé . . . . 43

1.5.2 Analyse lexicale d’une constante entière. . . 44

1.5.3 Analyse des délimiteurs . . . 45

1.5.4 Analyse des chaînes de caractères . . . 46

1.5.5 Analyse des séparateurs. . . 46

1.5.6 Analyse des commentaires . . . 47

1.6 Analyseur syntaxique . . . 47

1.7 Sémantique statique . . . 50

1.7.1 Préliminaire : obtenir la valeur des identificateurs . . . 50

1.7.2 Principes d’écriture de la sémantique . . . 51

1.7.3 Écriture de la sémantique statique . . . 52

(3)

TABLE DES MATIÈRES 3

1.8 Sémantique dynamique . . . 55

1.8.1 Préliminaire : les constantes entières . . . 55

1.8.2 Mise à plat de la liste des instructions . . . 55

1.8.3 Hiérarchie des classes des instructions . . . 55

1.8.4 Instructions sur les objets de typeclass . . . 56

1.8.5 Travail à faire . . . 56

1.8.6 Le type liste d’instructions. . . 56

1.8.7 Travail à faire . . . 57

1.8.8 L’instructionCALL . . . 58

1.8.9 Modification du type table@routineMap . . . 58

1.9 Génération de code . . . 59

1.9.1 Déclaration de la méthode abstraite . . . 59

1.9.2 Implémentation d’une héritière concrète . . . 59

1.9.3 Implémentation de l’héritière concrète pour@rotate . . . 60

1.9.4 Implémentation de l’héritière concrète pour@forward. . . 60

1.9.5 Calcul des tracés . . . 61

1.9.6 Exemple de fichier SVG . . . 61

1.9.7 Template de génération du fichier SVG . . . 61

1.9.8 Déclarer un template en GALGAS. . . 62

1.9.9 Construire la liste des instructions SVG . . . 62

2 Options de la ligne de commande 65 2.1 Options générales . . . 66

2.2 Options quietetverbose . . . 66

2.3 Option de création d’un projet . . . 66

2.4 Options contrôlant le compilateur . . . 66

2.5 Options contrôlant la génération de fichiers . . . 67

2.6 Options de débogage du compilateur . . . 67

2.7 Options de documentation . . . 68

3 Élements lexicaux 70 3.1 Les identificateurs. . . 70

3.2 Les mots réservés. . . 71

3.3 Les délimiteurs . . . 71

3.4 Les sélecteurs . . . 72

3.5 Les séparateurs . . . 72

3.6 Les commentaires. . . 72

3.7 Les non terminaux . . . 72

3.8 Les terminaux . . . 73

3.9 Les constantes littérales entières . . . 73

3.10 Les constantes littérales flottantes . . . 73

3.11 Les caractères littéraux. . . 74

3.12 Les constantes chaînes de caractères . . . 75

(4)

3.13 Les noms de types . . . 75

3.14 Les attributs . . . 75

4 Calcul des entités utiles 77 4.1 Le calcul d’utilité . . . 77

4.2 Trucs et astuces. . . 79

4.3 Cas particulier : l’appel indirect des fonctions . . . 79

5 Diagrammes syntaxiques des grammaires en TeX 80 5.1 Mise en œuvre. . . 80

5.2 Le documentlogo_grammar.document.tex . . . 81

5.3 Le fichier logo_grammar.tex . . . 82

6 Formatage pour LaTeX 83 6.1 Configuration de votre compilateur . . . 84

6.1.1 option--mode=latex. . . 84

6.1.2 option--mode :suffixe=latex . . . 85

6.1.3 Formatages complémentaires . . . 85

6.1.4 Comment s’effectue la traduction en LATEX . . . 87

6.1.5 Fonctionnement de l’option--mode=latex . . . 88

6.2 Affichage via le paquetagefilecontents . . . 88

6.3 Environnement d’affichage formatté . . . 89

6.3.1 Packageverbatim . . . 89

6.3.2 Définition de l’environnement . . . 90

6.4 Affichage du code en ligne . . . 91

7 Traduction dirigée par la syntaxe 94 7.1 Le programme d’exemple . . . 94

7.2 Activer la traduction dirigée par la syntaxe . . . 96

7.3 Obtenir la chaîne traduite . . . 96

7.4 Modifier l’instruction d’appel de terminal . . . 97

7.5 Insérer du texte : instruction send . . . 98

7.6 Modifier l’instruction d’appel de non-terminal . . . 100

II Composants 101

8 Le composantproject 102 8.1 En-tête du fichier projet . . . 103

8.1.1 Version du projet . . . 103

8.1.2 Nom des exécutables engendrés . . . 103

8.2 Cibles de compilation . . . 104

8.2.1 Cibles pour Linux . . . 104

8.2.2 Cibles pour Mac . . . 104

8.2.3 Cible pour Windows :CodeBlocks . . . 106

(5)

TABLE DES MATIÈRES 5

8.3 Déclaration %quietOutputByDefault . . . 107

8.4 Déclaration des fichiers sources du projet . . . 107

9 ProjetXcode et application Cocoa 109 9.1 Paramétrage du projet GALGAS . . . 109

9.2 Projet Xcodeengendré . . . 110

9.3 Définir des icônes pour votre application Cocoa . . . 111

9.4 Indexation des fichiers sources . . . 111

9.4.1 En tête du composantlexique . . . 112

9.4.2 En tête du composantgrammar . . . 113

9.4.3 Règle d’analyse des fichiers sources . . . 113

9.4.4 Déclaration des classes d’index . . . 113

9.4.5 Définition des entrées indexées. . . 114

9.4.6 Compilation et essai . . . 115

10 Le composantlexique 117 10.1 Définition d’un composant lexique. . . 117

10.2 Comment opère un analyseur lexical . . . 118

10.3 Ambiguïtés lexicales . . . 119

10.4 Un exemple . . . 119

10.5 Déclarations lexicales. . . 120

10.5.1 Déclaration d’un symbole terminal . . . 120

10.5.2 Déclaration d’une liste de symboles terminaux . . . 121

10.5.3 Déclaration d’un attribut terminal . . . 121

10.5.4 Déclaration d’un message d’erreur lexicale . . . 122

10.6 Règles lexicales . . . 122

10.6.1 Règle s’appuyant sur une liste . . . 122

10.6.2 Simple règle. . . 123

10.7 Instructions lexicales . . . 123

10.7.1 Instruction lexicaleselect . . . 123

10.7.2 Instruction lexicalerepeat . . . 124

10.7.3 Appel d’une action lexicale . . . 124

10.7.4 Appel d’une fonction lexicale . . . 125

10.7.5 Instruction lexicaleerror . . . 125

10.7.6 Instruction lexicalesend . . . 125

10.7.7 Instruction lexicaledrop . . . 126

10.7.8 Instruction lexicaletag . . . 126

10.7.9 Instruction lexicalerewind . . . 126

10.8 Routines lexicales prédéfinies . . . 126

10.8.1 RoutinecodePointToUnicode. . . 127

10.8.2 convertBinaryStringIntoBigInt . . . 127

10.8.3 convertDecimalStringIntoBigInt . . . 127

10.8.4 convertDecimalStringIntoSInt . . . 127

(6)

10.8.5 RoutineconvertDecimalStringIntoSInt64 . . . 127

10.8.6 RoutineconvertDecimalStringIntoUInt. . . 128

10.8.7 RoutineconvertDecimalStringIntoUInt64 . . . 128

10.8.8 convertHexStringIntoBigInt . . . 128

10.8.9 RoutineconvertHTMLSequenceToUnicodeCharacter . . . 128

10.8.10 RoutineconvertHexStringIntoSInt . . . 128

10.8.11 RoutineconvertHexStringIntoSInt64 . . . 128

10.8.12 RoutineconvertHexStringIntoUInt . . . 129

10.8.13 RoutineconvertHexStringIntoUInt64 . . . 129

10.8.14 RoutineconvertStringToDouble . . . 129

10.8.15 RoutineconvertUInt64ToSInt64 . . . 129

10.8.16 RoutineconvertUIntToSInt . . . 130

10.8.17 RoutineconvertUnsignedNumberToUnicodeChar . . . 130

10.8.18 RoutineenterBinaryDigitIntoBigInt . . . 130

10.8.19 RoutineenterBinDigitIntoUInt64 . . . 130

10.8.20 RoutineenterBinDigitIntoUInt64 . . . 130

10.8.21 RoutineenterCharacterIntoCharacter . . . 131

10.8.22 RoutineenterCharacterIntoString . . . 131

10.8.23 RoutineenterDecimalDigitIntoBigInt . . . 131

10.8.24 RoutineenterDigitIntoASCIIcharacter. . . 131

10.8.25 RoutineenterDigitIntoUInt. . . 132

10.8.26 RoutineenterDigitIntoUInt64 . . . 132

10.8.27 RoutineenterHexDigitIntoASCIIcharacter . . . 132

10.8.28 RoutineenterHexDigitIntoBigInt . . . 133

10.8.29 RoutineenterHexDigitIntoUInt . . . 133

10.8.30 RoutineenterHexDigitIntoUInt64 . . . 133

10.8.31 RoutineenterOctDigitIntoUInt . . . 134

10.8.32 RoutineenterOctDigitIntoUInt64 . . . 134

10.8.33 RoutinemultiplyUInt . . . 134

10.8.34 RoutinemultiplyUInt64 . . . 134

10.8.35 RoutinenegateSInt . . . 134

10.8.36 RoutinenegateSInt64 . . . 135

10.8.37 RoutineresetString . . . 135

10.9 Fonctions lexicales prédéfinies . . . 135

10.9.1 FonctiontoLower . . . 135

10.9.2 FonctiontoUpper . . . 135

10.10 Définir vos propres actions et fonctions lexicales . . . 135

10.10.1 Où ? . . . 136

10.10.2 Correspondance entre les appels d’actions GALGAS et C++ . 136 10.11 Exemples d’analyseurs lexicaux . . . 137

10.11.1 Analyser des identificateurs . . . 137

10.11.2 Analyser des identificateurs et des mots-clés . . . 137

10.11.3 Analyser des délimiteurs. . . 137

(7)

TABLE DES MATIÈRES 7

10.11.4 Analyser des séparateurs . . . 137

10.11.5 Analyser des commentaires . . . 138

10.11.6 Analyser des entiers décimaux non signés . . . 138

10.11.7 Analyser des entiers hexadécimaux non signés . . . 138

10.11.8 Analyser des constantes caractère . . . 138

10.11.9 Analyser des constantes chaîne de caractères . . . 139

10.11.10Analyser des constantes flottantes . . . 139

10.12 Back trackingavec les instructionstag etrewind . . . 140

10.13 Ajouter la coloration lexicale (sur Mac uniquement) . . . 141

10.13.1 Exemple : les styles de l’analyseur lexical GALGAS . . . 142

10.13.2 Appliquer un style aux commentaires . . . 142

11 Écrire un composant gammaire 143 11.1 GALGAS and Context-Free Grammars . . . 143

11.2 Analyse en plusieurs phases . . . 143

12 Graphic User Interface Component 144 13 Le composantoption 145 13.1 Déclaration d’une option . . . 145

13.2 Option booléenne . . . 146

13.3 Option entière . . . 146

13.4 Option chaîne de caractères . . . 146

14 Règle d’analyse de fichier source 148

III Le système de types 149

15 Présentation du système de types 150 15.1 Types de base . . . 150

15.2 Constructions de nouveaux types . . . 151

15.3 Types prédéfinis. . . 151

15.4 Opérations définies pour tous les types . . . 152

15.4.1 L’opérateur== . . . 153

15.4.2 L’opérateur!= . . . 153

15.4.3 Le getterdescription. . . 153

15.4.4 Le getterdynamicType. . . 153

15.4.5 Le getterobject . . . 154

16 Le type @application 155 16.1 Numéros de version . . . 155

16.1.1 ConstructeurgalgasVersionString . . . 155

16.1.2 ConstructeurprojectVersionString . . . 155

16.2 Arguments de la ligne de commande . . . 156

(8)

16.2.1 ConstructeurcommandLineArgumentCount . . . 156

16.2.2 ConstructeurcommandLineArgumentAtIndex . . . 156

16.3 Options booléennes de la ligne de commande . . . 157

16.3.1 ConstructeurboolOptionNameList . . . 157

16.3.2 ConstructeurboolOptionCommentString . . . 157

16.3.3 ConstructeurboolOptionInvocationCharacter . . . 157

16.3.4 ConstructeurboolOptionInvocationString . . . 158

16.4 Options entières de la ligne de commande. . . 159

16.4.1 ConstructeuruintOptionNameList . . . 159

16.4.2 ConstructeuruintOptionCommentString . . . 159

16.4.3 ConstructeuruintOptionInvocationCharacter . . . 159

16.4.4 ConstructeuruintOptionInvocationString . . . 160

16.5 Options chaînes de caractères de la ligne de commande. . . 161

16.5.1 ConstructeurstringOptionNameList . . . 161

16.5.2 ConstructeurstringOptionCommentString. . . 161

16.5.3 ConstructeurstringOptionInvocationCharacter . . . 161

16.5.4 ConstructeurstringOptionInvocationString . . . 162

16.6 ConstructeurverboseOutput . . . 163

16.7 Instrospection des composants lexique . . . 163

16.7.1 ConstructeurkeywordIdentifierSet . . . 163

16.7.2 ConstructeurkeywordListForIdentifier . . . 164

17 Le type @bigint 165 17.1 Constante littérale . . . 165

17.2 Construction . . . 165

17.2.1 Constructeurzero . . . 166

17.2.2 Constructeurdefault . . . 166

17.3 Comparaison. . . 166

17.3.1 Opérateurs infixés de comparaison. . . 167

17.3.2 GetterisZero . . . 167

17.3.3 Gettersign . . . 167

17.4 Conversions . . . 167

17.4.1 GetterbitCountForSignedRepresentation . . . 168

17.4.2 GetterbitCountForUnsignedRepresentation . . . 168

17.4.3 GetterfitsInSInt. . . 169

17.4.4 GetterfitsInSInt64 . . . 169

17.4.5 GetterfitsInUInt. . . 170

17.4.6 GetterfitsInUInt64 . . . 170

17.4.7 Gettersint . . . 170

17.4.8 Gettersint64 . . . 171

17.4.9 Getteruint . . . 171

17.4.10 Getteruint64 . . . 171

17.5 Conversions en chaîne de caractères . . . 172

(9)

TABLE DES MATIÈRES 9

17.5.1 Getterstring . . . 172

17.5.2 GetterspacedString . . . 172

17.5.3 GetterhexString. . . 172

17.5.4 GetterxString . . . 173

17.6 Extraction . . . 173

17.6.1 Getterextract8ForUnsignedRepresentation . . . 174

17.6.2 Getterextract8ForSignedRepresentation . . . 174

17.6.3 Getterextract32ForUnsignedRepresentation . . . 176

17.6.4 Getterextract32ForSignedRepresentation. . . 177

17.6.5 Getterextract64ForUnsignedRepresentation . . . 178

17.6.6 Getterextract64ForSignedRepresentation. . . 179

17.7 Arithmétique . . . 180

17.7.1 Opérateurs+ et-préfixés . . . 180

17.7.2 Getterabs . . . 180

17.7.3 Addition et soustraction . . . 181

17.7.4 Incrémentation et décrémentation . . . 181

17.7.5 Multiplication . . . 181

17.8 Division. . . 181

17.8.1 Opérateur «/» infixé . . . 182

17.8.2 Opérateur «mod» infixé. . . 182

17.8.3 MéthodedivideBy . . . 183

17.8.4 MéthodefloorDivideBy . . . 184

17.8.5 MéthodeceilDivideBy . . . 185

17.9 Décalages . . . 186

17.9.1 Opérateur<< . . . 186

17.9.2 Opérateur>> . . . 186

17.10 Opérations logiques. . . 187

17.10.1 Opérateur &infixé . . . 187

17.10.2 Opérateur |infixé . . . 188

17.10.3 Opérateur infixé . . . 188

17.10.4 Opérateur préfixé . . . 189

17.11 Manipulation de bits . . . 189

17.11.1 GetterbitAtIndex . . . 189

17.11.2 Setter setBitAtIndex . . . 190

17.11.3 Setter complementBitAtIndex . . . 190

18 Le type @binaryset 192 18.1 Constructeurs . . . 192

18.1.1 ConstructeurbinarySetWithBit . . . 192

18.1.2 ConstructeurbinarySetWithEqualComparison . . . 192

18.1.3 ConstructeurbinarySetWithEqualToConstant . . . 193

18.1.4 ConstructeurbinarySetWithGreaterOrEqualComparison . . 193

18.1.5 ConstructeurbinarySetWithGreaterOrEqualToConstant . . 194

(10)

18.1.6 ConstructeurbinarySetWithLowerOrEqualComparison. . . . 194

18.1.7 ConstructeurbinarySetWithLowerOrEqualToConstant. . . . 195

18.1.8 ConstructeurbinarySetWithNotEqualComparison . . . 195

18.1.9 ConstructeurbinarySetWithNotEqualToConstant . . . 195

18.1.10 Constructeur binarySetWithPredicateString . . . 196

18.1.11 Constructeur binarySetWithStrictGreaterComparison . . . 197

18.1.12 Constructeur binarySetWithStrictGreaterThanConstant. . 197

18.1.13 Constructeur binarySetWithStrictLowerComparison . . . . 198

18.1.14 Constructeur binarySetWithStrictLowerThanConstant . . . 198

18.1.15 Constructeur emptyBinarySet . . . 198

18.1.16 Constructeur fullBinarySet . . . 199

18.2 Getters . . . 199

18.2.1 GetteraccessibleStates . . . 199

18.2.2 GetterbinarySetByTranslatingFromIndex . . . 200

18.2.3 GettercompressedValueCount . . . 200

18.2.4 GettercompressedStringValueList . . . 200

18.2.5 GettercontainsValue . . . 200

18.2.6 GetterequalTo . . . 201

18.2.7 GetterexistOnBitIndex . . . 201

18.2.8 GetterexistsOnBitRange . . . 201

18.2.9 GetterexistOnBitIndexAndBeyond . . . 202

18.2.10 GetterforAllOnBitIndex . . . 202

18.2.11 GetterforAllOnBitIndexAndBeyond . . . 202

18.2.12 GettergreaterOrEqualTo . . . 202

18.2.13 GetterisEmpty . . . 202

18.2.14 GetterisFull . . . 203

18.2.15 GetterITE . . . 203

18.2.16 GetterlowerOrEqualTo . . . 203

18.2.17 GetternotEqualTo . . . 203

18.2.18 GetterpredicateStringValue . . . 204

18.2.19 GetterstrictGreaterThan . . . 204

18.2.20 GetterstrictLowerThan . . . 204

18.2.21 GetterstringValueList . . . 204

18.2.22 GetterstringValueListWithNameList . . . 204

18.2.23 Getterswap021 . . . 205

18.2.24 Getterswap01 . . . 205

18.2.25 Getterswap102 . . . 205

18.2.26 Getterswap120 . . . 206

18.2.27 Getterswap201 . . . 206

18.2.28 Getterswap210 . . . 206

18.2.29 GettertransitiveClosure . . . 207

18.2.30 Getteruint64ValueList . . . 207

18.2.31 GettervalueCount . . . 207

(11)

TABLE DES MATIÈRES 11

18.3 Logical Operators . . . 207

18.4 Comparison Operators . . . 208

18.5 Shift Operators . . . 208

19 Le type @bool 209 19.1 Conversion en chaîne de caractères . . . 209

19.1.1 GettercString . . . 209

19.1.2 GetterocString . . . 209

19.2 Conversion en entier . . . 210

19.2.1 Getterbigint . . . 210

19.2.2 Gettersint . . . 210

19.2.3 Gettersint64 . . . 210

19.2.4 Getteruint . . . 210

19.2.5 Getteruint64 . . . 210

19.3 Opérateurs logiques . . . 211

19.4 Comparaison. . . 211

20 Le type @char 212 20.1 Constructors . . . 213

20.1.1 ConstructeurreplacementCharacter . . . 213

20.1.2 ConstructeurunicodeCharacterFromRawKeyboard . . . 213

20.1.3 ConstructeurunicodeCharacterWithUnsigned . . . 214

20.2 Getters . . . 214

20.2.1 Getterisalnum . . . 214

20.2.2 Getterisalpha . . . 214

20.2.3 Getteriscntrl . . . 214

20.2.4 Getterisdigit . . . 215

20.2.5 Getterislower . . . 215

20.2.6 GetterisUnicodeCommand . . . 215

20.2.7 GetterisUnicodeLetter . . . 215

20.2.8 GetterisUnicodeMark . . . 215

20.2.9 GetterisUnicodePunctuation . . . 216

20.2.10 GetterisUnicodeSeparator . . . 216

20.2.11 GetterisUnicodeSymbol . . . 216

20.2.12 Getterisupper . . . 216

20.2.13 Getterstring . . . 217

20.2.14 Getteruint . . . 217

20.2.15 GetterunicodeName . . . 217

20.2.16 GetterunicodeToLower . . . 217

20.2.17 GetterunicodeToUpper . . . 217

20.3 Comparison Operators . . . 218

21 Le type @data 219 21.1 Constructeurs . . . 219

(12)

21.1.1 ConstructeurdataWithContentsOfFile . . . 219

21.1.2 ConstructeuremptyData . . . 219

21.2 Getters . . . 219

21.2.1 GettercStringRepresentation . . . 219

21.2.2 Getterlength . . . 220

21.3 Méthodes. . . 220

21.3.1 MéthodewriteToExecutableFile . . . 220

21.3.2 MéthodewriteToFile . . . 220

21.3.3 MéthodewriteToFileWhenDifferentContents . . . 220

21.4 Setters . . . 221

21.4.1 SetterappendByte . . . 221

21.4.2 SetterappendData . . . 221

21.4.3 SetterappendShortBE . . . 221

21.4.4 SetterappendShortLE . . . 221

21.4.5 SetterappendUIntBE. . . 221

21.4.6 SetterappendUIntLE. . . 222

21.4.7 SetterappendUTF8String . . . 222

21.5 Énumération des valeurs . . . 222

22 Le type @double 223 22.1 Constructor . . . 223

22.1.1 ConstructeurdoubleWithBinaryImage . . . 223

22.1.2 Constructeurpi. . . 223

22.2 Getters . . . 224

22.2.1 GetterbinaryImage . . . 224

22.2.2 Gettercos . . . 224

22.2.3 Gettersin . . . 224

22.2.4 Gettersint . . . 224

22.2.5 Gettersint64 . . . 224

22.2.6 Getterstring . . . 224

22.2.7 Gettertan . . . 225

22.2.8 Getteruint . . . 225

22.2.9 Getteruint64 . . . 225

22.3 Arithmétique . . . 225

22.3.1 Opérateurs infixés . . . 225

22.3.2 Opérateurs préfixés . . . 226

22.3.3 Instructions . . . 226

22.4 Comparison Operators . . . 226

23 Le type @filewrapper 227 23.1 Constructor . . . 227

23.2 Setter. . . 227

23.2.1 SettersetCurrentDirectory . . . 227

(13)

TABLE DES MATIÈRES 13

23.3 Getters . . . 227

23.3.1 GetterallTextFilePathes . . . 227

23.3.2 GetterallDirectoryPathes . . . 227

23.3.3 GettercurrentDirectory . . . 228

23.3.4 GetterallFilePathesWithExtension . . . 228

23.3.5 GetterdirectoryExistsAtPath . . . 228

23.3.6 GetterfileExistsAtPath . . . 228

23.3.7 GettertextFileContentsAtPath . . . 228

23.3.8 GetterbinaryFileContentsAtPath . . . 228

23.3.9 GetterabsolutePathForPath. . . 228

24 Le type @location 229 24.1 Constructeurs . . . 229

24.1.1 Constructeurhere . . . 229

24.1.2 Constructeurnext . . . 229

24.1.3 Constructeurnowhere . . . 230

24.2 Getters . . . 230

24.2.1 Gettercolumn . . . 230

24.2.2 GetterisNowhere. . . 230

24.2.3 Getterline . . . 231

24.2.4 GetterlocationIndex . . . 231

24.2.5 GetterlocationString . . . 231

25 Le type @function 232 25.1 Constructeurs . . . 232

25.1.1 ConstructeurfunctionList. . . 232

25.1.2 ConstructeurfunctionWithName . . . 233

25.1.3 ConstructeurisFunctionDefined . . . 233

25.2 Getters . . . 233

25.2.1 GetterformalParameterTypeList . . . 233

25.2.2 Getterinvoke . . . 233

25.2.3 GetterresultType . . . 234

26 Le type @object 235 27 Le type @sint 236 27.1 Constructors . . . 236

27.1.1 Constructeurmin . . . 236

27.1.2 Constructeurmax . . . 236

27.2 Getters . . . 237

27.2.1 Getterbigint . . . 237

27.2.2 Getterdouble . . . 237

27.2.3 Gettersint64 . . . 237

27.2.4 Getterstring . . . 237

(14)

27.2.5 Getteruint . . . 237

27.2.6 Getteruint64 . . . 238

27.3 Arithmétique . . . 238

27.3.1 Opérateurs infixés . . . 238

27.3.2 Opérateurs préfixés . . . 239

27.3.3 Instructions . . . 239

27.4 Shift Operators . . . 240

27.5 Logical Operators . . . 240

27.6 Comparison Operators . . . 240

28 Le type @sint64 242 28.1 Constructors . . . 242

28.1.1 Constructeurmin . . . 242

28.1.2 Constructeurmax . . . 242

28.2 Getters . . . 243

28.2.1 Getterbigint . . . 243

28.2.2 Getterdouble . . . 243

28.2.3 Gettersint . . . 243

28.2.4 Getterstring . . . 243

28.2.5 Getteruint . . . 243

28.2.6 Getteruint64 . . . 244

28.3 Arithmétique . . . 244

28.3.1 Opérateurs infixés . . . 244

28.3.2 Opérateurs préfixés . . . 244

28.3.3 Instructions . . . 245

28.4 Shift Operators . . . 245

28.5 Logical Operators . . . 246

28.6 Comparison Operators . . . 246

29 Le type @string 248 29.1 Chaînes de caractères littérales . . . 248

29.2 Constructeurs . . . 248

29.2.1 ConstructeurcomponentsJoinedByString . . . 248

29.2.2 ConstructeurCppChar . . . 249

29.2.3 ConstructeurCppLineComment . . . 249

29.2.4 ConstructeurCppTitleComment. . . 249

29.2.5 ConstructeurCppSpaceComment. . . 250

29.2.6 Constructeurdefault . . . 250

29.2.7 ConstructeurhomeDirectory . . . 250

29.2.8 ConstructeurnewWithStdIn. . . 250

29.2.9 ConstructeurretrieveAndResetTemplateString . . . 251

29.2.10 Constructeur stringWithContentsOfFile . . . 251

29.2.11 Constructeur stringWithCurrentDateTime. . . 251

(15)

TABLE DES MATIÈRES 15

29.2.12 Constructeur stringWithCurrentDirectory . . . 251

29.2.13 Constructeur stringWithEnvironmentVariable . . . 251

29.2.14 Constructeur stringWithEnvironmentVariableOrEmpty . . . 252

29.2.15 Constructeur stringWithSequenceOfCharacters . . . 252

29.2.16 Constructeur stringWithSourceFilePath . . . 252

29.2.17 Constructeur stringWithSymbolicLinkContents . . . 252

29.3 Getters . . . 253

29.3.1 GetterabsolutePathFromPath . . . 253

29.3.2 GetterassemblerRepresentation . . . 253

29.3.3 Gettercapacity . . . 254

29.3.4 GettercharacterAtIndex . . . 254

29.3.5 GettercomponentsSeparatedByString . . . 254

29.3.6 GettercontainsCharacter . . . 254

29.3.7 GettercontainsCharacterInRange . . . 254

29.3.8 GettercurrentColumn . . . 255

29.3.9 GetterdecimalUnsignedNumber . . . 255

29.3.10 GetterdecodedStringFromRepresentation . . . 255

29.3.11 Getterdirectories . . . 256

29.3.12 GetterdirectoriesWithExtensions . . . 256

29.3.13 GetterdirectoryExists . . . 256

29.3.14 GetterdoesEnvironmentVariableExist . . . 257

29.3.15 GetterfileExists. . . 257

29.3.16 GetterfileNameRepresentation . . . 257

29.3.17 GetterfirstCharacterOrNul . . . 258

29.3.18 Getterhere . . . 258

29.3.19 GetterhiddenFiles . . . 258

29.3.20 GetterHTMLRepresentation . . . 258

29.3.21 GetteridentifierRepresentation . . . 259

29.3.22 GetterisDecimalUnsignedNumber . . . 259

29.3.23 GetterisSymbolicLink . . . 259

29.3.24 GetterlastCharacter . . . 260

29.3.25 GetterlastPathComponent . . . 260

29.3.26 GetterleftSubString . . . 260

29.3.27 Getterlength . . . 260

29.3.28 GetterlowercaseString . . . 260

29.3.29 Gettermd5 . . . 261

29.3.30 GetternameRepresentation . . . 261

29.3.31 GetternativePathWithUnixPath . . . 262

29.3.32 Getternowhere . . . 262

29.3.33 GetterpathExtension . . . 262

29.3.34 Getterpopen . . . 262

29.3.35 Getterrange . . . 263

29.3.36 GetterregularFiles . . . 263

(16)

29.3.37 GetterregularFilesWithExtensions . . . 263

29.3.38 GetterrelativePathFromPath . . . 263

29.3.39 GetterreversedString . . . 264

29.3.40 GetterrightSubString . . . 264

29.3.41 GetterstringByCapitalizingFirstCharacter . . . 264

29.3.42 GetterstringByDeletingLastPathComponent . . . 264

29.3.43 GetterstringByDeletingPathExtension. . . 264

29.3.44 GetterstringByLeftAndRightPadding . . . 265

29.3.45 GetterstringByLeftPadding. . . 265

29.3.46 GetterstringByRemovingCharacterAtIndex. . . 265

29.3.47 GetterstringByReplacingStringByString . . . 266

29.3.48 GetterstringByRightPadding . . . 266

29.3.49 GetterstringByStandardizingPath . . . 266

29.3.50 GetterstringByTrimmingWhiteSpaces . . . 266

29.3.51 GettersubString. . . 266

29.3.52 GettersubStringFromIndex . . . 267

29.3.53 Gettersystem . . . 267

29.3.54 GetterunixPathWithNativePath . . . 267

29.3.55 GetteruppercaseString . . . 267

29.3.56 Getterutf32Representation. . . 268

29.3.57 Getterutf8Representation . . . 268

29.3.58 Getterutf8RepresentationWithoutDelimiters . . . 268

29.4 Méthodes. . . 268

29.4.1 MéthodemakeDirectory . . . 268

29.4.2 MéthodemakeDirectoryAndWriteToExecutableFile . . . 269

29.4.3 MéthodemakeDirectoryAndWriteToFile . . . 269

29.4.4 MéthodemakeSymbolicLinkWithPath . . . 269

29.4.5 MéthodewriteToExecutableFile . . . 269

29.4.6 MéthodewriteToExecutableFileWhenDifferentContents . 269 29.4.7 MéthodewriteToFile . . . 270

29.4.8 MéthodewriteToFileWhenDifferentContents . . . 270

29.5 Setters . . . 270

29.5.1 SetterappendSpacesUntilColumn . . . 270

29.5.2 SetterdecIndentation . . . 270

29.5.3 SetterincIndentation . . . 271

29.5.4 SetterinsertCharacterAtIndex. . . 271

29.5.5 SettersetCapacity . . . 271

29.5.6 SetterremoveCharacterAtIndex. . . 271

29.5.7 SettersetCharacterAtIndex . . . 272

29.6 Procédures de type . . . 272

29.6.1 Procédure de typedeleteFile . . . 272

29.6.2 Procédure de typedeleteFileIfExists . . . 272

29.6.3 Procédure de typegenerateFile. . . 272

(17)

TABLE DES MATIÈRES 17

29.6.4 Procédure de typegenerateFileWithPattern . . . 273

29.6.5 Procédure de typeremoveDirectoryRecursively . . . 273

29.6.6 Procédure de typeremoveEmptyDirectory . . . 273

30 Le type @stringset 274 30.1 Constructors . . . 274

30.1.1 ConstructeuremptySet . . . 274

30.1.2 ConstructeursetWithString . . . 274

30.2 Getters . . . 274

30.2.1 GetteranyString. . . 274

30.2.2 Gettercount . . . 275

30.2.3 GetterhasKey . . . 275

30.2.4 GetterstringList . . . 275

30.3 Setter. . . 275

30.3.1 SetterremoveKey . . . 275

30.4 the +=Operator . . . 275

30.5 the &Operator. . . 276

30.6 the |Operator. . . 276

30.7 the -Operator. . . 276

30.8 Enumerating@stringset objects . . . 277

30.9 Comparison Operators . . . 277

31 Le type @timer 278 31.1 Constructeurs . . . 278

31.1.1 Constructeurstart. . . 278

31.2 Setters . . . 279

31.2.1 Setterresume . . . 279

31.2.2 Setterstop . . . 279

31.3 Getters . . . 279

31.3.1 GetterisRunning. . . 279

31.3.2 GettermsFromStart . . . 280

31.3.3 Getterstring . . . 280

32 Le type @type 281 33 Le type @uint 282 33.1 Constructors . . . 282

33.1.1 ConstructeurerrorCount . . . 282

33.1.2 Constructeurmax . . . 282

33.1.3 ConstructeurvalueWithMask . . . 283

33.1.4 ConstructeurwarningCount. . . 283

33.2 Getters . . . 283

33.2.1 Getterbigint . . . 283

33.2.2 Getterdouble . . . 283

(18)

33.2.3 GetterhexString. . . 283

33.2.4 GetterisInRange. . . 284

33.2.5 GetterisUnicodeValueAssigned . . . 284

33.2.6 GetterlsbIndex . . . 284

33.2.7 GettersignificantBitCount . . . 284

33.2.8 Gettersint . . . 285

33.2.9 Gettersint64 . . . 285

33.2.10 Getterstring . . . 285

33.2.11 Getteruint64 . . . 285

33.2.12 GetterxString . . . 286

33.3 Arithmétique . . . 286

33.3.1 Opérateurs infixés . . . 286

33.3.2 Opérateur préfixé. . . 287

33.3.3 Instructions . . . 287

33.4 Shift Operators . . . 287

33.5 Logical Operators . . . 288

33.6 Comparison Operators . . . 288

34 Le type @uint64 290 34.1 Constructeurs . . . 290

34.1.1 Constructeurmax . . . 290

34.1.2 Constructeuruint64BaseValueWithCompressedBitString. . 290

34.1.3 Constructeuruint64MaskWithCompressedBitString . . . 291

34.1.4 Constructeuruint64WithBitString . . . 291

34.2 Getters . . . 292

34.2.1 Getterbigint . . . 292

34.2.2 Getterdouble . . . 292

34.2.3 GetterhexString. . . 292

34.2.4 Gettersint . . . 292

34.2.5 Gettersint64 . . . 293

34.2.6 Getterstring . . . 293

34.2.7 Getteruint . . . 293

34.2.8 GetteruintSlice. . . 293

34.2.9 GetterxString . . . 294

34.3 Arithmétique . . . 294

34.3.1 Opérateurs infixés . . . 294

34.3.2 Opérateur préfixé. . . 294

34.3.3 Instructions . . . 295

34.4 Shift Operators . . . 295

34.5 Logical Operators . . . 296

34.6 Comparison Operators . . . 296

35 Le type list 297

(19)

TABLE DES MATIÈRES 19

35.1 List Type Declaration . . . 297

35.2 Constructors . . . 297

35.2.1 TheemptyList constructor . . . 297

35.2.2 ThelistWithValue constructor . . . 297

35.3 Adding elements . . . 298

35.3.1 The+= operator. . . 298

35.3.2 L’instruction+= . . . 298

35.3.3 TheprependValue setter . . . 298

35.3.4 SetterinsertAtIndex . . . 299

35.3.5 The concatenation operator . . . 299

35.4 Removing elements . . . 299

35.4.1 SetterpopFirst . . . 299

35.4.2 SetterpopLast . . . 300

35.5 Methods . . . 300

35.5.1 Thefirst method . . . 300

35.5.2 Thelast method . . . 300

35.6 Getters . . . 301

35.6.1 Le getterlength . . . 301

35.6.2 Le getterrange . . . 301

35.6.3 Le gettersubListFromIndex . . . 301

35.6.4 Le gettersubListToIndex. . . 301

35.6.5 Le gettersubListWithRange . . . 302

35.7 Enumerating a list with a forinstruction . . . 302

35.7.1 Enumeration using the implicitly declared constants . . . 302

35.7.2 Enumeration using the explicitly declared constants . . . 303

35.7.3 Enumeration in the reverse order. . . 303

35.8 Direct Access of an element attribute . . . 303

35.8.1 Read Access . . . 303

35.8.2 Write Access. . . 304

35.8.3 Example of read and write accesses . . . 304

35.9 Types liste prédéfinis . . . 305

35.9.1 Le type@2stringlist . . . 305

35.9.2 Le type@2lstringlist . . . 306

35.9.3 Le type@bigintlist. . . 306

35.9.4 Le type@functionlist . . . 306

35.9.5 Le type@lbigintlist . . . 306

35.9.6 Le type@luintlist . . . 307

35.9.7 Le type@lstringlist . . . 307

35.9.8 Le type@objectlist. . . 307

35.9.9 Le type@stringlist. . . 307

35.9.10 Le type@typelist . . . 307

35.9.11 Le type@uintlist . . . 308

35.9.12 Le type@uint64list. . . 308

(20)

36 Le type sortedlist 309

36.1 Déclaration. . . 309

36.2 Constructeurs . . . 310

36.2.1 ConstructeuremptySortedList. . . 310

36.2.2 ConstructeursortedListWithValue . . . 310

36.3 Opérateurs . . . 311

36.3.1 Opérateur{...} . . . 311

36.3.2 L’opérateur+= . . . 312

36.3.3 L’opérateur+= . . . 312

36.3.4 L’opérateur. . . 312

36.4 Getterlength . . . 313

36.5 Setters . . . 313

36.5.1 SetterpopGreatest . . . 313

36.5.2 SetterpopSmallest . . . 313

36.6 Méthodes. . . 314

36.6.1 La méthodegreatest . . . 314

36.6.2 La méthodesmallest . . . 314

36.7 Énumération avec l’instruction for . . . 314

37 Le type array 316 37.1 Déclaration d’un type tableau . . . 316

37.2 Constructeur d’un type tableau . . . 316

37.3 Accès à un élément . . . 317

37.3.1 Le gettervalueAtIndex . . . 317

37.3.2 SettersetValueAtIndex . . . 317

37.3.3 SetterforceValueAtIndex . . . 318

37.4 Validité d’un élément . . . 318

37.4.1 Le getterisValueValidAtIndex . . . 318

37.4.2 SetterinvalidateValueAtIndex. . . 319

37.5 Contrôle des tailles des axes. . . 319

37.5.1 Le getteraxisCount . . . 319

37.5.2 Le gettersizeForAxis. . . 319

37.5.3 Le getterrangeForAxis . . . 320

37.5.4 SettersetSizeForAxis . . . 320

37.5.5 SettersetSize . . . 320

37.6 Comparaison. . . 321

38 Le type class 322 38.1 Déclaration d’une classe . . . 322

38.2 Le constructeurnew. . . 323

38.3 Lecture d’un attribut . . . 323

38.4 Écriture d’un attribut . . . 323

38.5 Conversions entre objets de classes différentes . . . 324

(21)

TABLE DES MATIÈRES 21

38.5.1 Affectation polymorphique. . . 324

39 Le type enum 326 39.1 Déclaration. . . 326

39.2 Instanciation . . . 326

39.3 Comparaison. . . 327

39.4 Tester une valeur . . . 327

39.5 L’instructionswitch . . . 327

39.6 Valeurs associées . . . 328

40 Le type graph 331 40.1 ConstructeuremptyGraph . . . 332

40.2 Construire un graphe . . . 332

40.2.1 Setter d’insertion . . . 332

40.2.2 Entrer un arc : setteraddEdge . . . 333

40.2.3 setternoteNode. . . 334

40.3 Enlever des arcs. . . 334

40.3.1 SetterremoveEdgesToNode . . . 334

40.3.2 SetterremoveEdgesToDominators . . . 334

40.4 Getters . . . 335

40.4.1 Getteredges . . . 335

40.4.2 Gettergraphviz . . . 335

40.4.3 GetterisNodeDefined . . . 335

40.4.4 GetterkeyList . . . 335

40.4.5 GetterlkeyList . . . 335

40.4.6 GetterlocationForKey . . . 336

40.4.7 GetterreversedGraph . . . 336

40.4.8 GettersubgraphFromNodes . . . 336

40.4.9 GetteraccessibleNodesFrom. . . 336

40.4.10 GetterundefinedNodeCount . . . 337

40.4.11 GetterundefinedNodeKeyList. . . 337

40.4.12 GetterundefinedNodeReferenceList . . . 337

40.5 Méthodes. . . 337

40.5.1 MéthodedepthFirstTopologicalSort . . . 337

40.5.2 Méthodecircularities . . . 338

40.5.3 MéthodenodesWithNoPredecessor . . . 338

40.5.4 MéthodenodesWithNoSucccessor . . . 339

40.5.5 MéthodetopologicalSort . . . 339

41 Le type map 341 41.1 Déclaration. . . 341

41.2 Constructeurs . . . 342

41.2.1 ConstructeuremptyMap . . . 342

41.2.2 ConstructeurmapWithMapToOverride . . . 342

(22)

41.3 Setters d’insertion . . . 342 41.4 Méthodes de recherche. . . 343 41.5 Setters de retrait . . . 344 41.6 Getters . . . 344 41.6.1 Gettercount . . . 344 41.6.2 GetterhasKey . . . 345 41.6.3 GetterkeyList . . . 345 41.6.4 GetterkeySet . . . 345 41.6.5 GetterlocationForKey . . . 345 41.6.6 GetteroverriddenMap . . . 345 41.7 Énumération . . . 346

42 Le type structure 347

42.1 Types structure prédéfinis . . . 347 42.1.1 Le type@lbool . . . 347 42.1.2 Le type@lbigint . . . 347 42.1.3 Le type@lchar . . . 348 42.1.4 Le type@ldouble . . . 348 42.1.5 Le type@lsint . . . 348 42.1.6 Le type@lsint64 . . . 348 42.1.7 Le type@lstring . . . 348 42.1.8 Le type@luint . . . 349 42.1.9 Le type@luint64 . . . 349 42.1.10 Le type@range . . . 349 42.2 Constructeurs . . . 351 42.2.1 Constructeurnew . . . 351 42.2.2 Constructeurdefault . . . 351 42.3 Accès aux champs . . . 351 42.4 Getters . . . 352

43 Le type extern 353

43.1 Type externe minimum. . . 353 43.1.1 Déclaration en GALGAS . . . 353 43.1.2 Implémentation en C++ . . . 354 43.2 Constructeur . . . 354 43.3 Setter. . . 354 43.4 Méthode . . . 354 43.5 Getter . . . 354 43.6 Méthode de classe . . . 354

44 Compléter le système de types 355

44.1 Ajouter une méthode , ungetter, unsetterou un constructeur à un type prédéfini . . . 355 44.1.1 Ajouter la méthode dans GALGAS . . . 355

(23)

TABLE DES MATIÈRES 23 44.1.2 Reconstruire le fichier d’en-tête des types prédéfinis . . . 357 44.1.3 Implémenter la méthode en C++. . . 357 44.1.4 Finaliser le nouveau compilateur GALGAS . . . 358

IV Sous-programmes 359

45 Sous-programmes 360

45.1 Arguments formels et paramètres effectifs . . . 360 45.1.1 Argument formel en entrée . . . 361 45.1.2 Argument formel en entrée/sortie . . . 361 45.1.3 Argument formel en sortie. . . 361 45.2 Liste d’arguments formels en entrée, en sortie, ou en entrée/sortie . . 362 45.3 Liste de paramètres effectifs en entrée. . . 362 45.4 Sélecteur . . . 362

46 Fonctions et procédures 364

46.1 Fonction . . . 364 46.1.1 déclaration d’une fonction . . . 364 46.1.2 Fonction interne à un fichier. . . 365 46.1.3 Attribut%once. . . 365 46.1.4 Attribut%usefull. . . 365 46.2 Procédure . . . 366 46.2.1 Déclaration d’une procédure . . . 366 46.2.2 Procédure interne à un fichier. . . 366

47 Extensions 367

47.1 Category getter . . . 368 47.2 Category method . . . 369 47.3 Category setter . . . 370 47.4 Categories and classes . . . 372

V Filewrappers et templates 375

48 Filewrappers 376

48.1 Déclararation d’unfilewrapper . . . 376

VI Instructions et expressions 378

49 Contrôle de l’accès aux objets 379

49.1 Constante locale. . . 380 49.2 Variable locale . . . 380 49.3 Paramètre formel constant en entrée. . . 380 49.4 Paramètre formel variable en entrée . . . 380

(24)

49.5 Paramètre formel en entrée / sortie . . . 380 49.6 Paramètre formel en sortie . . . 380

50 Expressions 383

50.1 Opérandes . . . 383 50.1.1 Identificateur . . . 383 50.1.2 self . . . 383 50.1.3 Expression de conversion polymorphique inverse . . . 383 50.1.4 Test du type dynamique d’une expression. . . 384 50.1.5 Parenthèses . . . 385 50.1.6 true etfalse . . . 385 50.1.7 Constante chaîne de caractères. . . 385 50.1.8 Constante caractère . . . 385 50.1.9 Constante entière. . . 385 50.1.10 Constante flottante . . . 385 50.1.11 Expression if . . . 385 50.1.12 Appel de fonction . . . 385 50.1.13 Appel de getter . . . 385 50.1.14 Constructeur . . . 385 50.1.15 Constructeur par défaut . . . 386 50.1.16 Valeur d’une option. . . 388 50.2 Opérateurs . . . 389 50.2.1 Priorité des opérateurs. . . 389 50.2.2 Logique . . . 390 50.2.3 Logique, évaluation en court-circuit . . . 390 50.2.4 Complémentation bit-à-bit. . . 390 50.2.5 Comparaison . . . 390 50.2.6 Décalage. . . 390 50.2.7 Arithmétique . . . 391 50.2.8 Accès à un champ d’une structure . . . 391

51 Instructions sémantiques 392

51.1 Rôle du point-virgule «;» . . . 392 51.2 Instruction de déclaration de variable . . . 392 51.2.1 Déclaration «var @type variable» . . . 393 51.2.2 Déclaration «var @type variable = expression» . . . 393 51.3 Instruction de déclaration de constante . . . 394 51.4 L’instruction d’affectation . . . 395 51.5 L’instructioncast . . . 396 51.6 L’instruction d’ajout+= d’un élément à une collection . . . 397 51.6.1 Instruction d’ajout et le type@stringset . . . 397 51.6.2 Instruction d’ajout et les listes . . . 398 51.6.3 Instruction d’ajout et les listes triées. . . 398

(25)

TABLE DES MATIÈRES 25 51.6.4 Instruction d’ajout et les tables . . . 399 51.7 Affectation combinée à une opération :+=, -=, *=et/= . . . 399 51.7.1 Instruction+= et le type@string. . . 400 51.8 Décrémentation-- et&-- . . . 400 51.9 L’instructiondrop . . . 401 51.10 L’instructionerror . . . 401 51.10.1 Liste de variables détruites . . . 402 51.10.2 Clausefixit . . . 403 51.11 L’appel de procédure . . . 408 51.12 L’instructionfor. . . 408 51.12.1 Les quatre formes d’une énumération . . . 409 51.12.2 Types énumérables et ordre d’énumération . . . 410 51.12.3 Énumération «() in expression ». . . 410 51.12.4 Énumération «() prefix in expression» . . . 411 51.12.5 Énumération «cst in expression » . . . 412 51.12.6 Énumération «(cst1 cst2 ...) in expression». . . 414 51.12.7 Organigramme d’exécution . . . 416 51.12.8 Champs optionnels . . . 416 51.12.9 Modification de la collection . . . 418 51.13 Incrémentation ++et&++ . . . 418 51.14 L’instructionif . . . 419 51.15 L’instructiongrammar . . . 421 51.15.1 Texte source dans un fichier . . . 421 51.15.2 Texte source dans une chaîne de caractères . . . 422 51.16 L’instructionlog. . . 423 51.17 L’instructionloop . . . 424 51.18 L’instruction d’appel de procédure . . . 424 51.19 L’instruction d’appel de méthode . . . 425 51.20 L’instruction d’appel de procédure de classe. . . 426 51.21 L’instruction d’appel desetter . . . 427 51.21.1 Appel simple . . . 427 51.21.2 Appel avec conversion de type . . . 427 51.22 L’instructionswitch . . . 428 51.23 L’instructionwarning . . . 431 51.24 L’instructionwith . . . 431 51.24.1 Accès en lecture tolérant l’échec de la recherche . . . 432 51.24.2 Accès en lecture, signalement d’erreur si échec de la recherche434 51.24.3 Accès en lecture/écriture tolérant l’échec de la recherche . . . 435 51.24.4 Accès en lecture/écriture, signalement d’erreur si échec de la

recherche . . . 436

52 Instructions syntaxiques 439

52.1 Instruction d’appel de terminal . . . 439

(26)

52.2 Instruction d’appel de non terminal. . . 440 52.3 Instructionselect . . . 440 52.4 Instructionrepeat . . . 440 52.5 Instructionparse . . . 441 52.6 Instructionsend. . . 441

VII Grammaires 442

53 Grammaire du projet GALGAS 444

53.1 Non terminal project_component_start_symbol. . . 444 53.2 Non terminal project_header . . . 444

54 Grammaire des sources GALGAS 445

54.1 Non terminal actual_input_parameter_list . . . 446 54.2 Non terminal actual_parameter_list . . . 446 54.3 Non terminal branchOfParseWhithInstruction . . . 446 54.4 Non terminal cast_else_or_default . . . 447 54.5 Non terminal cast_instruction_branch . . . 447 54.6 Non terminal casted_expression . . . 447 54.7 Non terminal collection_value_element . . . 447 54.8 Non terminal declaration . . . 448 54.9 Non terminal declaration_with_private . . . 451 54.10 Non terminalexpression . . . 452 54.11 Non terminalextern_function_declaration . . . 452 54.12 Non terminalextern_routine_declaration . . . 452 54.13 Non terminalexterntype_constructor. . . 452 54.14 Non terminalexterntype_cpp_classdeclaration . . . 452 54.15 Non terminalexterntype_cpp_predeclaration . . . 453 54.16 Non terminalexterntype_getter. . . 453 54.17 Non terminalexterntype_method . . . 453 54.18 Non terminalexterntype_setter . . . 453 54.19 Non terminalfactor . . . 453 54.20 Non terminalfilewrapper_binary_files . . . 454 54.21 Non terminalfilewrapper_templates . . . 454 54.22 Non terminalfilewrapper_text_files. . . 454 54.23 Non terminalfor_instruction_element . . . 454 54.24 Non terminalfor_instruction_enumerated_object . . . 455 54.25 Non terminalformal_input_parameter_list . . . 455 54.26 Non terminalformal_parameter_list . . . 455 54.27 Non terminalgrammar_instruction_core . . . 456 54.28 Non terminalgrammar_start_symbol_label . . . 456 54.29 Non terminalgui_attributes . . . 456 54.30 Non terminalgui_with_lexique_declaration . . . 456

(27)

TABLE DES MATIÈRES 27 54.31 Non terminalgui_with_option_declaration . . . 457 54.32 Non terminalif_instruction_core . . . 457 54.33 Non terminalinsert_or_replace_declaration . . . 457 54.34 Non terminalissue_fixit . . . 457 54.35 Non terminallabel_formal_parameter . . . 457 54.36 Non terminallexical_attribute_declaration. . . 458 54.37 Non terminallexical_explicit_rule . . . 458 54.38 Non terminallexical_expression. . . 458 54.39 Non terminallexical_factor . . . 458 54.40 Non terminallexical_implicit_rule. . . 459 54.41 Non terminallexical_indexing_declaration . . . 459 54.42 Non terminallexical_instruction. . . 459 54.43 Non terminallexical_list_declaration . . . 460 54.44 Non terminallexical_list_entry . . . 460 54.45 Non terminallexical_message_declaration. . . 460 54.46 Non terminallexical_output_effective_argument . . . 460 54.47 Non terminallexical_send_instruction . . . 461 54.48 Non terminallexical_term . . . 461 54.49 Non terminalmap_insert_setter_declaration . . . 461 54.50 Non terminalmatch_entry . . . 461 54.51 Non terminalmatch_instruction_branch . . . 461 54.52 Non terminalnon_empty_output_expression_list . . . 462 54.53 Non terminalnonterminal_declaration . . . 462 54.54 Non terminaloption_declaration . . . 462 54.55 Non terminaloptional_type . . . 462 54.56 Non terminaloutput_expression_list . . . 462 54.57 Non terminalprimary. . . 462 54.58 Non terminalproperty_declaration . . . 464 54.59 Non terminalrelation_factor . . . 464 54.60 Non terminalrelation_term . . . 465 54.61 Non terminalremove_declaration. . . 465 54.62 Non terminalrepeat_while_branch . . . 465 54.63 Non terminalsearch_declaration . . . 465 54.64 Non terminalsemantic_instruction . . . 465 54.65 Non terminalsemantic_instruction_list. . . 468 54.66 Non terminalsharedmap_attribute . . . 468 54.67 Non terminalsharedmap_override . . . 469 54.68 Non terminalsharedmap_search_method_declaration . . . 469 54.69 Non terminalsharedmap_state_list. . . 469 54.70 Non terminalsharedmap_state_transition . . . 469 54.71 Non terminalsimple_expression . . . 470 54.72 Non terminalsortedlist_sort_descriptor . . . 470 54.73 Non terminalstart_symbol. . . 470

(28)

54.74 Non terminalstyle_declaration . . . 470 54.75 Non terminalswitch_case . . . 471 54.76 Non terminalsyntax_directed_translation_result . . . 471 54.77 Non terminalsyntax_instruction . . . 471 54.78 Non terminalsyntax_instruction_list . . . 472 54.79 Non terminalsyntax_rule_declaration . . . 472 54.80 Non terminalsyntax_rule_label . . . 472 54.81 Non terminaltemplate_delimitor . . . 472 54.82 Non terminaltemplate_replacement . . . 473 54.83 Non terminalterm . . . 473 54.84 Non terminalterminal_declaration . . . 473 54.85 Non terminalterminal_instruction_indexing . . . 473 54.86 Non terminalwith_instruction_core. . . 474

55 Grammaire des fichiers de template 475

55.1 Non terminal expression . . . 475 55.2 Non terminal factor . . . 475 55.3 Non terminal output_expression_list . . . 476 55.4 Non terminal primary. . . 476 55.5 Non terminal relation_factor . . . 477 55.6 Non terminal relation_term . . . 477 55.7 Non terminal simple_expression . . . 478 55.8 Non terminal template_instruction . . . 478 55.9 Non terminal template_parser_start_symbol . . . 479 55.10 Non terminalterm . . . 479

VIII Index 480

Index 481

(29)

Liste des tableaux

1.1 Carré, étoile et pentagone en LOGO . . . 35 1.2 Hexagone et octogone en LOGO . . . 36 1.3 Programmes LOGO contenant des erreurs sémantiques . . . 37 1.4 Contenu du répertoirelogo/galgas-sources. . . 41 1.5 Contenu des sous-répertoires delogoaprès compilation GALGAS . . . 42 1.6 Spécification de l’analyse de la grammaire . . . 48 1.7 Arguments formels, paramètres effectifs en C et en GALGAS . . . 51 1.8 Sens de transmission d’un argument formel . . . 51 1.9 Sens de transmission d’un paramètre effectif . . . 52 3.1 Mots réservés du langage GALGAS . . . 71 3.2 Délimiteurs du langage GALGAS . . . 72 3.3 Sélecteurs du langage GALGAS . . . 72 3.4 Suffixes et types des constantes littérales entières . . . 74 3.5 Séquence d’échappement des constantes littérales caractère . . . 74 3.6 Séquence d’échappement des constantes littérales chaîne de caractères . . 75 6.1 Échappement et substitution des caractères pour formattage LATEX. . . 87 9.1 Options du projet GALGAS indiquant la version Mac OS . . . 110 9.2 Fichiers et répertoires relatifs au projet Xcode . . . 111 29.1 Codage des caractères, getterHTMLRepresentation du type@string . . . 259 44.1 Fichier GALGAS à éditer pour compléter un type prédéfini. . . 356 45.1 Constructions d’appel de sous programme . . . 361 45.2 Argument formel en entrée, paramètre effectif en sortie . . . 361 45.3 Argument formel en entrée/sortie, paramètre effectif en sortie/entrée . . . 362 45.4 Argument formel en sortie, paramètre effectif en entrée . . . 362 50.1 Constructeur par défaut pour chaque type . . . 388 50.2 Informations relatives à une option de la ligne de commande . . . 389 50.3 Priorité des opérateurs . . . 390 51.1 Les quatre formes d’énumération de l’instructionfor . . . 409

(30)

51.2 Types énumérables par l’instructionfor . . . 410 51.3 Constantes implicitement déclarées par «() in expression» . . . 410 51.4 Type de la constante dans «cst in expression». . . 413 51.5 Constantes à déclarer pour «(cst1 cst2 ...) in expression» . . . 415

(31)

Table des figures

1.1 Répertoirelogo après compilation GALGAS . . . 41 9.1 Indexation et références croisées dans l’application CocoaGalgas . . . 112 9.2 Exemple d’indexation en LOGO . . . 116 47.1 inheritance graph and categories . . . 374 49.1 Automate des états d’une constante locale . . . 380 49.2 Automate des états d’une variable locale . . . 380 49.3 Automate des états d’un paramètre formel constant en entrée . . . 381 49.4 Automate des états d’un paramètre formel variable en entrée . . . 381 49.5 Automate des états d’un paramètre formel en entrée / sortie. . . 381 49.6 Automate des états d’un paramètre formel en sortie . . . 382 51.1 Organigramme d’exécution d’une instructionfor. . . 417 51.2 Organigramme d’exécution d’une instructionloop . . . 425

(32)

Utilisation

(33)

Chapitre 1

Tutorial : le langage LOGO

Le but de ce tutorial est de construire en utilisant GALGAS un compilateur d’un langage inspiré de LOGO, qui fournit en sortie un fichier SVG1 contenant les tracés définis par un programme source LOGO. La génération des fichiers SVG à partir de GALGAS sera faite par un template.

Il est rédigé pour être réalisé sur Unix (Linux, Mac OS X).

1.1 Description rapide de GALGAS

GALGAS est un générateur de compilateur. Vous allez donc écrire l’analyseur lexical du langage LOGO, son analyseur syntaxique, sa sémantique statique, et sa sémantique dynamique (la génération de code). Ces descriptions sont contenues dans des fichiers texte encodés obligatoirement en UTF-82. Il y a deux types de fichiers source GALGAS :

• le fichierprojet, d’extension .galgasProject ;

• les fichiers contenant les descriptions des analyseurs lexicaux, syntaxiques, sé- mantiques, d’extension .galgas.

Le fichier projet est unique dans un projet et référence tous les fichiers d’extension .galgas. Aussi la compilation GALGAS s’effectue en compilant le fichier projet. Cette compilation engendre des fichiers C++, et il faut effectuer une compilation C++ pour obtenir un binaire exécutable.

les descriptions des analyseurs lexicaux, syntaxiques, sémantiques sont disposés dans des fichiers d’extension .galgas de manière quelconque, c’est-à-dire que l’ordre des

1. Vous trouverez des informations sur le format SVG sur la page :http://www.canarlake.org/index.

cgi?theme=svg.

2. Vous pourrez ainsi utiliser des caractères accentués ou des lettres grecques, cyrilliques, ... dans vos identificateurs.

(34)

descriptions et leur répartition dans les différents fichiers sont indifférentes : par exemple, la déclaration d’un classe et de ses héritières peuvent être dans un même fichier (et dans un ordre quelconque), ou dans des fichiers différents.

Pour simplifier la mise en œuvre du développement, l’option --create-project du compilateur GALGAS permet de créer une arborescence de fichiers contenant un projet GALGAS prêt à être compilé. Ce projet contient aussi des scripts Python permet de lancer facilement la compilation C++.

Ce tutorial est organisé comme suit :

• lasection 1.2 page 34présente de manière informelle le langage LOGO ;

• lasection 1.3 page 38vous guide pour installer GALGAS sur votre ordinateur ;

• la section 1.4 page 39 décrit comment utiliser l’option --create-project pour créer le projet GALGAS, et le compiler et l’exécuter ;

• lasection 1.5 page 42vous explique comment coder l’analyseur lexical du langage LOGO ;

• lasection 1.6 page 47pour coder l’analyseur syntaxique du langage LOGO ;

• lasection 1.7 page 50pour coder la sémantique statique du langage LOGO ;

• lasection 1.8 page 55pour coder la sémantique statique du langage LOGO ;

• et pour finir, la section 1.9 page 59pour coder la génération de code en obtenant un compilateur qui engendre un fichier SVG.

À l’issue de ce tutorial, vous aurez un compilateur complet du langage LOGO qui effectue des vérifications sémantiques et qui engendre un fichier SVG pour chaque source LOGO qui lui est soumis.

1.2 Présentation du langage LOGO

Vous trouverez une description précise du langage à la fin de cette section. Un pro- gramme LOGO décrit le déplacement d’une tortue dans un plan. Celle-ci peut effectuer des déplacements en ligne droite et des rotations sur place. La tortue est munie d’un crayon, qui peut être abaissé ou levé. Un déplacement provoque le tracé d’un segment de droite si le crayon est abaissé.

Un programme LOGO est contenu dans un fichier texte, d’extension .logo. Il com- prend une liste (éventuellement vide) de sous-programmes, et une liste d’instructions.

L’exécution du programme consiste à exécuter cette liste d’instructions, en appelant les sous-programmes qui y figurent. Initialement, la tortue est en (0, 0), sa direction est 0° (horizontale, vers la droite), et le crayon est levé.

(35)

1.2. PRÉSENTATION DU LANGAGE LOGO 35 Dessin d’un carré Dessin d’une étoile Dessin d’un pentagone

PROGRAM PROGRAM PROGRAM

ROUTINE trace ROUTINE trace ROUTINE trace

BEGIN BEGIN BEGIN

FORWARD 50 ; FORWARD 70 ; FORWARD 70 ; ROTATE 90 ; ROTATE 160 ; ROTATE 72 ;

END END END

BEGIN ROUTINE trace3 BEGIN

FORWARD 100 ; BEGIN FORWARD 200 ;

ROTATE 90 ; CALL trace ; ROTATE 90 ; FORWARD 100 ; CALL trace ; FORWARD 300 ; ROTATE 270 ; CALL trace ; ROTATE 270 ;

PEN DOWN ; END PEN DOWN ;

CALL trace ; BEGIN CALL trace ;

CALL trace ; FORWARD 200 ; CALL trace ; CALL trace ; ROTATE 90 ; CALL trace ; CALL trace ; FORWARD 300 ; END.

END. ROTATE 270 ;

PEN DOWN ; CALL trace3 ; CALL trace3 ; CALL trace3 ; END.

Tableau 1.1:Carré, étoile et pentagone en LOGO

1.2.1 Quelques exemples

Voici quelques exemples de programmes LOGO (tableau 1.1 et tableau 1.2 page 36).

Le tableau 1.3 page 37liste des programmes présentant des erreurs sémantiques : le compilateur qui va être écrit décèlera ces erreurs.

1.2.2 Définition lexicale

Les identificateurs sont constitués d’une séquence non vide de lettres minuscules ou majuscules. La casse est significative.

Les mots réservés sont les identificateurs suivants : PROGRAM, ROUTINE, BEGIN, END, FORWARD, ROTATE, PEN, UP, DOWN et CALL.

Les constantes littérales entières sont écrites en décimal (une séquence non vide de chiffres décimaux).

Les séparateurs sont tous les caractères compris entre le point de code Unicode '\u0001' et l’espace (point de code '\u0020'), ce qui inclut la tabulation horizontale et les dif- férentes formes de la fin de ligne.

Les délimiteurs sont le point (« . ») et le point virgule (« ; »).

Un commentaire commence par le caractère dièse « # ») et s’étend jusqu’à la fin de la ligne courante.

(36)

Dessin d’un hexagone Dessin d’un octogone

PROGRAM PROGRAM

ROUTINE trace ROUTINE trace

BEGIN BEGIN

FORWARD 70 ; FORWARD 70 ; ROTATE 60 ; ROTATE 45 ;

END END

BEGIN ROUTINE trace1

FORWARD 100 ; BEGIN

ROTATE 90 ; CALL trace ; FORWARD 100 ; CALL trace ;

ROTATE 270 ; END

PEN DOWN ; ROUTINE trace2

CALL trace ; BEGIN

CALL trace ; CALL trace1 ; CALL trace ; CALL trace1 ;

CALL trace ; END

CALL trace ; ROUTINE trace3

CALL trace ; BEGIN

END. CALL trace2 ;

CALL trace2 ; END

BEGIN

FORWARD 100 ; ROTATE 90 ; FORWARD 100 ; ROTATE 270 ; PEN DOWN ; CALL trace3 ; END.

Tableau 1.2: Hexagone et octogone en LOGO

1.2.3 Définition syntaxique

Un programme LOGO commence le mot réservé PROGRAM, est suivi d’une liste éventuel- lement vide de définition de routines, du mot réservé BEGIN, d’une liste éventuellement vide d’instructions, et se termine par le mot réservé END suivi d’un point.

Une définition de routine est introduite par le mot réservé ROUTINE, est suivi d’un identificateur, du mot réservé BEGIN, d’une liste éventuellement vide d’instructions, et se termine par le mot réservé END.

Une instruction LOGO est une des séquences suivantes :

• le mot réservé FORWARD suivi d’un entier littéral et d’un point virgule ;

• le mot réservé ROTATE suivi d’un entier littéral et d’un point virgule ;

• le mot réservé PEN suivi du mot réservé UP et d’un point virgule ;

• le mot réservé PEN suivi du mot réservé DOWN et d’un point virgule ;

• le mot réservé CALL suivi d’un identificateur et d’un point virgule.

(37)

1.2. PRÉSENTATION DU LANGAGE LOGO 37 Routine récursive Routine indéfinie Routine définie plusieurs fois

PROGRAM PROGRAM PROGRAM

ROUTINE routine BEGIN ROUTINE routine

BEGIN CALL routine ; BEGIN

CALL routine ; END. END

END ROUTINE routine

BEGIN BEGIN

END. END

BEGIN END.

Tableau 1.3:Programmes LOGO contenant des erreurs sémantiques

1.2.4 Sémantique statique

Dans une définition de routine, l’identificateur qui suit le mot réservé ROUTINE est le nom de la routine définie. Dans une instruction CALL, l’identificateur est le nom de la routine appelée.

Contraintes (voir le tableau 1.3 pour des exemples de programmes contenant des er- reurs sémantiques) :

• le nom d’une routine est unique (on n’a pas le droit de définir plusieurs routines de même nom) ;

• une instruction CALL ne peut nommer qu’une routine qui a été définie plus haut dans le texte ;

• la routine courante ne peut pas être appelée récursivement.

1.2.5 Sémantique dynamique

L’espace de déplacement de la tortue est un plan, muni du repère orthonormé direct habituel. À un instant donné, l’état de la tortue est caractérisé par :

• sa position dans le plan ;

• sa direction, mesuré en degrés à partir de l’axe horizontal, et dans le sens trigo- nométrique ;

• la position du crayon (levé ou abaissé).

Initialement, la position de la tortue est (0, 0), sa direction est 0°, et le crayon est levé.

L’exécution de chaque instruction a l’effet suivant :

• l’instruction FORWARD avance la souris dans sa direction d’une longueur égale à la valeur de la constante entière contenue dans l’instruction ; si le crayon est abaissé,

(38)

un segment de droite délimité par les positions de départ et d’arrivée de la tortue est tracé ;

• l’instruction ROTATE fait tourner la tortue dans le sens trigonométrique d’un nombre de degrés égal à la constante contenue dans l’instruction ; aucun tracé n’a lieu, quelque l’état du crayon.

• l’instruction PEN UP relève le crayon ;

• l’instruction PEN DOWN abaisse le crayon ;

• l’instruction CALL exécute le sous-programme nommé dans l’instruction.

1.3 Installation de GALGAS

Aller sur la pagehttp://galgas.rts-software.org/download/.

GALGAS est un utilitaire en ligne de commande (sauf sur Mac, pour lequel une application Cocoa est disponible). Vous pouvez :

• soit télécharger le binaire correspondant à votre plateforme (pour l’installer, aller à la section 1.3.2 page 39) ;

• soit télécharger les sources et les recompiler.

1.3.1 Téléchargement des sources et compilation

Télécharger l’archive contenant les sources pour Unix et Mac.

Décompressez cette archive et placer le répertoire obtenu (galgas) dans un répertoire dont le chemin ne contient ni espace ni caractère accentué. C’est important car les chemins utilisés dans les makefile de GALGAS sont relatifs.

Dans la suite de la compilation GALGAS, tous les chemins sont indiqués relativement à ce répertoire, qui sera appelé constructionGALGAS.

Donc, vous devez obtenir à la suite de la décompression le répertoire constructionGALGAS/galgas. Nous allons maintenant compiler GALGAS. Avec le terminal, sur Linux :

cd constructionGALGAS/galgas/makefile-unix make

Sur Mac :

cd constructionGALGAS/galgas/makefile-macosx

(39)

1.4. CRÉATION DU SQUELETTE DU COMPILATEUR LOGO 39 make

La compilation de GALGAS peut prendre une dizaine de minutes. Deux exécutables sont produits :

• constructionGALGAS/galgas/makefile-unix/galgas ;

• constructionGALGAS/galgas/makefile-unix/galgas-debug.

Les deux exécutables sont fonctionnellement identiques. Le premier est celui que vous utiliserez. Le second est la version debug du premier : il est exécuté avec de nom- breuses vérifications internes, ce qui fait qu’il est beaucoup lent. Si le premier plante brutalement, on peut utiliser le second pour déceler si une erreur interne peut être mise en évidence.

La section suivante indique comment installer les binaires obtenus.

1.3.2 Installation

Pour pouvoir appeler les exécutables sans avoir besoin de mentionner un chemin, vous avez plusieurs possibilités :

• le copier dans le répertoire /bin : sudo cp galgas /bin/

• le copier dans votre répertoire local bin : cp galgas ∼/bin/

Attention, le répertoire ∼/bin n’existe peut-être pas pour votre compte : il faut alors le créer, et l’ajouter dans la variable $PATH.

Sur Linux : mkdir ∼/bin/

echo 'export PATH=$PATH:∼/bin' >> /home/user/.bashrc

Sur Mac :

mkdir ∼/bin/

echo 'export PATH=$PATH:∼/bin' >> ∼/.bash_profile

1.4 Création du squelette du compilateur LOGO

Un projet GALGAS nécessite la mise en place de nombreux fichiers, de créer des makefile pour différentes plateformes, …

(40)

Appeler galgas avec l’option --create-project permet de créer automatique un projet prêt à être utilisé.

Pour tout le tutorial vous devez utiliser un répertoire dont le chemin ne contient ni espace ni caractère accentué. C’est important car les chemins utilisés dans les makefile de GALGAS sont relatifs.

Dans toute la suite de ce tutorial, les chemins sont indiqués relativement à ce répertoire, qui sera appelé chezmoi.

La création :

cd chezmoi

galgas --create-project=logo

Le message affiché par cette opération est :

*** PERFORM PROJECT CREATION (--create-project=logo option) ***

*** DONE ***

L’affichage de DONE indique que la création s’est effectuée avec succès : un répertoire nommé logo a été créé dans le répertoire chezmoi.

1.4.1 Visite guidée du répertoire créé

Dans le répertoire chezmoi/logo :

• le fichier +logo.galgasProject est le fichier projet, c’est lui que vous compilerez

;

• le répertoire galgas-sources contient les fichiers sources que vous allez complé- ter tout au long de ce tutorial ; son contenu est indiqué dans letableau 1.4.

1.4.2 Première compilation du projet

Une compilation s’effectue en deux temps :

1. d’abord une compilation GALGAS qui crée ou met à jour des fichiers C++ ; 2. ensuite une compilation C++.

(41)

1.4. CRÉATION DU SQUELETTE DU COMPILATEUR LOGO 41

Fichier Description

logo-lexique.galgas Définit l’analyseur lexical

logo-semantics.galgas Définit les types pour la sémantique

logo-syntax.galgas Définit les règles de production de la grammaire logo-grammar.galgas Définit la grammaire (axiome, classe)

logo-program.galgas Définit la routine principale

logo-cocoa.galgas Définit l’interface pour Cocoa : utile uniquement sous Mac logo-options.galgas Définit les options de la ligne de commande

Tableau 1.4:Contenu du répertoirelogo/galgas-sources

Figure 1.1:Répertoirelogo après compilation GALGAS

Compilation GALGAS

Vous devez d’abord compiler les sources GALGAS :

galgas -v chezmoi/logo/+logo.galgasProject

L’option -v (verbose) provoque l’affichage de messages : observez ceux qui indiquent la

création des fichiers C++. Ceux-ci sont rangés dans le répertoire chezmoi/logo/build/output et chezmoi/logo/build/libpm.

Le répertoire logo est complété par de nouveaux répertoires (figure 1.1 et tableau 1.5).

(42)

Répertoire Contenu

makefile-macosx Makefile pour compiler sur Mac OS X makefile-msys32-on-windows Makefile pour compiler sur Win 32 makefile-unix Makefile pour compiler sur Unix

makefile-win32-on-macosx Makefile pour compiler sur Mac OS X pour Win 32

makefile-x86linux32-on-macosx Makefile pour compiler sur Mac OS X pour x86 Linux 32 bits makefile-x86linux64-on-macosx Makefile pour compiler sur Mac OS X pour x86 Linux 64 bits xcode-project Projet Xcode pour compiler sur Mac OS X

Tableau 1.5:Contenu des sous-répertoires delogoaprès compilation GALGAS

Compilation C++

Choisissez le répertoire correspondant à votre plateforme (makefile-macosx ou makefile-unix) et lancer le script de compilation build.py (soit via la ligne de commande, soit en

double-cliquant).

Par exemple :

chezmoi/logo/makefile-unix/build.py Vous obtenez deux exécutables :

chezmoi/logo/makefile-unix/logo

chezmoi/logo/makefile-unix/logo-debug

Sous Mac, vous pouvez utiliser le projet Xcode engendré, et ainsi créer une application Cocoa nommée CocoaLogo.

Dans tous les cas, comme les analyseurs lexicaux et syntaxiques sont vides après la création, les exécutables ainsi obtenus ne sont pas exploitables.

1.5 Analyseur lexical

Dans cette partie, vous allez écrire l’analyseur lexical du langage LOGO. Pour cela, vous allez modifier le fichier chezmoi/logo/galgas-sources/logo-lexique.galgas. Remarques préliminaires :

1. en GALGAS, tous les symboles terminaux sont notés par une chaîne de carac- tères non vide délimitée par deux caractères $ ; par exemple : $identifier$,

$integer$, …

Références

Documents relatifs

In detail, our work aims at defining a modeling framework that integrates the goal-oriented paradigm (specifically Tropos modeling methods [3]) and process modeling (in particular

Forme normale conjonctive (FNC) : Une fonction booléenne peut toujours s’exprimer sous forme d’une conjonction ( and ) de formes disjonctives ( or ). Forme normale disjonctive (FND)

Access time-the time interval between the application of a specified input pulse during a read cycle and the availability of valid data signal at an output Address access

Access time-the time interval belwe!'!n the application of a specified input pulse during a read cycle and the availability of valid data signal at an output Address access

Stocker un petit ensemble dans les bits d’un entier non-signé Le bit i est à 1 ssi l’élément i est dans l’ensemble. → Énumérer les ensembles en énumérant

au sein du Groupe d’étude thérapeutique des affec- tions inflammatoires du tube digestif (GETAID), qui a pour objectif de répondre à ces questions en évaluant le niveau de

A minimum resistor value must be determined which will ensure that current through this resistor and sink current from the TTl loads will not cause the output

Dans un contexte où la connaissance n’est plus médiatisée par les possesseurs du savoir mais où elle dépend de la capacité de chaque chercheur d’analyser et de