code

PHP로 작성된 괜찮은 PHP 파서가 있습니까?

codestyles 2020. 10. 12. 07:32
반응형

PHP로 작성된 괜찮은 PHP 파서가 있습니까?


저는 PHP 코드를 조작하고 분석하는 작업을 많이합니다. 일반적으로 저는이를 위해 Tokenizer사용합니다 . 대부분의 응용 프로그램에서는 이것으로 충분합니다. 그러나 때로는 어휘 분석기를 사용하여 구문 분석하는 것이 (분명히) 충분히 신뢰할 수 없습니다.

따라서 PHP로 작성된 PHP 파서를 찾고 있습니다. hnw / PhpParserkumatch / stagehand-php-parser를 찾았 습니다 . 둘 다 zend_language_parser.y 를 C 대신 PHP를 사용하여 .y 파일로 자동 변환 한 다음 LALR (1) 파서로 컴파일합니다. 그러나이 자동 변환은 사용할 수 없습니다.

그렇다면 PHP로 작성된 괜찮은 PHP 파서가 있습니까? (PHP 5.2 용과 5.3 용이 필요합니다.하지만 그중 하나만 좋은 출발점이 될 것입니다.)


여기에서 완전하고 안정적인 파서를 찾지 못한 후 직접 작성하기로 결정했습니다. 결과는 다음과 같습니다.

PHP-Parser : PHP로 작성된 PHP 파서

이 프로젝트는 PHP 5.2와 PHP 7.1 사이의 모든 PHP 버전 용으로 작성된 구문 분석 코드를 지원합니다.

파서 자체 외에도 라이브러리는 몇 가지 관련 구성 요소를 제공합니다.

  • AST를 PHP로 다시 컴파일 ( "예쁜 인쇄")
  • AST 순회 및 변경을위한 인프라
  • XML과의 직렬화 (사람이 읽을 수있는 형식의 덤프 포함)
  • 네임 스페이스 이름 (별칭 등) 확인

사용 개요 설명서의 "기본 구성 요소 사용" 섹션을 참조하십시오 .


이것은 pure-PHP 제약을 위반하기 때문에 당신에게 좋은 선택이되지는 않을 것입니다.

얼마 전 php-internals 사람들은 파싱 ​​기술 Lemon 으로 전환하기로 결정했습니다 . 있다 PHP는 svn의 환매 특약에 지점 필요한 변경 사항이 포함되어 있습니다.

그들은 레몬 용액이 약 10-15 % 느리다는 것을 알았 기 때문에 이것을 계속하지 않기로 결정했습니다 . 그러나 지점은 여전히 ​​있습니다.

있다 오래된 레몬 파서 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 프런트 엔드는 하는 AST에서 컴파일 가능한 소스 텍스트를 생성 할 수 있습니다, 자동 파싱 (이제 PHP 7을 처리 EDIT 2,016분의 9) 전체 PHP 문법의 모든 세부 사항과 함께하는 AST를 구축 그것은 전체 PHP 4.x 및 5.x를 제공합니다. 이상한 문자열 리터럴, 캡처 된 주석, 기수 포함 숫자 등을 포함한 모든 세부 사항을 고려할 때 들리는 것보다 어렵습니다.

그러나 AST는 충분하지 않습니다 (토큰이 거의 충분하지 않다는 것을 이미 관찰했습니다).

구축 된 기반 인 DMS 소프트웨어 리엔지니어링 툴킷 은 AST의 분석 및 임의 변환을 지원합니다. 또한 분석 및 변환을 가능하게 한 번에 대량의 파일 세트를 읽 통해 PHP 파일.


ANTLR에서 PHP 로의 포트가 있습니다 : http://code.google.com/p/antlrphpruntime/w/list

버려졌지만 여전히 작동해야한다고 생각합니다.

참고 URL : https://stackoverflow.com/questions/5586358/any-decent-php-parser-written-in-php

반응형