2011-10-01 3 views
2

J'écris une petite application basée sur FParsec.Comment construire FParsec pour .NET Compact Framework?

Aujourd'hui, je cherche une opportunité de faire une version pour Compact Framework. Apparemment, il n'est pas si simple de construire des sources FParsec pour .NET CF. La bibliothèque FParsecCS a un code non sécurisé et quelques références aux types qui ne sont pas disponibles dans CF. A savoir, System.Collections.Generic.HashSet, System.Text.DecoderFallbackException, et plus encore.

Je me demande s'il existe un moyen de le construire. Évidemment, j'essaie de ne pas modifier le code car il serait difficile de le mettre à jour lorsque d'autres versions de FParsec seront disponibles.

Je ne me soucie pas vraiment de la performance. S'il y a un CharStream générique qui peut être utilisé à la place de celui que vous avez, ce serait tout à fait suffisant.

Nous vous remercions de votre aide.

+0

Vous pouvez utiliser l'implémentation HashSet de Mono. –

Répondre

3

Je n'ai aucune expérience avec .NET CF et n'ai jamais essayé de faire fonctionner FParsec dessus. Cependant, il existe une version Silverlight de FParsec, qui pourrait être un bon point de départ pour un port vers .NET CF. La version Silverlight s'appuie sur le LOW_TRUST version de FParsec, qui n'utilise aucun code "non sécurisé". Heureusement, la limitation de la taille du flux de la version LOW_TRUST ne sera pas un problème pour votre application.

La meilleure façon de traiter la dépendance HashSet est probablement de vous mettre en œuvre type simple possédez HashSet (basé sur un Dictionary) qui met en œuvre les quelques méthodes qui FParsec utilise en fait pour sa gestion des erreurs. Si le DecoderFallbackException n'est pas pris en charge, vous pouvez simplement commenter les gestionnaires d'exception respectifs.

Si vous suivez vos modifications avec HG, il ne devrait pas être difficile de fusionner dans les mises à jour de FParsec. En fonction de l'étendue des changements pour .NET CF, je pourrais également les inclure dans l'arbre source principal pour un autre symbole de compilateur conditionnel.

Questions connexes