On peut spécifier les mêmes machines au moyen d'OpenGRM. Voici le fichier source exemple-6.grm.
export transducteur_1 = ( ("a":"x")|("b":"y")|("c":"z") )* ; export automate_4 = "a" "b"* "c"+ ; export result_compo_2 = automate_4 @ transducteur_1 ; export result_proj_2 = Project[ result_compo_2 , 'output' ] ; export result_proj_2_opt = Optimize[ result_proj_2 ];
Pour compiler ce fichier et extraire les résultats:
thraxmakedep exemple-6.grm make farextract exemple-6.far
On peut s'assurer que le résultat obtenu par les deux outils sont équivalents
au moyen de la commande fstequivalent
.
>fstequivalent result_proj.fst result_proj_2_opt echo $? 0 > fstequivalent result_proj.fst exemple-5.fst > echo $? 2
La commande fstequivalent
n'affiche pas de résultat mais elle renvoie 0
si les deux machines sont équivalentes et un autre entier si elles ne sont pas
équivalent. La commande echo $?
permet d'afficher le résultat renvoyé.
La commande thraxrewrite-tester
permet de tester la traduction de
chaîne par un transducteur.
> thraxrewrite-tester --far=exemple-6.far --rules=transducteur_1 Input string: abc Output string: xyz Input string: aabbcc Output string: xxyyzz Input string: aababaca *Output string: xxyxyxzx Input string: adb Rewrite failed. Input string: aaa Output string: xxx Input string: ^C