GALGAS
Version 3.2.7
Jean-Luc Béchennec
Mikaël Briday
Pierre Molinaro
5 septembre 2016
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
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
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 . . . 1038.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
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
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
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 . . . 15015.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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Utilisation
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.
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é.
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.
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.
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é,
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
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, …
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++.
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).
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$, …