이 문서는 지원되지 않는 버전의 젠 토토을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 : 문서 : 17 : 50.3. 파서 스테이지버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

43.3. 파서 스테이지

Parser Stage두 가지로 구성됩니다 부분품:

  • the파서정의gram.yandscan.lUNIX 도구를 사용하여 구축되었습니다YACCandlex.

  • the변환 과정데이터 구조에 대한 수정 및 증강 파서에 의해 반환.

43.3.1. 파서

파서는 쿼리 문자열을 확인해야합니다 ( 유효한 구문에 대한 일반 ASCII 텍스트). 구문이 올바른 경우 aParse Tree가 구축되어 건조되었습니다 뒤쪽에; 그렇지 않으면 오류가 반환됩니다. 파서와 렉서는 잘 알려진 UNIX 도구를 사용하여 구현YACCandlex.

theLexer파일에 정의되어 있습니다scan.l인식식별자, TheSQL 키워드등. 모든 키 단어 또는 발견 된 식별자, a토큰IS 파서에게 생성되고 건네 준다.

파서는 파일에 정의되어 있습니다gram.y세트로 구성문법 규칙행동규칙이있을 때마다 실행됩니다 해고. 동작 코드 (실제로 C 코드)는 다음과 같습니다. 구문 분석 트리를 구축하는 데 사용됩니다.

파일scan.lC 소스 파일scan.c프로그램lexandgram.ygram.c사용YACC. 이러한 변형 후 정상적인 C 컴파일러가 사용하여 파서. 생성 된 C 파일을 변경하지 마십시오. 다음에 덮어 쓸 것입니다lex또는YACC호출.

참고 :언급 된 변환 및 컴파일은 일반적으로를 사용하여 자동으로 수행됩니다.makefiles젠 토토소스 분포.

자세한 설명YACC또는 문법 규칙에 주어진 문법 규칙gram.y의 범위를 벗어납니다 이 논문. 다루는 많은 책과 문서가 있습니다lexYACC. 당신은 익숙해야합니다YACC공부를 시작하기 전에 에 주어진 문법gram.y그렇지 않으면 당신은 거기서 무슨 일이 일어나는지 이해하지 못할 것입니다.

43.3.2. 변환 과정

구식 단계는 고정 규칙 만 사용하여 구문 분석 트리를 만듭니다. SQL의 구문 구조에 대해. 그것은 아무것도 만들지 않습니다 시스템 카탈로그에서 조회하므로 가능성이 없습니다. 요청 된 작업의 세부 의미를 이해하십시오. 파서가 완료되면변환 과정나무를 손으로 가져갑니다 입력으로 구문 분석기로 돌아가서 의미 론적 어떤 테이블, 기능을 이해하는 데 필요한 해석 운영자는 쿼리에 의해 참조됩니다. 데이터 구조 이 정보를 나타내도록 만들어졌습니다.이 정보는입니다.쿼리 트리.

시맨틱 분석에서 원시 구문 분석을 분리하는 이유 그 시스템 카탈로그 조회는 거래, 우리는 거래를 시작하고 싶지 않습니다. 쿼리 문자열을 받으면 즉시. 생 파싱 단계는 트랜잭션 제어를 식별하기에 충분합니다 명령 (시작, 롤백등). 그리고 이것들은 올바르게 될 수 있습니다 더 이상의 분석없이 실행되었습니다. 일단 우리가 우리가 알고 있다면 실제 쿼리 처리 (예 :select또는업데이트), IT 우리가 아직 하나가 아닌 경우 거래를 시작해도 괜찮습니다. 그래야만 변환 프로세스를 호출 할 수 있습니다.

변환 프로세스에 의해 생성 된 쿼리 트리는 다음과 같습니다 구조적으로 대부분의 장소에서 원시 파라스 트리와 유사하지만 자세히 많은 차이가 있습니다. 예를 들어, AFUNCCALL구문 분석 트리의 노드가 나타납니다 함수 호출처럼 구문 적으로 보이는 것. 이것 둘 중 하나로 변형 될 수 있습니다funcexpr또는aggref참조 이름은 일반 기능이거나 집계 기능. 또한 실제 데이터에 대한 정보 열의 유형 및 표현 결과 결과가 쿼리에 추가됩니다. 나무.