"php 파서"는 템플릿 코드를 생성하거나 정적 분석을 위해 생성한 추상 구문 트리를 사용하는 데 사용됩니다. "php 파서"는 사용하기 쉬운 점을 고려하여 nikic에서 개발한 PHP 추상 구문 트리 구문 분석 도구입니다. 인터페이스와 간략한 구조, 완벽한 툴 체인 및 기타 여러 장점.
이 기사의 운영 환경: Windows 10 시스템, PHP 버전 8.1, Dell G3 컴퓨터
PHP 파서는 nikic에서 개발한 php 추상 구문 트리(AST) 파싱 도구입니다. PHP Parser는 사용하기 쉬운 인터페이스, 간단한 구조 및 완전한 도구 체인과 같은 많은 장점도 고려합니다. 엔지니어링에서는 일반적으로 PHP Paser를 사용하여 템플릿 코드를 생성하거나, 이를 통해 생성된 추상 구문 트리를 정적 분석에 사용합니다.
PHP Parser는 순수 PHP로 작성되었다는 점은 언급할 가치가 있습니다. PHP 프로그래머에게는 익숙한 언어를 사용하여 정적 분석을 수행할 수 있다는 점은 의심할 여지가 없습니다. 다른 소스 코드 처리가 편리합니다.
PHP는 동적 언어이고 성능이 높지 않기 때문에 PHP Parser를 사용하여 PHP 코드를 분석하면 성능이 저하됩니다. 다행히 코드 분석 시나리오에는 일반적으로 높은 성능 요구 사항이 없습니다.
PHP의 자체 token_get_all 함수는 Zend 엔진의 구문 분석기를 사용하여 소스 코드를 일련의 토큰으로 분할합니다. 이러한 토큰은 많은 코드 분석 및 처리 작업을 완료하는 데 사용할 수 있지만 토큰 구조가 너무 원시적이므로 탐색 및 작업이 간단합니다. 매우 불편합니다. 또한 token_get_all 분석 결과를 기반으로 유명한 코드 표준화 도구인 PHP CodeSniffer는 토큰에 대해 많은 처리를 수행하고 일련의 검색 및 순회 인터페이스를 제공하여 코드 분석을 더 쉽게 만듭니다.
PHP 파서는 PHP 코드에 해당하는 추상 구문 트리(AST 또는 추상 구문 트리) 구조를 생성하여 소스 코드 탐색 및 기타 작업을 크게 단순화할 수 있습니다.
PHP 파서의 파싱 결과 예
다음 PHP 코드의 경우:
<?php echo 'Hi', 'World';
파싱 후 생성된 트리 구조는 다음과 같습니다.
array( 0: Stmt_Echo( exprs: array( 0: Scalar_String( value: Hi ) 1: Scalar_String( value: World ) ) ) )
PHP 파서에서 생성된 구문 트리의 구조
작업을 더욱 단순화하기 위해 PHP 파서는 언어 노드(노드)를 그룹화합니다.
PhpParserNodeStmt는 반환 값이 없고 클래스 정의와 같은 표현식에 표시되지 않는 언어 구조를 포함하는 명령문 노드입니다. $var(PhpParserNodeExprVariable) 및 func()(PhpParserNodeExprFuncCall) 등과 같은 표현식에 나타날 수 있는 반환 값 및 언어 구조를 포함하는 표현식 노드
PhpParserNodeScalar(Scalar) 노드(예: 'string') (PhpParserNodeScalarString_), 0 ( PhpParserNodeScalarLNumber) 및 __FILE__ (PhpParserNodeScalarMagicConstFile) 등과 같은 매직 상수입니다. 또한 표현식 노드에서 모두 상속됩니다.
다음과 같은 기타 노드: 이름 노드(PhpParserNodeName) 및 매개변수 노드(PhpParserNodeArg)
PHP 키워드와 충돌하는 모든 노드 클래스 이름, 노드의 클래스 이름은 모두 PhpParserNodeScalarString_과 같이 _로 끝납니다.
PHP 파서는 무엇을 할 수 있나요?소스 코드를 추상 구문 트리로 간단히 구문 분석하는 것 외에도 다음 기능도 제공됩니다.
추상 구문 트리를 PHP 코드로 변환할 수 있는 코드 생성
추상 구문 트리와 XML 간의 변환
보기 쉬운 구문 트리 구조 내보내기
구문 트리 구조 탐색 및 수정을 위한 기본 클래스(노드 탐색자 및 노드 방문자)
네임스페이스 노드 방문자 지원
구문 트리 탐색을 사용하여 프로그램 분석 작성 가능 코드 문제. 코드 생성 및 구문 트리 구조 순회 수정과 같은 기능을 결합하여 코드 리팩토링 등을 자동화할 수 있습니다.
추천 학습: "
PHP 비디오 튜토리얼위 내용은 PHP 파서를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!