什么';对于.NET来说,最接近pyparsing的东西是什么?

什么';对于.NET来说,最接近pyparsing的东西是什么?,.net,parsing,pyparsing,.net,Parsing,Pyparsing,我特别感兴趣的是能够将代码中的语法定义为普通代码,而不需要任何不必要的粗糙 我知道我可以用IronPython。我不想 更新: 为了进一步解释我在寻找什么,我将包含一些示例pyparsing代码。这是一个不完整的解析器,用于将emacs快捷键转换为更传统的表示法。当然,这个例子足够小,字符串函数就足够了,但它只是为了展示pyparsing的简洁性和简洁性 from pyparsing import Literal, OneOrMore, Optional, Word, printables, r

我特别感兴趣的是能够将代码中的语法定义为普通代码,而不需要任何不必要的粗糙

我知道我可以用IronPython。我不想

更新:

为了进一步解释我在寻找什么,我将包含一些示例pyparsing代码。这是一个不完整的解析器,用于将emacs快捷键转换为更传统的表示法。当然,这个例子足够小,字符串函数就足够了,但它只是为了展示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

我希望能够在.NET中用几行代码轻松地编写语法。

奥斯陆项目,它将在未来几年内不会发布,并且将是pyparsing的过度设计版本。

看看:它允许您在c代码中定义语法。

您可以尝试,但它似乎不再被积极开发。

“pyparsing”似乎是Python特有的一个词。有没有一个更通用的编程术语来描述这种类型的动作?他的意思是一个好的语法库真正的程序员使用蝴蝶!这绝对是有帮助的。它比pyparsing复杂得多,但仍然很酷。它真正缺少的是一种指定解析操作的简单方法。语法规范几乎和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