Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

50.3. Giai đoạn soi kèo bóng đá truoctran#

TheGiai đoạn soi kèo bóng đá truoctranbao gồm hai phần:

  • Thesoi kèo bóng đá truoctranđược xác định tronggram.yScan.lđược xây dựng bằng công cụ UNIXBisonFlex.

  • TheQuy trình chuyển đổiCác 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 soi kèo bóng đá truoctran.

50.3.1. Trình soi kèo bóng đá truoctran#

Trình soi kèo bóng đá truoctran phải kiểm tra chuỗi truy vấn (đến dưới dạng văn bản đơn giản) cho cú pháp hợp lệ. Nếu cú ​​pháp đúng aparse Treeđược xây dựng và bàn giao; nếu không một lỗi được trả về. Trình soi kèo bóng đá truoctran và Lexer được triển khai bằng Công cụ UNIX nổi tiếngBisonFlex.

TheLexerđược xác định trong tệpScan.lvà chịu trách nhiệm nhận dạngĐịnh danh, TheSQL từ khóavv. Đối với mọi từ khóa hoặc định danh được tìm thấy, Amã thông báođược tạo và trao cho trình soi kèo bóng đá truoctran.

Trình soi kèo bóng đá truoctran được xác định trong tệpgram.yvà bao gồm một tập hợpQuy tắc ngữ soi kèo bóng đá truoctranActionđược thực thi bất cứ khi nào một quy tắc được sa thải. Mã của các hành động (thực sự là mã C) được sử dụng để xây dựng cây soi kèo bóng đá truoctran.

TệpScan.lđược chuyển đổi thành tệp nguồn CScan.cSử dụng chương trìnhFlexgram.yđược chuyển đổi thànhgram.cSử dụngBison13283_13476FlexhoặcBisonđược gọi.

Lưu ý

13635_13726MakefilesĐược vận chuyển vớiPostgreSQLsoi kèo bóng đá truoctran phối nguồn.

Một mô tả chi tiết vềBisonhoặc các quy tắc ngữ soi kèo bóng đá truoctran được đưa ra tronggram.ysẽ vượt quá phạm vi của hướng dẫn này. Có nhiều sách và tài liệu liên quan đếnFlexBison. Bạn nên quen thuộc với14223_14230Trước khi bạn bắt đầu nghiên cứu ngữ soi kèo bóng đá truoctran được đưa ra tronggram.yNếu không bạn sẽ không hiểu điều gì xảy ra ở đó.

50.3.2. Quá trình chuyển đổi#

Giai đoạn soi kèo bóng đá truoctran tạo một 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 thực hiện bất kỳ tra cứu nào trong các danh mục hệ thống, vì vậy 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 soi kèo bóng đá truoctran hoàn thành,Quy trình chuyển đổilấy cây được trình soi kèo bóng đá truoctran làm đầu vào và giải thích ngữ nghĩa cần thiết để hiểu bảng, chức năng và toán tử nào được tham chiếu bởi truy vấn. Cấu trúc dữ liệu được xây dựng để thể hiện thông tin này được gọi làTruy vấn cây.

Lý do tách soi kèo bóng đá truoctran thô với soi kèo bóng đá truoctran ngữ nghĩa là việc tra cứu danh mục hệ thống chỉ có thể được thực hiện trong một giao dịch và chúng tôi không muốn bắt đầu giao dịch ngay khi nhận được chuỗi truy vấn. Giai đoạn soi kèo bóng đá truoctran thô là đủ để xác định các lệnh điều khiển giao dịch (Bắt đầu, rollback, v.v.), và sau đó chúng có thể được thực hiện chính xác mà không cần soi kèo bóng đá truoctran thêm. 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), bắt đầu giao dịch là ổn 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 ra bởi quá trình chuyển đổi có cấu trúc tương tự như cây soi kèo bóng đá truoctran thô ở hầu hết các nơi, nhưng nó có nhiều sự khác biệt về chi tiết. Ví dụ: AfunccallNode in the Parse Tree đại diện cho một cái gì đó trông giống như một cuộc gọi chức năng. Điều này có thể được chuyển đổi thành mộtfuncexprhoặcAggrefNode tùy thuộc vào việc tên được tham chiếu hóa ra là hàm thông thường hay hàm tổng hợp. Ngoài ra, thông tin về các loại dữ liệu thực tế của các cột và kết quả biểu thức được thêm vào cây truy vấn.

Gửi hiệu chỉnh

Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớp Kinh nghiệm của bạn với tính năng cụ thể hoặc yêu cầu làm rõ thêm, Vui lòng sử dụngMẫu nàyĐể báo cáo vấn đề tài liệu.