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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top