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.

Était-ce utile?

La solution

Jetez un oeil à: Il vous Irony permet de définir la grammaire dans votre code C #

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top