OVH Cloud OVH Cloud

se fabriquer un font-locking

16 réponses
Avatar
Sébastien Kirche
Bonjour,

j'aimerais me fabriquer un font-locking pour colorier des fichiers de
ressources[1] propres au dev que je fais pour ma boîte.

Quel est la méthode conseillée ? Il faut commencer par dériver un mode
majeur ?


Footnotes:
[1] c'est le langage de description de ressource Apple (fichiers .r),
mais avec des types custom en supplément.

--
Sébastien Kirche

6 réponses

1 2
Avatar
drkm
Sébastien Kirche writes:

- si je passe le test if (baz) qui a pu se retrouver là par inattention
quand les corps de fonction sont assez gros (on a aussi pas mal de
code multiplateforme et d'options en #ifdef), le return permettra de
sortir de la fonction. Cependant si plus tard un autre fonction (ou la
même) provoque une exception, on se retrouve dans la 4ème dimension,
pour reprendre une expression des devs d'ici. Au mieux ça plante, au
pire ça fait autre chose de bizarre, ou rien de visible immédiatement.



C'est bien ce que j'avais compris. Mais le point que je ne
comprend pas, c'est comment tu te retrouves dans la quatrième
dimension.

--drkm
Avatar
drkm
Sébastien Kirche writes:

Le 24 July 2005 à 14:07, drkm a formulé :

S'il s'agit de choisir un outil pour implémenter ce
vérificateur (qui serait par exemple appelé dans une cible check
d'un Makefile), alors pourquoi pas.



C'est tout à fait ça. Un collègue implémenté ce genre de vérification
dans des macros vb dans MS Visual Studio en parsant manuellement le code
avec moult select case, if, recherche de texte, etc.



Ok. Alors, je pense que Semantic pourrait être adapté. Enfin,
sous réserve, car je ne l'ai jamais vraiment employé, mais ça
vaut le coup, ÀMHA, d'y jeter sérieusement un oeil.

C'est un équivalent de Yacc/Bison, qui contient déjà, je pense,
une grammaire C complète, dont on peut hériter (ou que l'on peut
étendre, je ne me souviens plus des termes des mécanismes
d'extension de grammaires Wisent).

J'ai commencé à regarder les grammaires wisent pour voir comment ça
s'utilisait. Je vois comment ça se compile pour générer le parseur, mais
il faut que je voie comment le parseur est utilisé ensuite pour analyser
le code par les modules supérieurs (exemple : pour rechercher une
définition ou faire des stats).



Il y a plusieurs fichiers Infos dans Semantic. L'un d'eux
s'appelle 'app-dev-guide' ou quelque chose comme ça. C'est le
guide du développeur d'application se basant sur Semantic. Ce
que tu cherches, je pense.

[...]

exemple bidon sur 2 tables :
SERVICE (0x10; 'Services')

[...]

VEHICULE (0x10; 'Véhicules')

[...]

Partant de ça j'obtiens automagiquement 2 blocs

+---------+ +----------+
| SERVICE |---| VEHICULE |
+---------+ +----------+

+---------+ +----------+

Car le parser aura "vu" que VEHICULE référence un champ de SERVICE.



Je ne vois pas vraiment comment il voit que VEHICULE référence
un champ de SERVICE. Éventuellement, il peut détecter que deux
champs ont le même nom et le même type (et que l'un a une
contrainte d'unicité). Mais ça, c'est toi qui sais.

Si c'est faisable, après faut imaginer avec une base qui contient
beaucoup plus de tables et de champs...



ÀMHA, si tu sais écrire une grammaire et que l'apprentissage de
Semantic ne te pose pas de problèmes, c'est faisable. La
grammaire n'a pas l'air a priori très complexe. Pour la
génération des résultats, ben c'est toi qui vois comment
interpréter les infos dont tu disposes.

Si l'info nécessaire se trouve dans le fichier d'entrée, alors
tu pourras l'utiliser. Le tout est de savoir comment, mais ça,
ce n'est plus du ressort de Semantic, ça fait partie du domaine
d'application.

--drkm
Avatar
Sébastien Kirche
Le 26 July 2005 à 15:07, drkm a formulé :

Il y a plusieurs fichiers Infos dans Semantic. L'un d'eux
s'appelle 'app-dev-guide' ou quelque chose comme ça. C'est le
guide du développeur d'application se basant sur Semantic. Ce
que tu cherches, je pense.



Je pense aussi :)

> Partant de ça j'obtiens automagiquement 2 blocs

> +---------+ +----------+
> > SERVICE |---| VEHICULE |
> +---------+ +----------+

> +---------+ +----------+

> Car le parser aura "vu" que VEHICULE référence un champ de SERVICE.

Je ne vois pas vraiment comment il voit que VEHICULE référence
un champ de SERVICE. Éventuellement, il peut détecter que deux
champs ont le même nom et le même type (et que l'un a une
contrainte d'unicité). Mais ça, c'est toi qui sais.



Oui c'est la convention employée ici : une table a ses champs (dont les
noms sont préfixés par le nom de la table en abrégé), si un nom de champ
n'est pas dans cet «espace de nommage», c'est une clé vers une autre
table.

> Si c'est faisable, après faut imaginer avec une base qui contient
> beaucoup plus de tables et de champs...

ÀMHA, si tu sais écrire une grammaire et que l'apprentissage de
Semantic ne te pose pas de problèmes, c'est faisable. La
grammaire n'a pas l'air a priori très complexe. Pour la
génération des résultats, ben c'est toi qui vois comment
interpréter les infos dont tu disposes.

Si l'info nécessaire se trouve dans le fichier d'entrée, alors
tu pourras l'utiliser. Le tout est de savoir comment, mais ça,
ce n'est plus du ressort de Semantic, ça fait partie du domaine
d'application.



Ok, ça pourra me faire une mise en pratique de semantic.

Merci pour tes réflexions sur la question.

--
Sébastien Kirche
Avatar
Sébastien Kirche
Le 26 July 2005 à 15:07, Sébastien Kirche a formulé :

> Il y a plusieurs fichiers Infos dans Semantic. L'un d'eux
> s'appelle 'app-dev-guide' ou quelque chose comme ça. C'est le
> guide du développeur d'application se basant sur Semantic. Ce
> que tu cherches, je pense.

Je pense aussi :)



[Après être retourné dans cedet/semantic/doc] je me dit que je suis
assez idiot car j'avais trouvé la doc de la grammaire du C99 (mentionnée
dans les entêtes du source wisent-c.wy) dans ce dossier et que je n'ai
même pas eu l'idée de regarder ce qu'il y a avait d'autre...

En fait il y a plein de documentation là-dedans :)

Je crois que wisent/semantic est vraiment une option intéressante pour
mes analyses de code.

--
Sébastien Kirche
Avatar
drkm
Sébastien Kirche writes:

Ok, ça pourra me faire une mise en pratique de semantic.



Tiens, ce pourrait être intéressant de documenter un poil tes
recherches. Ou ce à quoi tu es arrivé (si le code peut être
rendu public) et comment tu t'y es pris. Une sorte de tutorial
par l'exemple à propos de Semantic, en français.

Au fait, quelqu'un sait-il s'il y a moyen de rendre l'accès
public à certain de ses objets dans CPS ? De manière à pouvoir,
sur EmacsFR, donner accès à une FAQ ou un Wiki que l'on crée dans
son espace privé.

Éventuellement, s'il n'y a rien de prévu dans CPS, une solution
serait peut-être de créer un espace de publication global
« espaces privés » contenant un sous-espace (une « section », je
pense) par utilisateur, avec les droits ad-hoc. Qu'en
pensez-vous, Xavier et Matthieu ?

Merci pour tes réflexions sur la question.



Pas de quoi. C'est un investissement (cfr. ci-dessus) :-p

--drkm
Avatar
Sébastien Kirche
Le 26 juillet 2005 à 17:07, drkm a dit :

> Ok, ça pourra me faire une mise en pratique de semantic.

Tiens, ce pourrait être intéressant de documenter un poil tes
recherches. Ou ce à quoi tu es arrivé (si le code peut être
rendu public) et comment tu t'y es pris. Une sorte de tutorial
par l'exemple à propos de Semantic, en français.



Très bonne nouvelle pour moi : j'ai mis la main sur la grammaire du
langage de description de la base (au format bnf). Ce qui devrait
grandement aider à écrire une grammaire wisent et obtenir au minimum un
font-locking.

Cependant il me sera absolument impossible de publier cette partie,
aspect propriétaire oblige.

Par contre si j'arrive à appréhender la méthode, je peux toujours
documenter à partir d'une autre grammaire.

--
Sébastien Kirche
1 2