有没有类似于pyparsing的.NET库?

4
我特别感兴趣的是在代码中定义语法的能力,而不需要任何不必要的繁琐操作。
我知道我可以使用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”似乎是一个专门用于Python的术语。那么有没有更通用的编程术语来描述这种类型的操作? - Neil N
他的意思是一个好的语法库。 - Matt Briggs
真正的程序员使用蝴蝶! - Pierre-Alain Vigeant
3个回答

2

请看:Irony。它允许您在C#代码中定义语法。


这绝对是有帮助的。它比pyparsing复杂得多,但仍然很酷。 - Instance Hunter
这个真正缺少的是一种简单的指定解析操作的方法。语法规范几乎和pyparsing一样简单,但在告诉它之后要做什么方面涉及了很多复杂性。 - Instance Hunter
它仍然是创建者正在进行的工作。我相信他会欢迎您可能拥有的任何酷派见解。 - Toad

2
你可以尝试使用 NParsec,但似乎它已经不再得到积极开发了。

1

OSLO项目还需要几年才能发布,它将是pyparsing的过度工程版本。


现在它很相关,哈哈。 - j4hangir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接