theParser Stage두 부분으로 구성됩니다.
배트맨 토토정의gram.y
및scan.l
UNIX 도구를 사용하여 구축되었습니다Bison및Flex.
the변환 과정배트맨 토토가 반환 한 데이터 구조를 수정 및 확대합니다.
배트맨 토토는 유효한 구문에 대한 쿼리 문자열 (일반 텍스트로 도착)을 확인해야합니다. 구문이 올바른 경우 aParse Tree가 세워져 나눠졌다. 그렇지 않으면 오류가 반환됩니다. Parser와 Lexer는 잘 알려진 UNIX 도구를 사용하여 구현됩니다.Bison및Flex.
theLexer파일에 정의되어 있습니다scan.l
인식을 담당합니다식별자, TheSQL 키워드등. 발견 된 모든 키워드 또는 식별자에 대해 A토큰가 생성되어 배트맨 토토에게 건네집니다.
배트맨 토토는 파일에 정의되어 있습니다gram.y
| 세트로 구성문법 규칙and행동규칙이 해고 될 때마다 실행됩니다. 동작 코드 (실제로 C 코드)는 구문 분석 트리를 구축하는 데 사용됩니다.
파일scan.l
C 소스 파일로 변환scan.c
프로그램 사용Flexandgram.y
gram.c
사용Bison. 이러한 변환이 발생한 후 정상적인 C 컴파일러를 사용하여 배트맨 토토를 생성 할 수 있습니다. 다음에 덮어 쓰기 때문에 생성 된 C 파일을 변경하지 마십시오Flex또는Bison호출.
언급 된 변환 및 편집은 일반적으로를 사용하여 자동으로 수행됩니다.MakeFilesPostgreSQL소스 배포.
자세한 설명Bison또는 문법 규칙에 주어진 문법 규칙gram.y
이 매뉴얼의 범위를 벗어납니다. 다루는 많은 책과 문서가 있습니다Flex및Bison. 당신은 익숙해야합니다Bison에 주어진 문법을 공부하기 전에gram.y
그렇지 않으면 거기에서 무슨 일이 일어나는지 이해하지 못할 것입니다.
배트맨 토토 스테이지는 SQL의 구문 구조에 대한 고정 규칙 만 사용하여 구문 분석 트리를 만듭니다. 시스템 카탈로그에서 조회하지 않으므로 요청 된 작업의 상세한 의미를 이해할 가능성이 없습니다. 배트맨 토토가 완료되면변환 과정트리를 배트맨 토토에 의해 입력으로 전달하고 쿼리에서 참조되는 테이블, 함수 및 연산자를 이해하는 데 필요한 의미 론적 해석을 수행합니다. 이 정보를 표현하기 위해 구축 된 데이터 구조를라고합니다.쿼리 트리.
시맨틱 분석에서 원시 구문 분석을 분리하는 이유는 시스템 카탈로그 조회가 트랜잭션 내에서만 수행 될 수 있으며 쿼리 문자열을 수신하면 즉시 트랜잭션을 시작하지 않기 때문입니다. 원시 구문 분석 단계는 트랜잭션 제어 명령을 식별하기에 충분합니다 (시작
, 롤백
등), 그리고 더 이상의 분석없이 올바르게 실행할 수 있습니다. 우리가 실제 쿼리를 다루고 있다는 것을 알게되면 (예 :select
또는업데이트
), 우리가 아직 하나가 아닌 경우 거래를 시작해도 괜찮습니다. 그래야만 변환 프로세스를 호출 할 수 있습니다.
변환 프로세스에 의해 생성 된 쿼리 트리는 대부분의 장소에서 원시 구문 분석 트리와 구조적으로 유사하지만 자세한 차이가 있습니다. 예를 들어, Afunccall
구문 분석 노드는 함수 호출처럼 구문으로 보이는 것을 나타냅니다. 이것은 둘 중 하나로 변형 될 수 있습니다funcexpr
또는aggref
참조 이름이 일반 함수인지 집계 함수로 판명되는지에 따라 노드. 또한 쿼리 트리에 실제 데이터 유형 및 표현식 결과에 대한 정보가 추가됩니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면