<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.apertium.org/w/index.php?action=history&amp;feed=atom&amp;title=Exemple_de_base_lttoolbox</id>
	<title>Exemple de base lttoolbox - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.apertium.org/w/index.php?action=history&amp;feed=atom&amp;title=Exemple_de_base_lttoolbox"/>
	<link rel="alternate" type="text/html" href="https://wiki.apertium.org/w/index.php?title=Exemple_de_base_lttoolbox&amp;action=history"/>
	<updated>2026-05-05T18:41:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>https://wiki.apertium.org/w/index.php?title=Exemple_de_base_lttoolbox&amp;diff=34122&amp;oldid=prev</id>
		<title>Bech: corrections de mise en page (pour affichage réduit en largeur)</title>
		<link rel="alternate" type="text/html" href="https://wiki.apertium.org/w/index.php?title=Exemple_de_base_lttoolbox&amp;diff=34122&amp;oldid=prev"/>
		<updated>2012-05-11T07:23:47Z</updated>

		<summary type="html">&lt;p&gt;corrections de mise en page (pour affichage réduit en largeur)&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Revision as of 07:23, 11 May 2012&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 147:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 147:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-deletedline diff-side-deleted&quot;&gt;&lt;div&gt;[[File:Ltbeer.png|center]]&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt;[[File:Ltbeer.png&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;|thumb|600px&lt;/ins&gt;|center]]&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;br /&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;on peut simplifier la construction des transducteurs comme ceci :&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;on peut simplifier la construction des transducteurs comme ceci :&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 280:&lt;/td&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 280:&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;/* &lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;/* &lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-deletedline diff-side-deleted&quot;&gt;&lt;div&gt; * g++ -o lt-regexp lt-regexp.cc -I/usr/include/libxml2 -I/home/fran/local/include/lttoolbox-3.2 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;-L/home/fran/local/lib -llttoolbox3 -llibxml2&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt; * g++ -o lt-regexp lt-regexp.cc -I/usr/include/libxml2 -I/home/fran/local/include/lttoolbox-3.2 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td colspan=&quot;2&quot; class=&quot;diff-empty diff-side-deleted&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-addedline diff-side-added&quot;&gt;&lt;div&gt; *     -L/home/fran/local/lib -llttoolbox3 -llibxml2&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt; */&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt; */&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-deleted&quot;&gt;&lt;div&gt;#include &amp;lt;cwchar&amp;gt;&lt;/div&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;
  &lt;td class=&quot;diff-context diff-side-added&quot;&gt;&lt;div&gt;#include &amp;lt;cwchar&amp;gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Bech</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.apertium.org/w/index.php?title=Exemple_de_base_lttoolbox&amp;diff=34121&amp;oldid=prev</id>
		<title>Bech: Création de la page</title>
		<link rel="alternate" type="text/html" href="https://wiki.apertium.org/w/index.php?title=Exemple_de_base_lttoolbox&amp;diff=34121&amp;oldid=prev"/>
		<updated>2012-05-11T07:18:29Z</updated>

		<summary type="html">&lt;p&gt;Création de la page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Exemple de base ==&lt;br /&gt;
&lt;br /&gt;
Voici une version simple C++/lttoolbox du programme &amp;#039;beer&amp;#039; mentionné dans la page [[Dictionnaire morphologique]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// g++ -I/usr/local/include/lttoolbox-3.2 -I/usr/local/lib -llttoolbox3 lt_beer.cc -o lt-beer&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;cwchar&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdio&amp;gt;&lt;br /&gt;
#include &amp;lt;cerrno&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;list&amp;gt;&lt;br /&gt;
#include &amp;lt;set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;lttoolbox/ltstr.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// LtLocale::tryToSetLocale()&lt;br /&gt;
#include &amp;lt;lttoolbox/lt_locale.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Classe Transducer&lt;br /&gt;
#include &amp;lt;lttoolbox/transducer.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Classe Alphabet&lt;br /&gt;
#include &amp;lt;lttoolbox/alphabet.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Classe State&lt;br /&gt;
#include &amp;lt;lttoolbox/state.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// Classe TransExe&lt;br /&gt;
#include &amp;lt;lttoolbox/trans_exe.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
  Alphabet alphabet;&lt;br /&gt;
  Transducer t;&lt;br /&gt;
&lt;br /&gt;
  // Set locale&lt;br /&gt;
  LtLocale::tryToSetLocale();&lt;br /&gt;
&lt;br /&gt;
  // Insérer les symboles dans alphabet, on garde les valeurs&lt;br /&gt;
  alphabet.includeSymbol(L&amp;quot;&amp;lt;n&amp;gt;&amp;quot;);&lt;br /&gt;
  alphabet.includeSymbol(L&amp;quot;&amp;lt;sg&amp;gt;&amp;quot;);&lt;br /&gt;
  alphabet.includeSymbol(L&amp;quot;&amp;lt;pl&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  int n_sym = alphabet(L&amp;quot;&amp;lt;n&amp;gt;&amp;quot;);&lt;br /&gt;
  int sg_sym = alphabet(L&amp;quot;&amp;lt;sg&amp;gt;&amp;quot;);&lt;br /&gt;
  int pl_sym = alphabet(L&amp;quot;&amp;lt;pl&amp;gt;&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Etat initial&lt;br /&gt;
  int initial = t.getInitial();&lt;br /&gt;
&lt;br /&gt;
  // construire &amp;quot;beer&amp;quot; à la main&lt;br /&gt;
  int beer = initial;&lt;br /&gt;
&lt;br /&gt;
  // il y a les transitions b:b e:e e:e r:r&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;b&amp;#039;,L&amp;#039;b&amp;#039;), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;e&amp;#039;,L&amp;#039;e&amp;#039;), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;e&amp;#039;,L&amp;#039;e&amp;#039;), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;r&amp;#039;,L&amp;#039;r&amp;#039;), beer);&lt;br /&gt;
&lt;br /&gt;
  // il y a 0:&amp;lt;n&amp;gt; 0:&amp;lt;sg&amp;gt;&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(0, n_sym), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(0, sg_sym), beer);&lt;br /&gt;
  t.setFinal(beer);&lt;br /&gt;
&lt;br /&gt;
  // construire &amp;quot;beers&amp;quot; à la main&lt;br /&gt;
  int beers = t.getInitial();&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(L&amp;#039;b&amp;#039;,L&amp;#039;b&amp;#039;), beers);&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(L&amp;#039;e&amp;#039;,L&amp;#039;e&amp;#039;), beers);&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(L&amp;#039;e&amp;#039;,L&amp;#039;e&amp;#039;), beers);&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(L&amp;#039;r&amp;#039;,L&amp;#039;r&amp;#039;), beers);&lt;br /&gt;
&lt;br /&gt;
  // cette transition est s:0&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(L&amp;#039;s&amp;#039;, 0), beers);&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(0, n_sym), beers);&lt;br /&gt;
  beers = t.insertSingleTransduction(alphabet(0, pl_sym), beers);&lt;br /&gt;
  t.setFinal(beers);&lt;br /&gt;
&lt;br /&gt;
  t.minimize();&lt;br /&gt;
&lt;br /&gt;
  // Plutôt que d&amp;#039;essayer de convertir entre Transducer et TransExe, on va&lt;br /&gt;
  // juste écrire et lire&lt;br /&gt;
  FILE* fst=fopen(&amp;quot;beer.fst&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
  t.write(fst);&lt;br /&gt;
  fclose(fst);&lt;br /&gt;
  fst=fopen(&amp;quot;beer.fst&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  TransExe te;&lt;br /&gt;
  te.read(fst, alphabet);&lt;br /&gt;
  fclose(fst);&lt;br /&gt;
&lt;br /&gt;
  State *initial_state = new State();&lt;br /&gt;
  initial_state-&amp;gt;init(te.getInitial());&lt;br /&gt;
  State current_state = *initial_state;&lt;br /&gt;
&lt;br /&gt;
  wstring input, output=L&amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
  set&amp;lt;Node *&amp;gt; anfinals;&lt;br /&gt;
  anfinals.insert(te.getFinals().begin(), te.getFinals().end());&lt;br /&gt;
&lt;br /&gt;
  FILE* in=stdin;&lt;br /&gt;
&lt;br /&gt;
  bool reading=true;&lt;br /&gt;
&lt;br /&gt;
  // C&amp;#039;est notre exécution : voir si l&amp;#039;entrée est reconnue&lt;br /&gt;
  while (reading)&lt;br /&gt;
  {&lt;br /&gt;
    wchar_t val = (wchar_t)fgetwc(in);&lt;br /&gt;
&lt;br /&gt;
    if(val==WEOF||iswspace(val))&lt;br /&gt;
    {&lt;br /&gt;
      reading=false;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
      if (!reading)&lt;br /&gt;
      {&lt;br /&gt;
        // A la fin. on n&amp;#039;a pas besoin de faire quoique ce soit&lt;br /&gt;
        // mais quitter la boucle dans cet exemple simplistelike thi&lt;br /&gt;
        break;&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        current_state.step(val);&lt;br /&gt;
        alphabet.getSymbol(input, val);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if (current_state.isFinal(anfinals))&lt;br /&gt;
  {&lt;br /&gt;
    // Non utilisé, on veut juste que ce ne soit pas vide...&lt;br /&gt;
    set&amp;lt;wchar_t&amp;gt; escaped;&lt;br /&gt;
    escaped.insert(L&amp;#039;$&amp;#039;);&lt;br /&gt;
    output = current_state.filterFinals(anfinals, alphabet, escaped);&lt;br /&gt;
&lt;br /&gt;
    wcout &amp;lt;&amp;lt; input &amp;lt;&amp;lt; output &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    wcout &amp;lt;&amp;lt; L&amp;quot;Unrecognised: &amp;quot; &amp;lt;&amp;lt; input &amp;lt;&amp;lt; endl;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Ltbeer.png|center]]&lt;br /&gt;
&lt;br /&gt;
on peut simplifier la construction des transducteurs comme ceci :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  // construire &amp;quot;beer&amp;quot; à la main&lt;br /&gt;
  int beer = initial;&lt;br /&gt;
&lt;br /&gt;
  // il y a les transitions b:b e:e e:e r:r&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;b&amp;#039;,L&amp;#039;b&amp;#039;), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;e&amp;#039;,L&amp;#039;e&amp;#039;), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;e&amp;#039;,L&amp;#039;e&amp;#039;), beer);&lt;br /&gt;
  beer = t.insertSingleTransduction(alphabet(L&amp;#039;r&amp;#039;,L&amp;#039;r&amp;#039;), beer);&lt;br /&gt;
&lt;br /&gt;
  int beersg = beer;&lt;br /&gt;
&lt;br /&gt;
  // il y a 0:&amp;lt;n&amp;gt; 0:&amp;lt;sg&amp;gt;&lt;br /&gt;
  beersg = t.insertSingleTransduction(alphabet(0, n_sym), beersg);&lt;br /&gt;
  beersg = t.insertSingleTransduction(alphabet(0, sg_sym), beersg);&lt;br /&gt;
  t.setFinal(beersg);&lt;br /&gt;
&lt;br /&gt;
  // construire &amp;quot;beers&amp;quot; à la main&lt;br /&gt;
  int beerpl = beer;&lt;br /&gt;
  beerpl = t.insertSingleTransduction(alphabet(L&amp;#039;s&amp;#039;, 0), beerpl);&lt;br /&gt;
  beerpl = t.insertSingleTransduction(alphabet(0, n_sym), beerpl);&lt;br /&gt;
  beerpl = t.insertSingleTransduction(alphabet(0, pl_sym), beerpl);&lt;br /&gt;
  t.setFinal(beerpl);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Écriture/lecture de plusieurs transducteurs dans le même fichier  ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// g++ -o test test.cc -I/home/fran/local/include/lttoolbox-3.2 -L/home/fran/local/lib -llttoolbox3 &lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;cwchar&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdio&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;lttoolbox/ltstr.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/lt_locale.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/transducer.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/alphabet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/regexp_compiler.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/compression.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
  map&amp;lt;int, Transducer&amp;gt; patterns;&lt;br /&gt;
  Alphabet a;&lt;br /&gt;
  RegexpCompiler re;&lt;br /&gt;
&lt;br /&gt;
  LtLocale::tryToSetLocale();&lt;br /&gt;
&lt;br /&gt;
  FILE *output = stdout;&lt;br /&gt;
  FILE *fst = fopen(argv[1], &amp;quot;w+&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Construire les transducteurs&lt;br /&gt;
&lt;br /&gt;
  a.includeSymbol(L&amp;quot;&amp;lt;n&amp;gt;&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
  re.initialize(&amp;amp;a);  &lt;br /&gt;
  re.compile(L&amp;quot;foo&amp;quot;);&lt;br /&gt;
  patterns[1] = re.getTransducer();&lt;br /&gt;
  re.initialize(&amp;amp;a);  &lt;br /&gt;
  re.compile(L&amp;quot;bar&amp;quot;);&lt;br /&gt;
  patterns[2] = re.getTransducer();&lt;br /&gt;
  re.initialize(&amp;amp;a);  &lt;br /&gt;
  re.compile(L&amp;quot;baz&amp;quot;);&lt;br /&gt;
  patterns[3] = re.getTransducer();&lt;br /&gt;
&lt;br /&gt;
  // Écrire dans les transducteurs&lt;br /&gt;
&lt;br /&gt;
  a.write(fst);&lt;br /&gt;
  Compression::multibyte_write(patterns.size(), fst);&lt;br /&gt;
  fwprintf(output, L&amp;quot;Patterns: %d, Alphabet: %d\n&amp;quot;, patterns.size(), a.size());&lt;br /&gt;
&lt;br /&gt;
  for(map&amp;lt;int, Transducer&amp;gt;::iterator it = patterns.begin(); it != patterns.end(); it++)&lt;br /&gt;
  {&lt;br /&gt;
    wchar_t buf[50];&lt;br /&gt;
    memset(buf, &amp;#039;\0&amp;#039;, sizeof(buf));&lt;br /&gt;
    swprintf(buf, 50, L&amp;quot;%d&amp;quot;, it-&amp;gt;first);&lt;br /&gt;
    wstring id(buf);&lt;br /&gt;
    fwprintf(output, L&amp;quot;= %S =============================\n&amp;quot;, id.c_str());&lt;br /&gt;
    it-&amp;gt;second.show(a, output);&lt;br /&gt;
  &lt;br /&gt;
    Compression::wstring_write(id, fst);&lt;br /&gt;
    it-&amp;gt;second.write(fst);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  fclose(fst);&lt;br /&gt;
  fwprintf(output, L&amp;quot;\n\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  // Maintenant lire dans les transducteurs ce qu&amp;#039;on y a écrit, morceau par morceau.&lt;br /&gt;
&lt;br /&gt;
  FILE *new_fst = fopen(argv[1], &amp;quot;r&amp;quot;);&lt;br /&gt;
  Alphabet new_alphabet;&lt;br /&gt;
  map&amp;lt;wstring, Transducer&amp;gt; transducers;&lt;br /&gt;
&lt;br /&gt;
  new_alphabet.read(new_fst);&lt;br /&gt;
  int len = Compression::multibyte_read(new_fst);  &lt;br /&gt;
&lt;br /&gt;
  while(len &amp;gt; 0)&lt;br /&gt;
  { &lt;br /&gt;
    int len2 = Compression::multibyte_read(new_fst);&lt;br /&gt;
    wstring name = L&amp;quot;&amp;quot;;&lt;br /&gt;
    while(len2 &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
      name += static_cast&amp;lt;wchar_t&amp;gt;(Compression::multibyte_read(new_fst));&lt;br /&gt;
      len2--;&lt;br /&gt;
    }&lt;br /&gt;
    transducers[name].read(new_fst);&lt;br /&gt;
    len--;&lt;br /&gt;
  }&lt;br /&gt;
  fwprintf(output, L&amp;quot;Patterns: %d, Alphabet: %d\n&amp;quot;, transducers.size(), new_alphabet.size());&lt;br /&gt;
&lt;br /&gt;
  for(map&amp;lt;wstring, Transducer&amp;gt;::iterator it = transducers.begin(); it != transducers.end(); it++)&lt;br /&gt;
  {&lt;br /&gt;
    fwprintf(output, L&amp;quot;= %S =============================\n&amp;quot;, it-&amp;gt;first.c_str());&lt;br /&gt;
    it-&amp;gt;second.minimize();&lt;br /&gt;
    it-&amp;gt;second.show(a, output);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  fclose(new_fst);&lt;br /&gt;
  &lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation d&amp;#039;expressions régulières ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* &lt;br /&gt;
 * g++ -o lt-regexp lt-regexp.cc -I/usr/include/libxml2 -I/home/fran/local/include/lttoolbox-3.2 -L/home/fran/local/lib -llttoolbox3 -llibxml2&lt;br /&gt;
 */&lt;br /&gt;
#include &amp;lt;cwchar&amp;gt;&lt;br /&gt;
#include &amp;lt;cstdio&amp;gt;&lt;br /&gt;
#include &amp;lt;cerrno&amp;gt;&lt;br /&gt;
#include &amp;lt;string&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;lt;list&amp;gt;&lt;br /&gt;
#include &amp;lt;set&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;lttoolbox/ltstr.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/lt_locale.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/transducer.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/alphabet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/state.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/regexp_compiler.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/match_exe.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/match_state.h&amp;gt;&lt;br /&gt;
#include &amp;lt;lttoolbox/xml_parse_util.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
wstring ws(char *arg)&lt;br /&gt;
{&lt;br /&gt;
  wchar_t buf[1024];&lt;br /&gt;
  memset(buf, &amp;#039;\0&amp;#039;, 1024);&lt;br /&gt;
  size_t num_chars = mbstowcs(buf, arg, strlen(arg));&lt;br /&gt;
  wstring ws(buf, num_chars);&lt;br /&gt;
  return ws;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bool match(Transducer t, wstring str, Alphabet a)&lt;br /&gt;
{&lt;br /&gt;
  map&amp;lt;int, int&amp;gt; finals;&lt;br /&gt;
  for(int i = 0; i &amp;lt; t.size(); i++) &lt;br /&gt;
  {&lt;br /&gt;
    if(!t.isFinal(i))&lt;br /&gt;
    {&lt;br /&gt;
      continue;&lt;br /&gt;
    }&lt;br /&gt;
    finals[i] = i;&lt;br /&gt;
  }&lt;br /&gt;
  MatchExe me(t, finals);&lt;br /&gt;
  MatchState ms;&lt;br /&gt;
  ms.clear();&lt;br /&gt;
  ms.init(me.getInitial());&lt;br /&gt;
&lt;br /&gt;
  for(wstring::iterator it = str.begin(); it != str.end(); it++) &lt;br /&gt;
  {&lt;br /&gt;
    wcout &amp;lt;&amp;lt; ms.size() &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; *it &amp;lt;&amp;lt; endl;&lt;br /&gt;
    ms.step(a(*it, *it));&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  int val = ms.classifyFinals(me.getFinals());&lt;br /&gt;
  fwprintf(stdout, L&amp;quot;%d\n&amp;quot;, val);&lt;br /&gt;
  &lt;br /&gt;
  if(val != -1) &lt;br /&gt;
  { &lt;br /&gt;
    return true;&lt;br /&gt;
  }&lt;br /&gt;
  return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
  Alphabet alphabet;&lt;br /&gt;
  Transducer t;&lt;br /&gt;
  RegexpCompiler re;&lt;br /&gt;
  bool matched;&lt;br /&gt;
&lt;br /&gt;
  LtLocale::tryToSetLocale();&lt;br /&gt;
&lt;br /&gt;
  if(argc &amp;lt; 3) &lt;br /&gt;
  {&lt;br /&gt;
    wcout &amp;lt;&amp;lt; L&amp;quot;Utilisation : lt-regexp &amp;lt;pattern&amp;gt; &amp;lt;chaîne à chercher&amp;gt;&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
    exit(-1);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  FILE *output = stdout;&lt;br /&gt;
  wstring pattern = ws(argv[1]);&lt;br /&gt;
  wstring s = ws(argv[2]);&lt;br /&gt;
&lt;br /&gt;
  re.initialize(&amp;amp;alphabet);&lt;br /&gt;
  re.compile(pattern);&lt;br /&gt;
  t = re.getTransducer();&lt;br /&gt;
  t.minimize();&lt;br /&gt;
&lt;br /&gt;
  t.show(alphabet, output);&lt;br /&gt;
&lt;br /&gt;
  matched = match(t, s, alphabet); &lt;br /&gt;
&lt;br /&gt;
  wcout &amp;lt;&amp;lt; endl &amp;lt;&amp;lt; pattern &amp;lt;&amp;lt; &amp;quot; &amp;quot; &amp;lt;&amp;lt; s &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Lttoolbox]]&lt;br /&gt;
[[Category:Documentation en français]]&lt;/div&gt;</summary>
		<author><name>Bech</name></author>
		
	</entry>
</feed>