Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

langage de manipulation de texte

17 réponses
Avatar
Mihamina (R12y) Rakotomandimby
Salut la compagnie.

Dites.

Je regarde la date de parution d'Emacs: ~ 1975
http://en.wikipedia.org/wiki/Emacs

Je regarde la date de parution de Perl: ~ 1987
http://en.wikipedia.org/wiki/Perl

On the other hand, je me dis:
Pour faire de la coloration syntaxique, il faut un "puissant" langage de
manipulation de texte.
Emacs étant paru avant Perl, Emacs étant écrit en Lisp (ou une variante),
Perl n'est pas vraiment un "équivalent (ne jouent pas vraiment dans la meme
catégorie)" de Lisp (comme Python et Ruby), pourquoi ne retrouve-t-on pas
beaucoup d'exemple de manipulation de texte en Lisp sur le Net?
Tous les mega outils/exemples de manipulation de texte sont soit des
implémenté avec outils comme sed/awk (écrits en C...) ou alors des machins
Perl.
C'est vrai que le code d'Emacs est un bon gros exemple, mais... puisque ce
langage a une telle qualité, pourquoi n'a telle pas été mise en avant?

Ou bien je suis trop jeune pour avoir connu les heures de gloire du Lisp?

7 réponses

1 2
Avatar
lhabert
Camille Bourgoin :

(setq a 1)
(defun f() a)
(defun g(a) (f))
(g 2)

?



L'interpréteur Emacs donne 2 si (g 2), 3 si (g 3). Un interpréteur
Common Lisp donne 1.

Effectivement, c'est bizarre.

Quel en est la raison ?



Il faudrait demander à Stalman. Je subodore que la réponse est que c'est
beaucoup facile à implémenter (une table de hachage globale, ou chaque
binding cache les précédents, alors que pour avoir la sémantique de CL, il
faut associer à chaque fontion un pointeur vers chaque variable extérieure
à laquelle elle fait référence).

Bon, pour être honnète, ça a aussi ses avantages : le comportement de
beaucoup de fonctions dépend de diverses variables, et c'est beaucoup plus
agréable de faire :

(let ((plim plam))
(ploum)
)

que :

(let ((oldplim plim))
(setq plim plam)
(ploum)
(setq plim oldplim)
)

.

Ce problème permet-il vraiment de dire qu'Emacs Lisp n'est pas
vraiment un Lisp ?



Pour moi oui. Ça change du tout au tout la sémantique du langage.
Avatar
Camille Bourgoin
(Luc Habert) writes:

Camille Bourgoin :

(setq a 1)
(defun f() a)
(defun g(a) (f))
(g 2)

?



L'interpréteur Emacs donne 2 si (g 2), 3 si (g 3). Un interpréteur
Common Lisp donne 1.

Effectivement, c'est bizarre.

Quel en est la raison ?



Il faudrait demander à Stalman. Je subodore que la réponse est que c'est
beaucoup facile à implémenter (une table de hachage globale, ou chaque
binding cache les précédents, alors que pour avoir la sémantique de CL, il
faut associer à chaque fontion un pointeur vers chaque variable extérieure
à laquelle elle fait référence).

Bon, pour être honnète, ça a aussi ses avantages : le comportement de
beaucoup de fonctions dépend de diverses variables, et c'est beaucoup plus
agréable de faire :

(let ((plim plam))
(ploum)
)

que :

(let ((oldplim plim))
(setq plim plam)
(ploum)
(setq plim oldplim)
)

.

Ce problème permet-il vraiment de dire qu'Emacs Lisp n'est pas
vraiment un Lisp ?



Pour moi oui. Ça change du tout au tout la sémantique du langage.



Effectivement. Au niveau où j'en suis (connais un peu Emacs Lisp, et
commence tout juste à apprendre Common Lisp), je ne m'en suis pas
rendu compte.

Merci pour ces infos.

--
Camille "Mesmento" Bourgoin
jabber :
web : http://jbbourgoin.free.fr/site/
Avatar
Ph. Ivaldi
Le 21 mars 2007, (Luc Habert) écrivit :

Le parsing, c'est l'un des
choses les plus immondes qui soient à programmer. Et c'est ÀMHA
totalement crétin.



Bonjour,

Je passe mon temps à parser de façon très maladroite du code et
j'aimerai avoir des conseils.
Comme je ne sais pas où poser la question et que le sujet et légèrement
abordé ici, je me lance (me rediriger le cas échéant).

Pour fabriquer les pages de mon site à propos d'Asymptote, je crée des
répertoires par thèmes dans lesquels je place des fichiers .asy, deux
fichiers texte 'titre' et title' et un makefile ultra basique qui ne
fait qu'appeler un de mes deux script bash.

Grosso modo, je principe est le suivant.
Après avoir compilé les nouveaux .asy et converti les images en png,
Je convertis tous les .asy en .asy.html avec htmlize.
Je passe ensuite les .asy.html générés dans une moulinette infâme qui
transforme certaines balises (mise en commentaire pour que le code
puisse être compilé) prédéfinies en du code HTML tout aussi
prédéfini.
Au final, j'extirpe tout le code des .asy.html compris entre les balise
<body></body> à coup 'awk' et les balance dans un index.html dont
l'entête est déjà faite.
Bref c'est de de la grosse bidouille et les balises ne peuvent avoir que
des comportements très limités (pas d'interaction entre elles, par
exemple).
J'aimerai bien aussi, à terme, remouliner tous ça pour générer un pdf
contenant la documentation des fonctions qui se trouvent dans un fichier
suivi de l'exemple qui se trouve dans un autre fichier.

Comment procéderiez vous ?
Avec du xml ? avec un parseur maison en Perl ? (je ne connais ni l'un ni
l'autre).
Avec CDuce (que j'ai du mal à comprendre) ?

Pour l'instant les moulinettes *infâmes* que j'utilise sont ici (âme
sensible à la beauté du code, s'abstenir!):
http://piprim.tuxfamily.org/asymptote/bin/

--
Merci de votre attention et excusez moi pour le HS.
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Avatar
lhabert
Ph. Ivaldi :

Comment procéderiez vous ?
Avec du xml ? avec un parseur maison en Perl ? (je ne connais ni l'un ni
l'autre).
Avec CDuce (que j'ai du mal à comprendre) ?



Avec un truc comme CDuce ou XSLT. Tu veux faire de la réécriture d'arbre, ce
sont des langages faits pour. Le perl, ou ce que tu fais actuellement, c'est
de la réécriture de texte.
Avatar
Ph. Ivaldi
Le 24 mars 2007, (Luc Habert)écrivit :

Ph. Ivaldi :

Comment procéderiez vous ? Avec du xml ? avec un parseur maison en
Perl ? (je ne connais ni l'un ni l'autre). Avec CDuce (que j'ai du
mal à comprendre) ?



Avec un truc comme CDuce ou XSLT.



Je me suis lancé dans le xml et le xslt ce week-end; ça convient
parfaitement à ce que je veux faire avec un peu de réécriture de texte
pour sortir un xml convenable dès le départ.
--
Merci.

Philippe Ivaldi.
http://piprim.tuxfamily.org/
Avatar
lhabert
Ph. Ivaldi :

avec un peu de réécriture de texte pour sortir un xml convenable dès le
départ.



Au passage : xsltproc a un parseur de soupe de tags qui, dans mon
expérience, se sort très bien de merdes hallucinantes. Ça s'active avec
l'option « --html ».
Avatar
Ph. Ivaldi
Le 26 mars 2007, (Luc Habert)écrivit :

Ph. Ivaldi :

avec un peu de réécriture de texte pour sortir un xml convenable dès
le départ.



Au passage : xsltproc a un parseur de soupe de tags qui, dans mon
expérience, se sort très bien de merdes hallucinantes. Ça s'active
avec l'option « --html ».



Ha, il me semblait que xsltproc ne servait qu'à appliquer la feuille de
style XSLT au document XML.
La page man de xsltproc dit simplement:
--html The input document is an HTML file.

Si, par exemple, je place le tag suivant dans du code:

/*<module file="tartanpion" anchor="truc"/>*/

le html généré par htmlize le transforme en (j'ai rajouté les sauts de
ligne):
/*</span><span class="comment">
<span class="asy-xml">&lt;module file="tartanpion" anchor="truc"/&gt;
</span></span><span class="comment">*/</span>

Il faut bien que je vire les <span class="comment|asy-xml"> et modifie
&lt; &gt;

Je m'en sorts ainsi (sur cette exemple):
(defun clean-asy-htmlize()
(beginning-of-buffer)
(while (re-search-forward
"<span class="comment"><span class="asy-xml">&lt;(.*)&gt;</span></span>"
(point-max) t)
(replace-match "<1>")))
(add-hook 'htmlize-after-hook 'clean-asy-htmlize)

Je suis complètement débutant en XML donc je dis peut-être n'importe
quoi...
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
1 2