PHP로 작성된 괜찮은 PHP 파서는 없습니까?
저는 PHP 코드를 조작하고 분석하는 일을 많이 하고 있습니다.보통은 토큰라이저를 사용합니다.대부분의 어플리케이션에서는 이 정도면 충분합니다.그러나 때로는 렉서를 사용한 구문 분석이 충분히 신뢰할 수 없는 경우가 있습니다(분명히).
그래서 PHP로 작성된 PHP 파서를 찾고 있습니다.hnw/PhpParser와 kumatch/stagehand-php-parser를 찾았습니다.둘 다 zend_language_parser.y를 C 대신 PHP를 사용하여 .y 파일로 자동 변환함으로써 생성됩니다(그 후 LALR(1) 파서로 컴파일됩니다).그러나 이 자동 변환은 사용할 수 없습니다.
PHP로 작성된 괜찮은 PHP 파서가 있나요? (PHP 5.2용과 5.3용 파서가 필요합니다.)하지만 그 중 한 가지만이 좋은 출발점이 될 것입니다.)
여기서 완전하고 안정적인 파서를 찾지 못하자 내가 직접 파서를 쓰기로 했다.결과는 다음과 같습니다.
PHP-파서: PHP로 작성된 PHP 파서
이 프로젝트는 PHP 5.2와 PHP 8.1 사이의 모든 PHP 버전에 대해 작성된 해석 코드를 지원합니다.
파서 자체 외에도 라이브러리는 다음과 같은 관련 구성 요소를 제공합니다.
- AST를 PHP로 컴파일("예쁜 인쇄")
- AST 통과 및 변경을 위한 인프라
- XML과의 시리얼화(및 사람이 읽을 수 있는 형태로 덤프)
- AST를 JSON으로 변환하여 되돌립니다.
- 이름 순서(에일리어스 등)의 해결
사용 방법의 개요에 대해서는, 메뉴얼의 「기본 컴포넌트의 사용」섹션을 참조해 주세요.
이는 순수한 PHP 제약에 위배되기 때문에 좋은 옵션은 아니지만 다음과 같습니다.
얼마 전 php-internals 사람들은 파싱 테크놀로지로 Lemon으로 바꾸기로 결정했다.PHP svn repo에 필요한 변경을 포함하는 분기가 있습니다.
그들은 레몬 용액이 10~15% 느리기 때문에 이것을 계속하지 않기로 결정했다.하지만, 그 가지는 아직 거기에 있습니다.
오래된 Lemon 파서가 PHP 확장자로 쓰여져 있습니다.당신은 그것을 가지고 일할 수 있을지도 모릅니다.이 PEAR 패키지도 있습니다.(PGN에 관한 이 블로그 투고를 통해) 또 다른 레몬 패키지도 있습니다.
물론 작동한다고 해도 데이터로 무엇을 할지, 데이터가 어떻게 생겼는지조차 확신할 수 없습니다.
또 다른 이상한 옵션은 Java의 PHP 구현인 Quercus를 훔쳐보는 것입니다.파서를 썼을 거야 조사할 가치가 있을지도 몰라
메트릭 도구 PHP Depend에는 PHP 소스에서 완전히 PHP로 작성된 AST를 생성하기 위한 코드가 포함되어 있습니다.단, 토큰화에 PHP 고유의 token_get_all을 사용합니다.
소스 코드는 github에서 구할 수 있습니다.https://github.com/manuelpichler/pdepend/tree/master/src/main/php/PHP/Depend
AST의 수식 등 일부에 대한 실장은 제가 마지막으로 확인한 바로는 아직 완료되지 않았지만, 그 저자에 따르면 그것이 목표입니다.
음, 이것은 PHP에는 없지만, 이런 종류의 기계를 만드는 것은 어렵고, PHP는 언어 처리 작업에 특별히 적합하지 않습니다.
PHP 프런트 엔드는 완전한 PHP 4.x 및 5.x (EDIT 9/2016: 현재 PHP 7을 취급하고 있음)파싱 기능을 제공하며, 완전한 PHP 문법의 모든 세부사항을 포함한 AST를 자동으로 빌드하여 AST에서 컴파일 가능한 소스 텍스트를 생성할 수 있습니다.이것은 이상한 문자열 리터럴, 캡처된 댓글, 기수 포함 숫자 등 모든 엉터리 세부사항을 고려할 때 들리는 것보다 어렵습니다.
그러나 AST로는 충분하지 않습니다(토큰으로는 충분하지 않다는 것은 이미 알고 있습니다).
DMS Software Reengineering Toolkit이 구축된 기반인 DMS Software Reengineering Toolkit은 AST의 분석 및 중재적 변환을 지원합니다.또, 대량의 파일을 동시에 읽어내, PHP 파일 전체의 분석과 변환을 가능하게 합니다.
PHP에 대한 ANTLR 포트가 있습니다.http://code.google.com/p/antlrphpruntime/w/list
버려졌지만 아직 작동해야 할 것 같아요.
언급URL : https://stackoverflow.com/questions/5586358/any-decent-php-parser-written-in-php
'source' 카테고리의 다른 글
오류와 예외의 차이점은 무엇입니까? (0) | 2022.11.18 |
---|---|
캔 원 앵귤러JS 컨트롤러가 다른 컨트롤러를 호출합니까? (0) | 2022.11.18 |
사전을 값별로 정렬하려면 어떻게 해야 합니까? (0) | 2022.11.18 |
Java에서 파일을 수정일별로 정렬하는 가장 좋은 방법은 무엇입니까? (0) | 2022.11.18 |
최대 식별자 이름 길이를 늘리는 방법 (0) | 2022.11.18 |