pycparser
https://github.com/albertz/pycparser
Python으로 작성된 C 파서 및 통역사. 자동 CTypes 인터페이스 생성기도 포함되어 있습니다.
C 문법보다 느슨합니다. 즉, 일반적으로 C 언어의 슈퍼 세트를 지원해야합니다.
언어 사양을 엄격히 준수하지 않고 실제 소스 코드에 반복하여 파서를 개선했기 때문에이 시점에서 일부 지원 중 일부는 약간 불완전하거나 잘못 될 수 있습니다.
비슷한 프로젝트
Parsers / ctypes 인터페이스 생성기 :
- Eli Bendersky의 Pycparser. 순수한 파이썬으로 C99 파서를 완료하십시오. Python Lex-YACC (Ply)에 따라 다릅니다. (아직 테스트하지 않았습니다. 가장 완전하고 가장 전문적인 프로젝트 인 것 같습니다. C 통역사를 원하지 않는다면 아마도 이것은 아마도 당신이 사용해야 할 프로젝트 일 것입니다.)
- pyclibrary (Github Fork). 상당히 느리고 나에게 잘 작동하지 않았습니다.
- Ctypesgen. LEX+YACC도 사용합니다.
- Codegen. GCC-XML을 사용합니다. 그러한 aproach의 단점에 대해서는 아래를 참조하십시오.
통역사 :
- Cinterpreter. 파이썬.
- 고린도. 파이썬에는 없습니다. 아마도 가장 유명한 것일 것입니다.
- ch. 파이썬에는 없습니다. 실제로 무료가 아닙니다.
- UPS 디버거. 파이썬에는 없습니다.
- 피코. 파이썬에는 없습니다. "매우 작은 C 통역사."
- bic. 파이썬에는 없습니다.
왜이 프로젝트인가?
- 더 유연합니다. 손으로 작성된 구문 분석기가 특정 레벨의 구문 분석 파이프에서 작업을 수행하는 것이 훨씬 쉽습니다.
- 나는 최종 사용자 쪽에서 쉽게 실행할 수있는 자체 포함 코드를 원했습니다. 따라서 최종 사용자는 LIB와 해당 헤더를 업데이트 할 수 있으며이 Python Lib을 사용하는 일부 응용 프로그램은 업데이트 된 LIB를 자동으로 사용합니다. CTYPES 인터페이스를 정적으로 생성 한 경우 (일부 GCC-XML 기반 도구를 통해) 불가능합니다.
- PYSDL을 구현하고 싶었고 SDL 헤더를 손으로 번역하고 싶지 않았습니다. 또한 기존 도구를 사용하여 나중에 작업을 추가로 유지하지 않기 위해이 작업을 수행하고 싶지 않았습니다. 추가 정보는 프로젝트를 참조하십시오.
- 이 기능은 다른 많은 C 라이브러리에서 유사하게 사용할 수 있습니다.
- 나 자신을위한 도전. 재미를 위해. :)
예
- pysdl. 또한 자동 CTYPES 래퍼를 사용하여 파이썬 모듈에 맵핑합니다.
- Pycpython. python에서 cpython을 해석하십시오.
- pylua. 파이썬에서 Lua를 해석하십시오.
또한 테스트/test_interpreter. {c, py} 'Hello World'예제를 참조하십시오.
또한 ./demos/interactive_interpreter.py --debug 사용해보십시오.
현재 상태
- 많은 간단한 C 프로그램은 지금 구문 분석하고 올바르게 해석해야합니다.
- 기능 포인터 유형이 잘못 처리되었다고 확신합니다. 예 :
typedef void f(); 및 typedef void (*f)(); 지금은 동일합니다. cpre3_parse_typedef 참조 하고이 문제를 해결하려면 테스트를 수행하십시오. - 표준 C 라이브러리의 많은 기능은 여전히 누락되었습니다.
- 몇 가지 버그가있을 수 있습니다. :)
- C ++는 아직 지원되지 않습니다. :)
- 코드 스타일은 많은 곳에서 PEP8 및 표준 파이썬 컨벤션을 준수하지 않습니다. 또한 단일 파일에서 너무 많이 성장 했으므로 재구성해야 할 것입니다. 나는 이것을 천천히 고치고있다.
통역사는 어떻게 작동합니까?
이것은 아마도 약간 드문 일입니다. 우리는 ctypes 를 통해 가장 중요한 표준 C 라이브러리 기능을 기본 LIBC에 직접 래핑합니다. 구문 분석 된 C 코드를 동등한 Python AST ( ast )로 변환하여 ctypes 를 많이 사용합니다. 그런 다음이 생성 된 파이썬 코드를 실행합니다. 그러나 우리는 또한 그것을 버릴 수 있습니다. 따라서 C 코드를 동등한 Python 프로그램으로 컴파일 할 수 있습니다.

--- Albert Zeyer, http://www.az2000.de