Frage

Was ich besonders interessiert, ist die Fähigkeit, die Grammatik im Code als normaler Code ohne unnötige cruft zu definieren.

Ich bin mir bewusst, ich Ironpython nutzen könnte. Ich will nicht zu.

UPDATE:

Um zu erklären, was ich suche, ich bin auch einige Beispiel-Code pyparsing. Dies ist ein unvollständiger Parser Emacs Shortcut-Tasten zu konventionelleren Notation zu konvertieren. Dieses Beispiel ist natürlich, klein genug, dass String-Funktionen ausreichen würden, aber es ist nur die Reinheit und Prägnanz pyparsing zu zeigen.

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

Ich möchte in der Lage sein, Grammatiken in .NET zu schreiben mit so viel Leichtigkeit in so wenigen Zeilen.

War es hilfreich?

Lösung

Schauen Sie sich auf: Irony Es Sie können Ihre Grammatik in C # -Code definieren

Andere Tipps

Sie könnten versuchen, NParsec , aber es scheint nicht aktiv entwickelt werden mehr.

Projekt OSLO, das nicht für ein paar Jahre veröffentlicht wird, und ist eine over-engineered Version von pyparsing sein wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top