2009-09-21 61 views
4

我特別感興趣的是能夠將代碼中的語法定義爲普通代碼,而不需要任何不必要的代碼。與.NET存在的pyparsing最接近的東西是什麼?

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

UPDATE:

爲了進一步解釋什麼是我要找的,我包括一些示例代碼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中編寫語法,就像在幾行中一樣簡單。

+0

「pyparsing」似乎是Python專用的一個詞。這種類型的行動是否有更通用的編程術語? – 2009-09-21 19:39:38

+0

他意味着一個很好的語法庫 – 2009-09-21 19:40:44

+0

真正的程序員使用蝴蝶! – 2009-09-22 13:13:00

回答

2

看看:Irony它允許你定義在C#代碼

+0

這絕對有幫助。它比pyparsing複雜得多,但仍然非常酷。 – 2009-09-22 15:29:06

+0

真正缺乏的是指定解析操作的簡單方法。語法規範幾乎與pyparsing一樣簡單,但是在告訴它該做什麼之後還有很多複雜的事情。 – 2009-09-22 15:39:21

+0

它仍然是創作者正在進行的工作。我相信他會歡迎你可能有的任何有趣的見解 – Toad 2009-09-22 18:37:24

1

項目OSLO,將不會再發布幾年,並且將成爲pyparsing的過度設計版本。

+0

哈哈我可以拿出這樣的答案,以及; ^) – Toad 2009-09-21 19:44:33

2

你的語法你可以嘗試NParsec,但它似乎並沒有被積極地開發了。

相關問題