2012-07-24 3 views
0

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 파일로 표현 될 수 있다면 또한

, 의견이 생각할 수도

답변

0

는 잘 모르겠어요 ... 라인의 끝에 나타날 수있다 (참조 http://code.google.com/p/rson/). RSON 형식 (및 관련 파서)은 JSON의 "읽기 가능"버전으로 개발되었습니다. 일부 프로젝트에서 파이썬 RSON 파서를 사용하고 있습니다.

이렇게 파일을 구문 분석하는 방법을 배우기 위해이 작업을 수행하는 경우 RSON 파서에서 정보를 수집 할 수 있습니다.

+0

형식을 DSL로 변환 할 수 있기를 원하므로 일반 마크 업 형식 경로를 사용하고 싶지 않습니다. –

+0

RSON 구문 분석기는 꽤 잘 작성된 것 같지만, "수동으로 작성"되어 있고 pyparsing을 사용하지 않습니다. 아이디어는 pyparsing을 사용하여 Python 코드가 DSL을위한 일종의 문서가되도록했습니다. –

관련 문제