Domanda

Quali Sono particolarmente interessa è la possibilità di definire la grammatica nel codice come codice ordinario senza alcun cruft inutili.

Sono consapevole che potrei utilizzare IronPython. Io non voglio.

UPDATE:

Per spiegare ulteriormente quello che sto cercando, ho incluso alcuni esempi di codice pyparsing. Questo è un parser incompleto per convertire emacs tasti scorciatoia notazione più convenzionale. Questo esempio è, ovviamente, abbastanza piccolo che funzioni stringa basterebbero, ma è solo per mostrare la pulizia e la concisione della 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

Mi piacerebbe essere in grado di scrivere grammatiche in .NET con la stessa facilità nel minor numero di righe.

È stato utile?

Soluzione

Date un'occhiata a: Ironia Esso consente di definire la grammatica nel codice C #

Altri suggerimenti

Si potrebbe provare a NParsec , ma sembra non essere attivamente sviluppato più.

Progetto OSLO, che non sarà rilasciato per un altro paio di anni, e sta per essere una versione over-ingegnerizzato di pyparsing.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top