Pergunta

O que eu estou especialmente interessado em é a capacidade de definir a gramática no código como código comum, sem nenhuma sujeira desnecessária.

Eu estou ciente que eu poderia usar IronPython. Eu não quero.

UPDATE:

Para explicar melhor o que estou procurando, estou incluindo um código de exemplo pyparsing. Este é um analisador incompleta para converter as teclas de atalho para emacs notação mais convencional. Este exemplo é, naturalmente, pequena o suficiente para que funções de cadeia seria suficiente, mas é apenas para mostrar a limpeza e concisão do 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

Eu gostaria de ser capaz de gramáticas escrita em .NET com tanta facilidade em tão poucas linhas.

Foi útil?

Solução

Dê uma olhada em: Ironia Ele permite que você defina sua gramática em seu código C #

Outras dicas

Você poderia tentar NParsec , mas parece não ser desenvolvido ativamente mais.

Project OSLO, que não será liberado por mais alguns anos, e vai ser uma versão mais de engenharia de pyparsing.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top