Biên dịch câu truy vấn thời gian, thực thi trên hệ quản trị cơ sở dữ liệu - Pdf 17

Khoa học - kó thuậät

37

*
 TÓM TẮT:
Trong bài báo trước [9], chúng tôi đã
đề xuất một tiểu ngôn ngữ truy vấn có yếu tố
thời gian SubTSQL để truy vấn và thao tác dữ
liệu trên cơ sở dữ liệu thời gian. Bài báo này
chúng tôi sử dụng mã nguồn mở Lex và Yacc
để xây dựng một trình biên dòch, trình biên
dòch này làm công việc biên dòch câu truy
vấn thời gian thành câu SQL trong Oracle.
Một trình biên dòch như thế dễ dàng tạo lập
và giảm tải cho người lập trình.
 ABSTRACT:
In [9] we proposed the temporal
query sublanguage SubTSQL that can work
with temporal database. In this paper, we
present to use Open source code Lex and
Yacc that can support a complier so that the
complier is easily built and reducing the
working of programmer. This complier can
convert temporal queries to Oracle SQL
queries
1. GIỚI THIỆU
Thực tế, nhiều ứng dụng trên cơ sở

nghiệp. Để người dùng dễ dàng viết câu
truy vấn thời gian, cần xây dựng một trình
biên dòch có tính hệ thống, cũng như dễ
dàng mở rộng nó để biên dòch cho nhiều
dạng câu truy vấn khác. Nếu viết một trình
biên dòch như thế theo truyền thống, tốn
kém nhiều chi phí. Do vậy, sử dụng phần
mềm mã nguồn mở (PMMNM) là một
phương pháp khả thi để xây dựng trình biên
dòch. Hơn nữa, Thủ tướng chính phủ đã phê
duyệt Dự án tổng thể ứng dụng và phát
triển PMMNM tại Việt Nam giai đoạn
2004-2008 (Quyết đònh số 235/QĐ-TTg
ngày 02/02/2004), một trong những nội dung quan trọng của dự án là đẩy mạnh
BIÊN DỊCH CÂU TRUY VẤN THỜI GIAN,
THỰC THI TRÊN HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU

Phạm Văn Chung*

Khoa học - kó thuậät 38
việc ứng dụng các PMMNM trong triển
khai các ứng dụng công nghệ thông tin tại
các đơn vò, các tổ chức nhà nước cũng như
trong các doanh nghiệp [8].

2. XÂY DỰNG TRÌNH BIÊN
DỊCH DÙNG LEX VÀ YACC
Xây dựng trình biên dòch
Xây dựng một trình biên dòch theo
truyền thống (thông thường) thường tốn rất
nhiều công sức. Các bước cơ bản mà một
trình biên dòch thông thường phải thực hiện:
- Đọc chuỗi nhập và tách thành các
token.
- Dựa vào văn phạm và các token
tiến hành xây dựng cây phân tích cú pháp .
- Dựa vào cây phân tích cú pháp để
sinh ra mã.
Các bước xây dựng trình biên dòch
được minh họa như hình 1. Trong hình này,
chuỗi nhập sẽ được chuyển qua bộ phân
tích từ vựng để phân tích thành các token,
sau đó các token sẽ được chuyển sang bộ
phân tích cú pháp, tại đây dựa vào văn
phạm và các token, nó tiến hành xây dựng
cây phân tích cú pháp. Cuối cùng, dựa vào
cây phân tích cú pháp, bộ sinh mã sẽ sinh

Khoa học - kó thuậät

39 mã tương ứng. Bài báo sử dụng Lex và
Yacc là hai PMMNM khá thông dụng, qui
trình xây dựng trình biên dòch được trình
bày trong những phần sau .
Xây dựng trình biên dòch dùng
LEX và YACC
Lex tạo ra bộ phân tích từ vựng với
mã C/C++ hoặc Java. Lex dùng các mẫu
(pattern) để so khớp với chuỗi nhập và biến
đổi chuỗi nhập thành các token tương ứng.
Một token có một mã riêng biệt nhằm đơn
giản hoá công việc xử lý. Khi Lex nhận ra
các danh hiệu (id) trong dòng dữ liệu vào,
nó nhập chúng vào bảng danh biểu. Bảng
danh biểu chứa các thông tin khác như kiểu
dữ liệu (integer, real,…) và vò trí của biến
trong bộ nhớ. Một khi danh hiệu được sử
dụng, các thông tin liên quan đến nó được
truy xuất thông qua chỉ mục trong bảng
này.
Yacc tạo ra bộ phân tích cú pháp với
mã C/C++ hoặc Java. Yacc dùng các luật
văn phạm mà mỗi luật cho phép phân tích
các token từ kết quả của Lex và tạo ra cây

nghóa tương ứng. Hành động ngữ nghóa
đóng vai trò như một như bộ sinh mã. Quá
trình sinh mã có nhiều mức, có thể sinh mã
trung gian hoặc sinh ra một mã khác, mã
máy là cấp sinh mã thấp nhất, trong bài báo
này sẽ sinh ra mã trung gian là câu truy vấn
theo cú pháp của Oracle.
Xây dựng bộ phân tích từ vựng sử
dụng Lex có cấu trúc gồm 3 khối như hình 2:
%{
Các khai báo C (C declaration)
%%
Các luật Lex (Lex rules)
%%
Phần mã C (Additional C code)
Hình 2: Cấu trúc các khối cho Lex
Trong hình 2, khối khai báo C được
bắt đầu bởi %{ và kết thúc bởi }%; khối
luật Lex bắt đầu bởi %% và kết thúc bởi
%%; khối mã C viết cuối cùng.
Tương tự, xây dựng bộ phân tích cú
pháp sử dụng Yacc gồm 4 khối, các khối
được phân cách bởi các ký hiệu đóng mở
khối như hình 3, chi tiết về mỗi khối cho
mỗi cấu trúc, xem trong [1],[4],[7].
%{
Các khai báo C (C declarations)
%}
Các khai báo Yacc (Yacc declarations)
Khoa học - kó thuậät
Việc xây dựng các công cụ để kết
nối cơ sở dữ liệu trên Oracle bằng ngôn ngữ
C (C được coi như là một host language)
dựa vào các hàm OCI [6] có sẵn trong
Oracle là một giải pháp khả thi, vì chính
Oracle cũng sử dụng OCI để xây dựng một
số công cụ cho nó.
OCI có thư viện khá phong phú, cho
phép người dùng phát triển các ứng dụng
truy cập dữ liệu không thủ tục của SQL

language, để tạo ra các tập tin đối tượng,
các tập tin này tiếp tục được liên kết với thư
viện OCI để tạo ứng dụng, và ứng dụng có
khả năng truy xuất đến CSDL Oracle
server.
Các bước lập trình bằng OCI
Để kết nối CSDL dùng thư viện
OCI, cần thực hiện các bước sau: khởi tạo
các tiến trình, khởi tạo môi trường làm việc,
cấp phát các handle và các cấu trúc dữ liệu
cần thiết và kết nối với CSDL Oracle
server. Bắt đầu phiên làm việc, cấp phát
câu lệnh SQL và truy xuất dữ liệu. Kết thúc
phiên làm việc, người dùng ngắt kết nối với
Oracle server, khi đó cấu trúc dữ liệu và
các handle được giải phóng. Hoạt động của
OCI được minh họa trong hình 6. Trong
hình này, bước xử lý câu lệnh SQL và truy
xuất dữ liệu là khá quan trọng. Một trong
hầu hết những nhiệm vụ phổ biến của một
chương trình OCI là chấp nhận và xử lý câu
lệnh SQL, một khi các handle cần thiết đã
được cấp phát và đã kết nối được với
Oracle server. Đồng thời với mỗi bước trên,
OCI cung cấp các hàm cần thiết tương ứng
cho xử lý câu lệnh SQL, chi tiết coi trong
[6].

Câu truy vấn thời gian SubTSQL
tương tự như những câu SQL thông thường,
chỉ thêm một mệnh đề WHEN để thao tác
yếu tố thời gian, yếu tố thời gian là vò trí
tương đối giữa hai khoảng thời gian v_begin
và v_end và nó tuân theo những tân từ trong
[2], cụ thể là những tân từ: BEFORE,

AFTER, DURING, CONTAINS, OVERLAPS,
Khởi tạo tiến trình

Khởi tạo mơi trường

Định vị các handle

Kết nối với server

Gửi câu SQL và xử lý


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status