python 파서인 Reparse 문제입니다.
글쓴이: ozon1000 / 작성시간: 월, 2017/04/10 - 8:38오후
파이썬 파서를 하나 제작하려고 공부하고 있습니다.
문제는 제가 파서의 근처에 근처도 못가본 것이 큰 문제입니다.
타겟이 python3라 Reparse라는 프로그램을 목표로 공부하려고 하는데,
도대체 예제를 봐도 어떻게 사용할 수 있는지 이것으로 무엇을 제작할 수 있는지 그림이 그려지지 않아 매우 당황스럽습니다.
혹시 python parser를 개발해 보신 적 있으신 선생님이 계시면
그나마 조금 편하게 공부할 수 있게 지식을 조금만 나누어 주셨으면 좋겠습니다.
읽어주셔서 감사합니다.
관련 url도 댓글로 달아주시면 정말정말 감사하겠습니다.
예제 위주로 따라 해보려고 했는데도,, 도대체 무슨말인지 이해하기 어려웠습니다.
감사합니다.
Forums:
ozon1000님께서 이전에 하셨던 질문에 비추어
ozon1000님께서 이전에 하셨던 질문에 비추어 보면 아마도 파이썬을 파싱하기를 원하시는 것 같습니다. 그런데 선택하신 Reparse 라는 도구를 잠시 살펴봤는데 별로 적합하지 않은 도구인 것 같습니다. 파이썬이나 다른 대부분의 프로그래밍 언어는 context-free grammar를 사용합니다. 하지만 제가 살펴본 바로는 Reparse는 regular expression에 기반한 말하자면 매우 제한적인 파서입니다. context-free grammar가 무엇인지 어째서 regular expression 에 기반한 파서는 context-free grammar를 파싱할 수 없는 지 등등은 알면 좋지만 몰라도 일단 원하시는 바를 (파이썬 파싱) 달성하는 데에는 문제가 없습니다. 하지만 도구는 바꿔야할 것 같습니다.
프로그래밍 언어의 문법을 기술하기 위해 널리 쓰이는 방법으로 BNF 또는 EBNF라는 것이 있습니다. 문법을 기술하기 위한 일종의 언어이지요. 웹에서 자료를 많이 찾으실 수 있을 겁니다. 찬찬히 살펴보시면 어렵지 않습니다. 그리고 파이썬 문법의 (E)BNF 표현은 당연히도 이미 있습니다. 파이썬이 처음 만들어지던 그 순간부터 있었을 겁니다 (아마도). 검색해보니 바로 나오네요 (https://docs.python.org/3/reference/grammar.html).
그러면 이제 이 문법 명세를 사용해서 "파이썬으로 작성된 파이썬 파서"를 만들어주는 parser generator를 하나 구해서 사용하시면 됩니다. 매우 다양한 parser generator가 있습니다. BNF나 EBNF를 그대로 사용할 수 있는 것들도 있고 약간씩 바꿔줘야하는 것들도 있습니다. 저도 파이썬으로 파싱 작업을 해본 적은 없어서 이미 알고 있는 도구는 없습니다만 잠깐 검색해본 결과 저라면 일단 pyparsing (http://pyparsing.wikispaces.com/)을 사용해보겠습니다. ANTLR 같은 것이 최근에 많이 쓰이는 도구이지만 오로지 파이썬에만 기반한 도구를 사용하는 것이 ozon1000님께서 더 편하지 않을까 하는 생각이 들어서 골라봤습니다. 이 도구에 대한 책도 있네요. 그리고 파이썬2를 파싱하는 예제도 포함하고 있군요.(http://pyparsing.wikispaces.com/Examples). 파이썬3 예제는 없는 것 같습니다. 우선은 예제들 중 간단한 계산기 같은 것을 보고 익히시는 것이 좋을 것 같습니다. 원칙적으로 계산기나 파이썬이나 다를 것 없습니다. 약간 더 복잡해질 뿐이지 근본적으로 다른 것은 없습니다.
일단 무엇을 가지고 시작하면 좋을 지 추천을 드렸습니다. 파싱은 이미 잘 만들어진 (수학적인) 이론이 있고 좋은 도구도 많은 분야입니다. 기초부터 하나 하나 탄탄하게 공부를 하시고 싶으시면 자료는 많습니다. 책도 많고 웹에도 자료가 많습니다. 불행히도 우리 말로 된 자료가 충분한 지는 잘 모르겠습니다만... 여하튼 그렇게 공부를 하셔도 좋고 아니면 원하시는 바를 달성하기 위해서는 그냥 도구들을 잘 사용할 수 있는 정도만 공부하셔도 충분합니다. 일단 pyparsing 책에서부터 시작하셔도 좋을 것 같습니다. 짧은 책인 것 같습니다.
이렇게
이렇게 감동적인(?) 답글은 처음본것 같습니다.
한글자 한글자 꼼꼼하게 읽어보게 되는 답글이었습니다.
감사드립니다.
댓글 달기