4

私が特に興味を持っているのは、コード内の文法を不必要な手抜きのない通常のコードとして定義できることです。

IronPython を使用できることは承知しています。したくない。

アップデート:

私が探しているものをさらに説明するために、いくつかのサンプル pyparsing コードを含めています。これは、emacs のショートカット キーを従来の表記法に変換するための不完全なパーサーです。もちろん、この例は文字列関数で十分なほど小さいですが、pyparse のクリーンさと簡潔さを示すためのものです。

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 で文法を数行で簡単に記述できるようにしたいと考えています。

4

3 に答える 3

2

見てみましょう: Irony C# コードで文法を定義できます。

于 2009-09-22T13:04:03.077 に答える
2

NParsecを試すこともできますが、積極的に開発されていないようです。

于 2009-09-22T16:20:24.520 に答える
1

プロジェクト OSLO は、あと数年はリリースされず、過度に設計されたバージョンの pypars になる予定です。

于 2009-09-21T19:40:18.440 に答える