pyparsing을 사용하여 간단한 파서를 작성하려고합니다. 다음과 같이pyparsing을 사용하여 구조화 된 텍스트 구성 파일의 문맥 파싱
내 예제 파일은 같습니다
# comment
# comment
name1 = value1
name2 = value2
example_list a
foo
bar
grp1 (
example_list2 aa
foo
bar
example_list3 bb
foo
bar
)
grp2 (
example_list4 x
foo
bar
example_list5 x
foo
bar
example_list6 x
foo
bar
)
내가 지금까지 함께 왔어요 파서는 다음과 같습니다
#!/usr/bin/python
import sys
from pyparsing import *
blank_line = lineStart + restOfLine
comment = Suppress("#") + restOfLine
alias = Word(alphas, alphanums)
name = Word(alphas, alphanums + "_")
value = Word(printables)
parameter = name + Suppress("=") + value
flag = Literal("*") | Literal("#") | Literal("!")
list_item = Optional(flag) + value
list = name + alias + lineEnd + OneOrMore(list_item) + blank_line
group = alias + Suppress("(") + lineEnd + OneOrMore(list) + lineStart + Suppress(")")
script = ZeroOrMore(Suppress(blank_line) | Suppress(comment) | parameter^list^group)
if __name__ == "__main__":
print script.parseFile(sys.argv[1])
그러나 물론이 작동하지 않습니다.
필자가 필요로하는 것은 파서가 등호 뒤에 문자열이 오면 그 다음에 단 하나의 문자열 만 기대할 수 있음을 알 수있는 방법입니다.
문자열에 대괄호가있는 경우 그룹을 시작했습니다.
그리고 두 개의 문자열이 있다면 우리는 목록을 시작했습니다.
어떻게하면됩니까? 당신이 당신의 파일 형식에 정착되어 있지만, 파일을 쉽게 RSON 파일로 표현 될 수 있다면 또한
, 의견이 생각할 수도
형식을 DSL로 변환 할 수 있기를 원하므로 일반 마크 업 형식 경로를 사용하고 싶지 않습니다. –
RSON 구문 분석기는 꽤 잘 작성된 것 같지만, "수동으로 작성"되어 있고 pyparsing을 사용하지 않습니다. 아이디어는 pyparsing을 사용하여 Python 코드가 DSL을위한 일종의 문서가되도록했습니다. –