2009-10-10 2 views
39

저는 문제가되는 도메인과 그 모든 것에 가까운 프로그래밍을하는 간단한 미니 언어 파서를 파이썬으로 작성했습니다.Python의 미니 언어

어쨌든, 저는 여기에있는 사람들이 어떻게 그렇게 할 것인지 궁금합니다. 파이썬에서 이런 종류의 일을하는 데 선호되는 방법은 무엇입니까?

필자는이 모든 분야가 파이썬에서 얼마나 쉬운지를 조사하고 있기 때문에 구체적인 정보를 제공하지 않을 것입니다.

입력 해 주셔서 감사합니다.

+1

유사에 : http://stackoverflow.com/questions/2945357/python-how-best-to-parse-a-simple-grammar –

답변

34

Pyparsing은 "작은 언어"를 작성하는 데 편리합니다. 나는 단순한 모험 게임 엔진을 작성하는데 presentation at PyCon'06을 주었는데, 그 언어는 해석되고 해석되는 게임 명령 세트 ("재고품", "검 검", "책 놓기"등)이었다. (소스 코드 here)

다른 pyparsing 기사에 대한 링크는 pyparsing wiki Publications page에서 찾을 수 있습니다.

+6

대한 파싱이 절대적으로 환상적인 라이브러리, 당신은 다음 구문 분석 할 수 최소한의 의식으로 무엇이든. 나는 그것을 사용하는 두 오후에 재귀 PHP 파서 (정적 코드 분석)를 만들었습니다. 나는 그것을 충분히 강력하게 추천 할 수 없었다. 문서를 읽는 데 약 2 시간이 걸립니다. –

20

PLY (Python Lex-Yacc)과 관련하여 제한적이지만 긍정적 인 경험이 있습니다. 그것은 단일 파이썬 클래스에서 Lex and Yacc 기능을 결합합니다. 그것을 확인하고 싶을 수도 있습니다.

동료 Stackoverflow'er Ned Batchelder에는 그의 웹 사이트에 사용 가능한 도구가 nice overview 있습니다. Python website에 대한 개요도 있습니다.

3

생산성을 높이기 위해 (항상 파서를 학습을 위해 수동으로 구현하려는 경우가 아니면) CocoPy (Tutorial)과 같은 파서 생성기를 사용하여 구문 분석기를 (올바른) 파서로 변환해야합니다.

나머지는 실제 인터프리터/컴파일러 (해석 할 스택 기반 바이트 코드 또는 메모리 AST 작성 후 평가)입니다.

4

파이썬은 훌륭하고 간단하고 확장 성이 뛰어난 언어로서 포괄적 인 파이썬 모듈을 만들고 코딩하는 것이 좋습니다.

내가 위의 내용을 입력하는 동안 PLY은 이미 언급되었습니다.

19

나는 funcparserlib을 권하고 싶습니다. 특히 작은 언어와 DSL을 구문 분석하기 위해 작성되었으며 pyparsing (웹 사이트의 통계 참조)보다 빠르고 작습니다. 최소한의 기능을 갖춘 프로그래머는 funcparserlib과 같아야합니다.

편집 : 그건 그렇고, 나는이 도서관의 저자이기 때문에 내 의견에 편향 될 수 있습니다.

+4

한 번에 나는 내 pyparsing 모듈을 홍보하거나 옹호하기를 꺼 렸습니다. 부끄러워하지 마십시오! 그리고 Ned Batchelder가 그의 파서 개요 페이지에'funcparserlib'을 추가했는지 확인하십시오. 이것은 파싱 라이브러리를 검색하는 많은 파이썬 사용자들에게 공통적이며 귀중한 자원입니다. – PaulMcG

+0

@Paul 조언을 주셔서 감사합니다. –

+0

매우 유용한 라이브러리로 보이며 코드는 매우 분명해 보입니다! 감사! –

3

지금 나 한테 물어 보면 파이썬 용 텍스트 라이브러리를 사용해 보겠다. 당신은 매우 쉽게 파이썬으로 dsl을 만들 수 있습니다! 장점은 당신을 위해 대서양 표준시를 만들고, 렉싱과 파싱을 결합한다는 것입니다.

http://igordejanovic.net/textX/