Question

Ce que j'essaie de faire, c'est écrire un analyseur syntaxique simple pour le cas suivant en .NET

( [PART3]function1() AND [PART4]function7() ) OR [PART2]function90() 
  • [PART] indique l'emplacement d'évaluation (supposons qu'il s'agit d'un fichier texte énorme, PART sépare les fichiers texte en gros morceaux)
  • function() sont ma fonction documentée qui peut être appelée via cette requête. Renvoie true ou false
  • Sur la base de ce True/False opérateur et d'autres opérateurs, je souhaite combiner les résultats et renvoyer un dernier vrai ou faux de l'ensemble de l'entrée.

Quel est le meilleur moyen d'implémenter une telle chose dans .NET, y a-t-il une bibliothèque simple qui me permet de l'intégrer, ou dois-je simplement écrire un analyseur syntaxique simple puis le faire moi-même?

P.S. Je n'ai pas pu trouver un bon titre à la question.

Était-ce utile?

La solution

Ressemble à une condition simple, donc à mon avis, vous n’avez pas besoin du producteur de compilateur complet. Je peux vous suggérer d’examiner la annotation polonaise inversée , de l’utiliser pour décompresser vos conditions dans la pile et puis évaluez la pile résultante en utilisant une interprétation simple.

Autres conseils

Essayez Irony , même s'il n'est pas encore prêt pour le prime time, cela semble prometteur.

  

Irony est un kit de développement permettant d’implémenter les langages sur la plate-forme .NET. Il utilise la flexibilité et la puissance du langage c # et de .NET Framework 3.5 pour mettre en œuvre une technologie totalement nouvelle et rationalisée de construction de compilateur.   Contrairement à la plupart des solutions existantes de type yacc / lex, Irony n’utilise aucune génération de code de scanner ou d’analyseur à partir de spécifications grammaticales écrites dans un méta-langage spécialisé. Dans Irony, la grammaire de la langue cible est directement codée en c # à l'aide de la surcharge d'opérateur pour exprimer des constructions grammaticales. Les modules scanner et analyseur d'Irony utilisent la grammaire codée en tant que classe c # pour contrôler le processus d'analyse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top