Perl 핵심 소스 코드를 읽는 방법

5843 단어 perl
Perl 핵심 소스 코드를 읽는 방법을 설명합니다. Perl 5.36.0이 이 설명에서 사용됩니다.

이것은 원래 The way to read Perl core source codes | Perl ABC

주요 기능은 어디에 있습니까?


main 함수는 perl 명령의 진입점입니다.
perlmain.c 로 작성되었지만 Perl에는 이름이 perlmain.c 인 C 소스 코드가 없습니다.
perlmain.cMakefile.SH을 사용하여 ExtUtils::Miniperl에 의해 생성됩니다.

perl 명령줄 인수를 처리하는 곳은 어디입니까?



perl 명령줄 인수 처리는 perl_parse 함수에서 시작됩니다.
perl_parseperl.c에서 정의됩니다.

parse_body 함수로 이동합니다.
parse_bodyperl.c에서 정의됩니다.

명령줄 인수의 처리 논리를 볼 수 있습니다.

토크나이저는 어디에 있습니까?



다음은 토크나이저입니다. Perl 구문의 일부는 토큰으로 변환됩니다.

토큰화는 lex_start 함수에서 시작됩니다.
lex_starttoke.c에서 정의됩니다.

파서는 어디에 있습니까?



다음은 파서입니다. 파서는 토큰을 AST(추상 구문 트리)로 변환합니다.

구문 분석은 yyparse 함수에서 시작됩니다.
yyparseperly.c에서 정의됩니다.
perly.cperly.y을 사용하여 bison에서 생성됩니다.

Perl 데이터 구조는 어디에 있습니까?



스칼라 값SV의 유형과 해당 기능은 sv.hsv.c에 정의되어 있습니다.

배열의 유형AV과 해당 기능은 av.hav.c에 정의되어 있습니다.

해시 유형HV과 해당 기능은 hv.hhv.c에 정의되어 있습니다.

Perl은 어디에서 실행됩니까?



AST가 최적화된 후 Perl은 perl_run 함수에서 실행됩니다.
perl_runperl.c에서 정의됩니다.

run_body 함수로 이동합니다.
run_bodyperl.c에서 정의됩니다.

CALLRUNOPS 앞으로 이동합니다.
CALLRUNOPSperl.h에서 PL_runops로 정의됩니다.

또한 매크로는 다음과 같이 정의됩니다.
perl.h:#define CALLRUNOPS  PL_runops
embedvar.h:#define PL_runops            (vTHX->Irunops)
intrpvar.h:PERLVARI(I, runops,  runops_proc_t, RUNOPS_DEFAULT)
perl.h:# define RUNOPS_DEFAULT Perl_runops_standard
Perl_runops_standard 함수로 이동합니다.
Perl_runops_standardrun.c에서 정의됩니다.
OP 구조체의 멤버op_ppaddr가 호출됩니다.
op_ppaddr는 작업을 수행하기 위한 함수 포인터입니다.

연산자는 어디에 정의되어 있습니까?



연산자는 다음 소스에서 정의됩니다.
  • pp.c
  • pp_ctl.c
  • pp_hot.c
  • pp_pack.c
  • pp_sort.c
  • pp_sys.c
  • 좋은 웹페이지 즐겨찾기