문제

내가 특히 관심이있는 것은 불필요한 cruft없이 코드의 문법을 일반 코드로 정의하는 능력입니다.

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에 문법을 쓸 수 있기를 원합니다.

도움이 되었습니까?

해결책

보세요: 반어 C# 코드에서 문법을 정의 할 수 있습니다.

다른 팁

당신은 시도 할 수 있습니다 NPARSEC, 그러나 더 이상 적극적으로 개발되지 않은 것 같습니다.

몇 년 동안 출시되지 않을 프로젝트 오슬로 (Project Oslo).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top