• Aucun résultat trouvé

Projet Xcode et application Cocoa

Vous pouvez demander à GALGAS d’engendrer un projetXcode, qui contiendra :

• le compilateur en version release sous la forme d’un utilitaire en ligne de com-mande ;

• le compilateur en versiondebugsous la forme d’un utilitaire en ligne de commande ;

• une application Cocoa permettant d’appeler les deux utilitaires.

9.1 Paramétrage du projet GALGAS

Pour engendrer un projetXcode, il vous suffit d’ajouter une déclaration telle que %Lion dans votre fichier projet (d’extension .galgasProject, voirchapitre 8 page 102). Par exemple :

project (0:0:1) -> "logo" {

%Lion

%applicationBundleBase : "fr.what"

...

Vous pouvez aussi utiliser l’option --macosx=n (section 2.5 page 67). Attention, cette option ne vous dispense pas de préciser %applicationBundleBase.

Un projet Xcode définit la version de Mac OS pour laquelle il va être compilé : ainsi,

%Lion définit la version Lion (10.7). Le tableau 9.1 liste les différents options pos-sibles. GALGAS fixe la version indiquée dans le projet Xcode, et il faut ensuite que la

Option Version SDK Mac OS Version de Gestion mémoire déploiement

%SnowLeopard SnowLeopard(10.6) 10.6 Garbage Collector

%Lion Lion(10.7) 10.7 ARC

%MountainLion Mountain Lion(10.8) 10.8 ARC

%Mavericks Mavericks(10.9) 10.9 ARC

%Yosemite Yosemite(10.10) 10.10 ARC

%YosemiteElCapitan El Capitan(10.11) 10.10 ARC

%ElCapitan El Capitan(10.11) 10.11 ARC

%Sierra Sierra(10.12) 10.12 ARC

%ElCapitanSierra Sierra(10.12) 10.11 ARC

%LatestMacOS – – –

Tableau 9.1:Options du projet GALGAS indiquant la version Mac OS

version deXcodeutilisée soit compatible avec ce réglage. L’option %LatestMacOS cor-respond au réglage corcor-respondant du projet Xcode engendré. Quand %SnowLeopard est sélectionné, l’application Cocoa engendrée utilise le garbage collector. Sinon, elle adopte l’Automatic Reference Counting (ARC).

Il y a une seconde option à ajouter dans le projet GALGAS : %applicationBundleBase. Celle-ci fixe leBundle Identifier de l’application Cocoa. À la chaîne définie dans l’option (ici "fr.what") est ajouté le nom du projet (défini dans l’en-tête, ici "logo"), précédé par un point : le Bundle Identifier est donc fr.what.logo.

9.2 Projet Xcode engendré

Quand le projet GALGAS est compilé, un répertoire xcode-project directory est créé, et contient :

• le fichier projetXcode;

• un fichier build.command ;

• un fichier Info.plist ;

• un répertoire English.lproj ;

• un répertoire userResources.

Le rôle de chacun est précisé par letableau 9.2. Ne pas modifier ces fichiers et répertoires à la main, une compilation GALGAS supprimerait vos changements. La seule exception est le contenu du répertoire userResources qui n’est pas modifié par les compilations GALGAS.

9.3. DÉFINIR DES ICÔNES POUR VOTRE APPLICATION COCOA 111 Fichier ou répertoire Rôle

build.command Effectue la compilation Xcode, appelable via une commande Shell

Info.plist Informations pour l’application Cocoa English.lproj Informations pour l’application Cocoa

userResources Permet d’associer des icônes aux fichiers sources de votre com-pilateur, ainsi qu’à l’application Cocoa engendrée (voirsection 9.3 page 111)

Tableau 9.2:Fichiers et répertoires relatifs au projet Xcode

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

Vous pouvez définir :

• une icône pour l’application Cocoa ;

• une icône particulière pour chaque type de fichier source.

Le nom de chaque fichier d’icône fixe son rôle :

• pour l’application Cocoa, le fichier d’icône doit s’appeler application_icns.icns ;

• pour chaque type de fichier source, le nom est basé sur l’extension du fichier : si celui-ci est par exemple .logo, le fichier d’icônes doit s’appeler logo_icns.icns. Ces fichiers d’icônes doivent être placés dans le répertoire userResources, et il faut ensuite refaire une compilation GALGAS pour que ces fichiers soient ajoutés au projet Xcode.

En résumé :

1. concevoir les fichiers d’icônes, en fixant leur nom comme indiqué ci-dessus ; 2. placer ces icônes dans le répertoire userResources ;

3. effectuer une compilation GALGAS : celle-ci met à jour le projetXcode, en ajoutant les fichiers d’icônes au target Cocoa ;

4. recompiler letarget Cocoa du projetXcode: les icônes sont prises en compte.

9.4 Indexation des fichiers sources

Vous pouvez configurer votre projet GALGAS pour que l’application Cocoa engendrée établisse une indexation et des références croisées : un cmd-click affiche un menu

Figure 9.1:Indexation et références croisées dans l’application CocoaGalgas

contextuel. Cette indexation est basée sur l’analyse syntaxique. C’est ce qui a été fait pour l’application CocoaGalgas (figure 9.1 page 112). On voit dans le menu contex-tuel trois classes d’index : Class Definition, Class Reference as Superclass et Abstract Category Method Definition ; au dessous, les références croisées corres-pondantes.

Pour configurer votre projet, vous avez à modifier le composant lexique, le composant syntax, le composantgrammar, et la règle d’analyse du fichier source. Les cinq modifica-tions sont présentées successivement ci-après, en prenant comme exemple le langage LOGO (section 1.2 page 34).

9.4.1 En tête du composant lexique

Il faut modifier l’en-tête, en ajoutant la déclaration indexing in : lexique logo_lexique indexing in "INDEXING" {

...

La chaîne "INDEXING" définit le nom du répertoire qui contient les fichiers cache de l’indexation. Ce répertoire est relatif au répertoire qui contient le fichier source.

Note : si vous effectuez maintenant la compilation GALGAS, vous obtiendrez une erreur sur la définition de la grammaire, indiquant qu’elle doit aussi indiquer la prise en compte de l’indexation.

9.4. INDEXATION DES FICHIERS SOURCES 113

9.4.2 En tête du composant grammar

Il suffit de préfixer par indexing l’en-tête du composant grammar : indexing grammar logo_grammar ... {

...

Note : maintenant, la compilation GALGAS s’effectue sans erreur.

9.4.3 Règle d’analyse des fichiers sources

La règle d’analyse des fichiers source doit mentionner dans l’en-tête la grammaire uti-lisée pour l’analyse (pour l’exemple du langage LOGO, c’est le rôle de la troisième ligne

grammar logo_grammar).

case . "logo"

message "a source text file with the .logo extension"

grammar logo_grammar

?sourceFilePath:@lstring inSourceFile { grammar logo_grammar in inSourceFile }

Quand le mode d’exécution (absence de l’option --mode) est le mode par défaut, les instructions de la règle sont exécutées. Ci-dessus, la seule instruction est l’instruction

grammar logo_grammar in inSourceFile (ligne 5).

Quand le mode d’exécution (présence de l’option --mode) n’est pas le mode par défaut, les instructions de la règle ne sont pas exécutées, et les opérations sont guidées par la grammaire indiquée ligne 3. Dans le cas de l’indexation, l’exécution construit l’indexation du fichier source.

9.4.4 Déclaration des classes d’index

La déclaration des classes d’index s’effectue dans l’analyseur lexical. Dans la cadre du langage d’exemple LOGO, on veut simplement indéxer les routines, plus précisément l’endroit de leur définition, et les endroits où elles sont appelées. On définit donc deux classes d’index routineDefinition et routineCall. À chaque déclaration est associée une chaîne de caractères, qui sera le titre affiché dans le menu contextuel.

lexique logo_lexique indexing in "INDEXING" { ...

indexing routineDefinition : "Routine Definition"

...

indexing routineCall : "Routine call"

...

Ces définitions peuvent être placées à tout endroit dans la définition de l’analyseur lexical.

9.4.5 Définition des entrées indexées

L’analyseur syntaxique va être complété de façon à définir les symboles qui seront in-déxés. Plus précisement, c’est l’instruction d’analyse de symbole terminal qui est modi-fiée.

Considérons d’abord la déclaration de routine. La règle de l’analyseur syntaxique qui définit cette analyse est :

rule <routine_definition> {

$ROUTINE$

$identifier$ ?let routineName

$BEGIN$

<instruction_list>

$END$

}

Le nom de la routine est défini par l’instruction $identifier$ ?let routineName : on la modifie alors de façon à signifier que l’indentificateur doit être indéxé comme une définition de routine :

rule <routine_definition> {

$ROUTINE$

$identifier$ ?let routineName indexing routineDefinition

$BEGIN$

<instruction_list>

$END$

}

Maintenant, l’instruction d’appel de routine : rule <instruction> {

select

$CALL$

$identifier$ ?let @lstring routineName

$;$

9.4. INDEXATION DES FICHIERS SOURCES 115 or

...

end }

On modifie de manière analogue l’instruction $identifier$ ?let @lstring routineName : rule <instruction> {

select

$CALL$

$identifier$ ?let @lstring routineName indexing routineCall

$;$

or ...

end }

9.4.6 Compilation et essai

Les modifications sont terminées. Vous pouvez recompiler votre projet (compilation GALGAS puis compilation de la cible Cocoa du projet Xcode). La figure 9.2 montre le résultat obtenu en effectuant un cmd-click sur le nom de la routine.

Figure 9.2:Exemple d’indexation en LOGO

Chapitre 10

Documents relatifs