파서 문법 엔진

Parser Grammar Engine

PGE(Parser Grammar Engine, 원래 Parrow Grammar Engine)는 [1]Parrow 가상 머신의 Raku 규칙용 컴파일러이자 런타임입니다.PGE는 이러한 규칙을 사용하여 구문 분석식 문법을 Parrow 바이트 코드로 변환합니다.따라서 대부분의 가상 시스템 및 런타임과 달리 정규식을 보조 내부 형식으로 저장하고 런타임에 정규식 엔진에 의해 해석되는 프로그램으로 규칙을 컴파일합니다.PGE에 의해 사용되는 규칙 형식은 정규 표현과 대부분형식 문법을 표현할 수 있으며, 따라서 Parrow의 모든 프런트 엔드 언어에 대한 컴파일러 체인의 첫 번째 링크를 형성합니다.

실행 시 PGE에 의해 생성된 바이트코드는 입력규칙에 설명된 대로 텍스트를 해석하여 해석 트리를 생성합니다.구문 분석 트리는 직접 조작하거나 Parrow 컴파일러 툴체인의 다음 단계로 공급하여 코드 생성을 수행할 수 있습니다(문법이 프로그래밍 언어를 기술하는 경우).

역사

원래 이름은 P6GE이고 C로 쓰여져 있던 PGE는 2004년 11월에 처음 출시된 지 얼마 되지 않아 네이티브 Parrow로 번역되어 이름이 변경되었습니다.저자는 패트릭 R.미쇼.[2]PGE는 Parrow 위에 컴파일러를 구현하는 데 필요한 작업량을 줄이기 위해 작성되었습니다.현재 Pugs 개발에서는 더 [3]이상 PCR이라는 네이티브 엔진을 선호하는 기본 규칙 백엔드로 PGE를 사용하지 않지만 Perl 6이 쉽게 셀프호스트할 수 있도록 하기 위해 작성되었습니다.

내부

PGE는 다음 3가지 스타일의 해석을 조합합니다.

  • 라쿠 규칙
  • 연산자 우선 순위 분석기
  • 커스텀 해석 서브루틴

프라이머리 형식은 Raku 규칙입니다.따라서 추가 전용 문법의 경우 PGE 규칙은 다음과 같습니다.

 규칙 용어 { number > \ ( < expr > \ ) } 규칙 번호 { \d+ } 규칙 expr { < term > ( ' + ' < term > )* }

연산자 precedence 파서를 사용하면 다음과 같이 연산자 테이블을 Perl 6 규칙 스타일의 파서로 직접 구축하여 사용할 수 있습니다.

 규칙 expr선택 가능 {... } 규칙 용어 {number > \(<expr > \) } 규칙 번호 {\d+} proto term: is precedence =')이 구문 분석(&term) {...} proto infix:+ is looser term:' {...} {...}}

이것은 단순한 덧셈만의 문법을 정의하는 것과 같은 목적을 달성하지만, Raku 스타일의 정규식/규칙을 조합하여 정의한다.term그리고.number다른 모든 것을 선택할 수 있는 교대제도 있습니다.

코드 생성

PGE는 규칙에 의해 기술된 문법을 해석하는 코드를 출력하여 런타임에 코드에서 발견된 단순한 문법 및 정규 표현을 처리하기 위해 사용할 수 있지만, 그 주된 목적은 고급 언어의 해석입니다.

Parrow 컴파일러 툴체인은 여러 부분으로 나뉘어져 있으며, 그 중 PGE가 첫 번째 부분입니다.PGE는 소스 코드를 해석 트리로 변환합니다.다음으로 Tree Grammar Engine(TGE)은 이들을 Parrow Abstract Syntax Tree(PAST)로 변환합니다.두 번째 TGE 패스는 PAST를 PART Opcode Syntax Tree(POST)로 변환하여 실행 가능한 바이트 코드로 직접 변환할 수 있습니다.

Pge-overview.svg

레퍼런스

  1. ^ Michaud, Patrick R. (2004-11-22). "Parrot Grammar Engine (PGE)". Archived from the original on 2005-12-20.
  2. ^ Michaud, Patrick R. (2004-11-08). "First public release of grammar engine".
  3. ^ Agent Zhang (2006-09-17). "PCR replaces PGE in Pugs".

외부 링크