Quelle est la chose la plus proche de pyparsing qui existe pour .NET?
Question
Ce que je suis particulièrement intéressé est la possibilité de définir la grammaire dans le code code ordinaire sans cochonneries inutile.
Je suis conscient que je pourrais utiliser IronPython. Je ne veux pas.
Mise à jour:
Pour mieux expliquer ce que je cherche, je compris certains exemples de code pyparsing. Ceci est un analyseur incomplet pour convertir emacs touches de raccourci pour la notation plus conventionnelle. Cet exemple est, bien sûr, assez petit pour que les fonctions de chaîne suffiraient, mais il est juste de montrer la propreté et la concision du pyparsing.
from pyparsing import Literal, OneOrMore, Optional, Word, printables, replaceWith
CTRL_MODIFIER = Literal('C').setParseAction(replaceWith('Ctrl'))
META_MODIFIER = Literal('M').setParseAction(replaceWith('Alt'))
MODIFIER = CTRL_MODIFIER | META_MODIFIER # Note operator overloading
SEPARATOR = Literal('-').setParseAction(replaceWith('+'))
MODIFIER_LIST = OneOrMore(MODIFIER + SEPARATOR)
KEY = Word(printables) # This is a "word" composed of any number of printable characters.
# The lambda functions here just join the tokens with the literal string
# on which .join is called.
STROKE = (Optional(MODIFIER_LIST) + KEY).setParseAction(
lambda tokens: ' '.join([str(token) for token in tokens]))
BINDING = OneOrMore(STROKE).setParseAction(
lambda tokens: ', '.join([str(token) for token in tokens]))
# Example usage:
# >>> BINDING.transformString('M-/')
# Alt + /
# >>> BINDING.transformString('C-x C-f')
# Ctrl + x, Ctrl + f
# >>> BINDING.transformString('C-x f')
# Ctrl + x, f
# >>> BINDING.transformString('C-x M-c M-butterfly')
# Ctrl + x, Alt + c, Alt + butterfly
Je voudrais pouvoir écrire dans .NET grammaires avec autant d'aisance dans que quelques lignes.
Autres conseils
Vous pouvez essayer NParsec , mais il ne semble pas être activement développé plus.
Projet OSLO, qui ne sera pas libéré pendant quelques années, et va être une version sur-ingénierie de pyparsing.