2014-07-15 3 views
2

y at-il un moyen d'obtenir ocammlex travailler avec plus de mots-clés? J'ai écrit un interprète et un analyseur pour la langue allemande, qui «compile» le texte allemand en images latex pour l'analyse de la langue. cela fonctionne très bien et est vraiment nouveau dans le monde de la linguistique. Merci à tous les développeurs d'ocaml, que vous pouvez utiliser à mauvais escient des outils comme ocamllex et menhir pour de telles choses. mais bientôt j'arriverai à la limite de l'ocammlex-automate par la taille du lexique, qu'il dira: "automate à grand".développez ocamllex pour un lexique plus grand

Je connais la solution avec les hashtables. Je n'ai pas essayé déjà, si cela résout le problème, mais quelqu'un sait-il, s'il est facile de changer un type de l'entier limitant ou similaire dans le code source ocamllex, que je peux l'utiliser sans changer mon code de programme ? à mon avis, cette erreur sur la taille de l'automatisation est inutilement stupide et gênant pour d'autres abus, donc je veux demander.

merci et passez une bonne journée.

Répondre

3

Je salue votre persistance à abuser des outils :-)

Je regardais à travers les sources pour ocamllex et je vois juste un endroit qui est de vérifier si l'automate devient trop grand.

lexgen.ml near line 780:

let do_alloc_cell used t = 
    let available = 
    try Hashtbl.find tag_cells t with Not_found -> Ints.empty in 
    try 
    Ints.choose (Ints.diff available used) 
    with 
    | Not_found -> 
     temp_pending := false ; 
     let n = !next_mem_cell in 
     if n >= 255 then raise Memory_overflow ; 
     Hashtbl.replace tag_cells t (Ints.add n available) ; 
     incr next_mem_cell ; 
     n 

Il y a juste une comparaison mystérieuse contre 255, sans commentaire expliquant les invariants etc. J'ai regardé par le code brièvement et a également examiné le module Lexing. Je ne vois pas de dépendances non évidentes sur la valeur 255. Il est donc possible que vous puissiez construire votre propre copie d'ocamllex avec une valeur plus grande ici. Vous pourriez essayer 1023 (un de moins que la puissance de 2).

Vous pourriez également vouloir décomposer et utiliser un outil différent. Je réalise que c'est ce que les autres vous disent probablement. Comme je le dis, j'admire votre persévérance.

+0

Oh, merci, je vais essayer ça! Quel outil proposeriez-vous? J'ai vu de l'inviroment lingustic, mais c'était vraiment lent et n'a pas les tâches complexes, que j'ai voulues. Avec ces outils ocaml, je peux analyser les plus horribles multi-clauses, qui sont inventées en allemand. - mais bien sûr, j'ai mis quelques symboles supplémentaires dans le texte. et les ocaml-tools le font en quelques secondes avec de grandes quantités de texte en opposition à ça, ce que j'ai vu jusqu'à présent. – user3734280

+0

Si vous testez simplement l'appartenance à un ensemble de chaînes, une table de hachage fonctionnera (comme vous l'avez dit). La raison pour laquelle Ocamllex est plus rapide est (peut-être) que la table est essentiellement pré-chargée pour vous. Vous pouvez donc trouver un moyen de construire une table de hachage * statique *. Si vous faites des choses plus intéressantes avec des automates à états finis, je ne sais pas vraiment quoi suggérer. J'ai cherché sur le net "ocaml fsa" et trouvé des outils de linguistique computationnelle dans OCaml. Mais peut-être que vous êtes le gars qui les écrit :-) –