그배트맨 토토 단계두 부분으로 구성:
그배트맨 토토다음에 정의됨gram.y그리고스캔.lUnix 도구를 사용하여 빌드됨들소그리고플렉스.
그변환 과정배트맨 토토가 반환한 데이터 구조를 수정하고 확장합니다.
배트맨 토토는 쿼리 문자열(일반 텍스트로 도착)에서 유효한 구문을 확인해야 합니다. 구문이 올바른 경우 a파싱 트리만들어서 돌려줍니다. 그렇지 않으면 오류가 반환됩니다. 배트맨 토토와 어휘 분석기는 잘 알려진 Unix 도구를 사용하여 구현됩니다.들소그리고플렉스.
그렉서파일에 정의되어 있습니다스캔.l인식을 담당합니다식별자, 그SQL 키워드기타. 발견된 모든 키워드 또는 식별자에 대해 a토큰생성되어 배트맨 토토에 전달됩니다.
배트맨 토토는 파일에 정의되어 있습니다.gram.y다음 세트로 구성됨문법 규칙그리고작업규칙이 실행될 때마다 실행됩니다. 작업 코드(실제로 C 코드)는 구문 분석 트리를 구축하는 데 사용됩니다.
파일스캔.lC 소스 파일로 변환됨scan.c프로그램 사용하기플렉스그리고gram.y다음으로 변환됨gram.c사용 중들소. 이러한 변환이 수행된 후 일반 C 컴파일러를 사용하여 배트맨 토토를 생성할 수 있습니다. 생성된 C 파일은 다음에 덮어쓰게 되므로 절대 변경하지 마세요.플렉스또는들소호출됩니다.
언급된 변환 및 컴파일은 일반적으로 다음을 사용하여 자동으로 수행됩니다.메이크파일다음과 함께 배송됨PostgreSQL소스 배포.
다음에 대한 자세한 설명들소또는 다음에 제공된 문법 규칙gram.y이 매뉴얼의 범위를 벗어납니다. 관련된 책과 문서가 많이 있습니다.플렉스그리고들소. 당신은 다음 사항에 대해 잘 알고 있어야 합니다.들소에 주어진 문법을 공부하기 전에gram.y그렇지 않으면 그곳에서 무슨 일이 일어나는지 이해하지 못할 것입니다.
배트맨 토토 단계는 SQL의 구문 구조에 대해 고정된 규칙만을 사용하여 구문 분석 트리를 생성합니다. 시스템 카탈로그에서 조회를 수행하지 않으므로 요청된 작업의 세부 의미를 이해할 가능성이 없습니다. 배트맨 토토가 완료된 후,변환 과정배트맨 토토가 전달한 트리를 입력으로 사용하고 쿼리에서 참조하는 테이블, 함수 및 연산자를 이해하는 데 필요한 의미론적 해석을 수행합니다. 이 정보를 나타내기 위해 구축된 데이터 구조를쿼리 트리.
원시 구문 분석과 의미 분석을 분리하는 이유는 시스템 카탈로그 조회가 트랜잭션 내에서만 수행될 수 있고 쿼리 문자열을 수신하자마자 트랜잭션을 즉시 시작하고 싶지 않기 때문입니다. 원시 구문 분석 단계는 트랜잭션 제어 명령을 식별하는 데 충분합니다(시작, 롤백, etc.), 그러면 추가 분석 없이 올바르게 실행될 수 있습니다. 실제 쿼리(예:선택또는업데이트), 아직 거래 중이 아닌 경우 거래를 시작해도 괜찮습니다. 그래야만 변환 프로세스가 호출될 수 있습니다.
변환 프로세스에 의해 생성된 쿼리 트리는 대부분의 경우 원시 구문 분석 트리와 구조적으로 유사하지만 세부적으로는 많은 차이점이 있습니다. 예를 들어,FuncCall16128_16260FuncExpr또는Aggref16340_16559
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.