<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.bonz.org/tech/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>ZenTech - c</title>
  <link>http://www.bonz.org/tech/</link>
  <description>Om Mani Padme Hum</description>
  <language>fr</language>
  <pubDate>Tue, 23 Sep 2008 11:58:05 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>C'est curieux chez les marins ce besoin de faire des phrases</title>
    <link>http://www.bonz.org/tech/post/2008/03/18/Cest-curieux-chez-les-marins-ce-besoin-de-faire-des-phrases</link>
    <guid isPermaLink="false">urn:md5:b67d011b6c4f2f48a14c8b2ac225f6c1</guid>
    <pubDate>Tue, 18 Mar 2008 15:47:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>code</category>
        <category>c</category><category>sed</category>    
    <description>    &lt;p&gt;Suite à &lt;a href=&quot;http://www.bonz.org/tech/post/2008/03/17/Pour-en-finir-avec-Lulu-la-Nantaise#c543&quot; hreflang=&quot;fr&quot;&gt;une remarque judicieuse&lt;/a&gt; j'ai été obligé de gérer un petit cas particulier qui conduisait à un conflit. Le &lt;a href=&quot;http://www.bonz.org/files/ccmtstrip.sed&quot;&gt;script sed&lt;/a&gt; est maintenant modifié, ce n'est pas extrêmement propre mais c'est assez efficace. Le bout du script concerné est&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
# remove /* */ comments, multiline or not
/\/\*/{
    # special case of /*/ starting comments that fools the next test
    s:/\*/:/\* /:
    :mline
    /\*\// {
        s:/\*.*\*/::
        b mlineend
    }
    N
    b mline
}
:mlineend
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Pour en finir avec Lulu la Nantaise</title>
    <link>http://www.bonz.org/tech/post/2008/03/17/Pour-en-finir-avec-Lulu-la-Nantaise</link>
    <guid isPermaLink="false">urn:md5:cf7307e34e9c4d47776363b984d66d4d</guid>
    <pubDate>Mon, 17 Mar 2008 12:32:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>code</category>
        <category>c</category><category>sed</category>    
    <description>&lt;p&gt;Au final, je me suis occupé des espaces, le but de ce script étant au départ de fournir un code nettoyé qui pourra passer au banc des statistiques. Le script sed est &lt;a href=&quot;http://www.bonz.org/files/ccmtstrip.sed&quot;&gt;disponible&lt;/a&gt; et placé sous license type *BSD. Quelques corrections d'erreur et de nouvelles fonctions constituent cette dernière version du script.&lt;/p&gt;    &lt;p&gt;J'utilise un petit fichier de définition &lt;code&gt;test.h&lt;/code&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
/*
 * Big story here
 * my life
 */
// one line
#define HEHE 1

/* includes */
#include &amp;quot;blah&amp;quot;
#include &amp;quot;foo&amp;quot; // end line comment

#include /* weird comment */ &amp;quot;pouet&amp;quot;
int woop /* to see */
/* let's continue with weird comments */ void sigpipe_handle(int);

/*-------------
  bloh
---------------*/
int main(int argc, char **argv);
int parseCommandLine(int argc, char* argv[]);
&lt;/pre&gt;

&lt;p&gt;Ce qui donne, une fois passé par sed&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
$ sed -nf ccmtstrip.sed test.h
#define HEHE 1
#include &amp;quot;blah&amp;quot;
#include &amp;quot;foo&amp;quot;
#include &amp;quot;pouet&amp;quot;
int woop
void sigpipe_handle(int);
int main(int argc, char **argv);
int parseCommandLine(int argc, char* argv[]);
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Les commentaires déssoudés par Jo le trembleur</title>
    <link>http://www.bonz.org/tech/post/2008/03/15/Les-commentaires-dessoudes-par-Jo-le-trembleur</link>
    <guid isPermaLink="false">urn:md5:9892afc0ad555608da23da5264809480</guid>
    <pubDate>Sat, 15 Mar 2008 21:21:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>code</category>
        <category>c</category><category>sed</category>    
    <description>&lt;p&gt;La version &lt;a href=&quot;http://www.bonz.org/tech/post/2008/03/14/Du-C-par-Teddy-de-Montreal&quot; hreflang=&quot;fr&quot;&gt;précédente&lt;/a&gt; du script sed ne me convenait pas. Elle ne gérait pas certaines formes de commentaires horribles, qui mériterait une sentence extrême et douloureuse. C'est maintenant chose rêglée avec une version améliorée.&lt;/p&gt;    &lt;pre&gt;
#!/usr/bin/sed -nf

# remove single line comments
/^\/\//d

# remove /* */ comments, multiline or not
/\/\*/{
    :mline
    /\*\// {
        s:/\*.*\*/::
        b mlineend
    }
    N
    b mline
}
:mlineend

# remove empty lines
/^$/d

p
&lt;/pre&gt;

&lt;p&gt;Il peut arriver que certains espaces inutiles apparaissent dans le code suite à la suppression des commentaires multiligne mais ce n'est pas fondamentalement un problème.&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Du C par Teddy de Montreal</title>
    <link>http://www.bonz.org/tech/post/2008/03/14/Du-C-par-Teddy-de-Montreal</link>
    <guid isPermaLink="false">urn:md5:3e74dbfb5103e8942b71f2b23dbc3227</guid>
    <pubDate>Fri, 14 Mar 2008 17:25:00 +0100</pubDate>
    <dc:creator>hr</dc:creator>
        <category>code</category>
        <category>c</category><category>sed</category>    
    <description>&lt;p&gt;&quot; ... un fondu qui travaillait qu'à la dynamite.&quot; Je me suis mis en tête de compter le nombre de lignes efficaces d'un développement en C. Par ligne efficace j'entends le nombre de lignes de code vraiment compilées. Je dois donc éliminer les commentaires sous leurs diverses formes et les lignes blanches. Et comme j'aime bien me faire mal, au lieu de faire ça en 10 minutes en Perl ou Python, je l'ai fait grâce à &lt;code&gt;sed(1)&lt;/code&gt;.&lt;/p&gt;    &lt;p&gt;Ce script sed doit donc gérer les lignes blanches, les commentaires sur une ligne commençant pas '&lt;code&gt;//&lt;/code&gt;', les commentaires sur plusieurs lignes (ou pas) du type &lt;code&gt;/* comment */&lt;/code&gt;. Ca donne alors le script suivant&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;
#!/bin/sed -nf

# remove empty lines
/^$/d
# remove single line comments
/^\/\//d

# remove /* */ comments, multiline or not 
/\/\*/{
    :mline
    /\*\//b mlineend
    N
    b mline
    :mlineend
    d
}
p
&lt;/pre&gt;

&lt;p&gt;Le seul passage qui me semble nécessiter une explication est celui qui gère les commentaires sur plusieurs lignes. Ce qui est fait là est assez simple (sisi c'est vrai)&amp;nbsp;: on ne traite que les lignes comprenant '&lt;code&gt;/*&lt;/code&gt;', si la ligne comprend aussi '&lt;code&gt;*/&lt;/code&gt;' on passe à la balise mlineend, sinon on ajoute la ligne suivante aux lignes déjà lues et on passe à la balise mline (boucle). Le saut à la balise mlineend provoque la destruction des lignes lues et le passage à la ligne suivante en recommençant le script.&lt;br /&gt;
On finit par afficher la ligne (grâce à 'p') si aucun des cas précédents ne s'est produit.&lt;/p&gt;


&lt;p&gt;Le défaut de ce script est de ne pas gérer les cas où les commentaires sont mixés avec du code. Je pense l'améliorer dans un deuxième temps pour prendre en compte ces cas.&lt;/p&gt;


&lt;p&gt;&lt;ins&gt;&lt;strong&gt;Mise à jour&lt;/strong&gt;&lt;/ins&gt;: une &lt;a href=&quot;http://www.bonz.org/tech/post/2008/03/15/Les-commentaires-dessoudes-par-Jo-le-trembleur&quot; hreflang=&quot;fr&quot;&gt;nouvelle version&lt;/a&gt; de ce script règle ces soucis.&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>