대다수의 파서 라이브러리는 생성하는 코드에 관계없이 추상 구문 트리 (AST)를 생성합니다. 무엇이든 사용할 수 있습니다 (예 : pyparsing). AST에서 코드로 이동하려면 수동으로 함수를 작성해야 할 수도 있지만 재귀 적으로 수행하는 것은 매우 쉽습니다. 예를 들어 : [+, 4, [*, 'x', 5]]
:
def generate(ast):
if ast[0] == '+':
return generate(ast[1]) + " + " + generate(ast[2])
elif ast[0] == 'for':
return "for %s in %s:\n" % (ast[1], generate(ast[2])) + generate(ast[3])
...
모든 인수 나무 뒤에 바로 첫 번째 요소는 노드 이름에 대한 태그리스트의 인 AST 구조를 가정. 물론 파서를 직접 작성하지 않는 한 파서 라이브러리에서 사용하는 모든 것을 사용해야합니다.
파이썬 코드가 실제 코드 용어로 트리에서 심볼을 대체하는 것을 이해하지 못합니다.
당신은 루트 노드 아래에있는 모든 기호를 반복하기 쉬운 기능을 작성할 수
두 번째 생각에
def traverse_preorder(ast):
yield ast[0]
for arg in ast[1:]:
for x in traverse_preorder(arg):
yield x
, 변수 이름 ast
때문에 AST 모듈의 어쩌면 좋지 선택입니다.
감사합니다. 이제 어떻게해야 할 지 잘 알고 있습니다. – daybreak