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