¿Cuál es la cosa más cercana a pyparsing que existe para .NET?
Pregunta
Lo que me interesa especialmente es la capacidad de definir la gramática en el código como código ordinaria sin ningún cruft innecesaria.
Soy consciente de que podría utilizar IronPython. Yo no quiero.
ACTUALIZACIÓN:
Para explicar mejor lo que estoy buscando, estoy incluyendo algunos ejemplos de código pyparsing. Este es un programa de análisis incompleto para convertir emacs teclas de acceso directo a la notación más convencional. Este ejemplo es, por supuesto, lo suficientemente pequeño que serían suficientes funciones de cadena, pero es sólo para mostrar la limpieza y la concisión de 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
Me gustaría ser capaz de escribir gramáticas en .NET con tanta facilidad en tan pocas líneas.
Solución
Tome un vistazo a: Ironía Le permite definir la gramática en su código C #
Otros consejos
Usted podría intentar NParsec , pero parece no ser desarrollado activamente más.
Proyecto de Oslo, que no verá la luz durante unos cuantos años, y va a ser una versión más de la ingeniería de pyparsing.