Postgresql 8.1.23 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 41. Tổng quan về PostgreSQL Internals | Chuyển tiếp nhanh | Tiếp theo |
TheGiai đoạn tỷ lệ kèo bóng đábao gồm hai Phần:
Thetỷ lệ kèo bóng đáđược xác định tronggram.yvàScan.LĐược xây dựng bằng Công cụ UNIXyaccvàLex.
TheQuy trình chuyển đổikhông sửa đổi và tăng cường cho các cấu trúc dữ liệu được trả về bởi trình tỷ lệ kèo bóng đá.
Trình tỷ lệ kèo bóng đá phải kiểm tra chuỗi truy vấn (đến Văn bản ASCII đơn giản) cho cú pháp hợp lệ. Nếu cú pháp đúng aParse Treeđược xây dựng và trao tay mặt sau; nếu không một lỗi được trả về. Trình tỷ lệ kèo bóng đá và lexer là được triển khai bằng công cụ UNIX nổi tiếngyaccvàLex.
TheLexerđược xác định trong tệpScan.lvà chịu trách nhiệm cho nhận dạngĐịnh danh, TheTừ khóa SQLvv. Cho mọi từ khóa hoặc Định danh được tìm thấy, Amã thông báoIS được tạo và bàn giao cho trình tỷ lệ kèo bóng đá.
trình tỷ lệ kèo bóng đá được xác định trong tệpgram.yvà bao gồm một tập hợpQuy tắc ngữ tỷ lệ kèo bóng đávàActionđược thực thi bất cứ khi nào một quy tắc sa thải. Mã của các hành động (thực sự là mã c) là được sử dụng để xây dựng cây tỷ lệ kèo bóng đá.
TệpScan.Lđược chuyển đổi thành Tệp nguồn CScan.cSử dụng chương trìnhLexvàgram.yđược chuyển đổi thànhgram.csử dụngYACC. Sau khi những biến đổi này có Có thể sử dụng trình biên dịch C bình thường để tạo trình tỷ lệ kèo bóng đá. Không bao giờ thực hiện bất kỳ thay đổi nào đối với các tệp C được tạo vì chúng sẽ được ghi đè vào lần tớiLexhoặcyaccđược gọi.
Lưu ý:các biến đổi được đề cập và Các phần tổng hợp thường được thực hiện tự động bằng cách sử dụngMakefilesĐược vận chuyển vớiPostgreSQLNguồn tỷ lệ kèo bóng đá bổ.
Một mô tả chi tiết vềyacc13532_13569gram.ysẽ vượt quá phạm vi của Bài viết này. Có nhiều sách và tài liệu liên quan đếnLexvàYACC. Bạn nên quen thuộc vớiyaccTrước khi bạn bắt đầu học tập Ngữ tỷ lệ kèo bóng đá được đưa ra tronggram.yNếu không Bạn sẽ không hiểu những gì xảy ra ở đó.
Giai đoạn tỷ lệ kèo bóng đá tạo ra cây phân tích chỉ bằng cách sử dụng các quy tắc cố định về cấu trúc cú pháp của SQL. Nó không làm cho bất kỳ tra cứu trong các danh mục hệ thống, do đó không có khả năng Hiểu các ngữ nghĩa chi tiết của các hoạt động được yêu cầu. Sau khi trình tỷ lệ kèo bóng đá hoàn thành,Quy trình chuyển đổi14479_14755Truy vấn cây.
Lý do tách tỷ lệ kèo bóng đá thô khỏi tỷ lệ kèo bóng đá ngữ nghĩa Có thể thực hiện tra cứu danh mục hệ thống chỉ có thể được thực hiện trong giao dịch và chúng tôi không muốn bắt đầu một giao dịch Ngay lập tức khi nhận được một chuỗi truy vấn. tỷ lệ kèo bóng đá thô giai đoạn là đủ để xác định kiểm soát giao dịch lệnh (Bắt đầu, rollback, v.v.), và sau đó có thể được chính xác thực hiện mà không có bất kỳ tỷ lệ kèo bóng đá thêm. Một khi chúng ta biết rằng chúng ta đang xử lý một truy vấn thực tế (chẳng hạn nhưChọnhoặcCập nhật), nó Có thể bắt đầu một giao dịch nếu chúng tôi chưa có. Chỉ sau đó, quá trình chuyển đổi mới có thể được gọi.
Cây truy vấn được tạo bởi quy trình chuyển đổi là cấu trúc tương tự như cây tỷ lệ kèo bóng đá thô ở hầu hết các nơi, nhưng Nó có nhiều khác biệt về chi tiết. Ví dụ: AfunccallNode in the Parse Tree biểu thị Một cái gì đó trông giống như một cuộc gọi chức năng. Cái này có thể được chuyển đổi thành mộtfuncexprhoặcAggref15988_16223