2014-01-29 3 views
1

매우 단순한 재귀 문법에 대한 추상 구문 트리를 추출합니다 (예 : , C 함수 호출 문). 문법을 다음과 같이 정의했습니다 :pyparsing을 사용하여 간단한 AST를 작성하는 방법

name = Word(srange("[a-z]"), srange("[a-zA-Z0-9_]")) 

func_args = Forward() 
func_call = (name + "(" + func_args + ZeroOrMore(Word(",") + func_args) + ")").setParseAction(create_node) 
func_args <<= (func_call | name) 

res = func_call.parseString("func1(func2(v1,func3(v2,v3)))", True) 

구문 분석은 괜찮지 만 AST를 생성하는 가장 좋은 방법은 없습니다. 내가 클래스 tree

func1 
    - func2 
     - v1 
     - func3 
      - v2 
      - v3 

가정하자 :이 예를 들어 문자열을 원하는 것은

이 AST입니다. 콜백 create_node이 첫 번째 func3(v2, v3)에 호출 될 때 외부 문이 구문 분석 될 때까지 및 하위 노드 v2v3 등을 생성해야합니다. 가장 좋은 방법은 무엇입니까? 고마워요

답변

1

예제 코드가 나에게 던져지는 동안 아래와 같이 토큰의 이름을 지정하려고 시도 했습니까? 그런 다음 구문 분석 결과에 dump()을 사용 하시겠습니까?

... 
func_call = (name + ...)('call') 
func_args <<= (func_call | name)('func') 
... 
print(res.dump()) 

이 코드를 적용해야 할 것입니다.하지만이 라인의 어딘가에 두려움이 있습니다.