Download miễn phí 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





Lex tạo ra bộ phân tích từ vựng với mã C/C++ hay 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.



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

Khoa học - kĩ thuậät
37
*
 TÓM TẮT:
Trong bài báo trước [9], chúng tui đã
đề 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 tui 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ở
dữ liệu (CSDL), mà các đối tượng trong
CSDL đó cần gắn thêm yếu tố thời gian [3].
Ví dụ: những ứng dụng như: ngân hàng, lịch
chuyến bay, quản lý kho hàng, hồ sơ bệnh
viện, thị trường chứng khoán v.v..., thì yếu
tố thời gian gắn với đối tượng
* Khoa Cơng nghệ Thơng tin, Trường Đại học Cơng nghiệp TP.
HCM
là một thực tế (đối tượng thay đổi dữ liệu
theo thời gian), cần có nó để tăng mức
phong phú và ngữ nghĩa của dữ liệu trong
CSDL [4], [5], [9].
Hiện tại, chưa có một hệ quản trị cơ
sở dữ liệu (HQTCSDL) nào hỗ trợ một cách
có hệ thống cho việc truy xuất hay thao tác
dữ liệu trên CSDL hướng thời gian. Ngay
cả Oracle 10g thì những câu lệnh có hỗ trợ
thời gian cũng khá phức tạp, người dùng
cần sử dụng nhiều hàm thư viện trong câu
truy vấn, hơn nữa để có một phiên bản
chính thức của Oracle 10g tốn chi phí rất
cao. Câu truy vấn có yếu tố thời gian, nếu
được viết theo cú pháp của một HQTCSDL
thì phức tạp (xem câu truy vấn trong mục
4.1), ngay cả đối với lập trình viên chuyên
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].
Bài báo này sử dụng PMMNM Lex
và Yacc để xây dựng bộ văn phạm cho tiểu
ngôn ngữ SubTSQL, mà chúng tui đã để
xuất trước đây, nó có cú pháp đơn giản gần
như câu truy vấn thông thường (chi tiết
SubTSQL xem trong [9]), và biên dịch câu
truy vấn SubTSQL, thành câu truy vấn theo
cú pháp của Oracle, sau đó dùng thư viện
OCI để kết nối HQTCSDL Oracle qua lập
trình trên C++. Rộng hơn, có thể truy vấn
dữ liệu theo thời gian trên bất kỳ
HQTCSDL nào, miễn là ngôn ngữ dùng để
lập trình cho phép kết nối đến HQTCSDL
đó. Phần còn lại của bài báo gồm có : Phần
2, xây dựng trình biên dịch bằng Lex và
Yacc. Phần 3, kết nối CSDL qua thư viện
OCI. Phần 4, Hiện thực biên dịch câu truy
vấn thời gian trên CSDL bệnh viện và cuối
cùng là kết luận trong phần 5.
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
id3
Chuỗi nhập a = b + c * d
Token id1 = id2 + id3 * id4
Bộ phân tích cú pháp
Cây cú pháp =
Bộ sinh mã
id1 +
*
id4
id2
Sinh mã load id3
mul id4
add id2
store id1
Hình 1. Các bước mà một trình biên dịch thơng thường thực hiện
Bộ phân tích từ vựng
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++ hay 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++ hay 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
phân tích cú pháp. Một cây phân tích cú
pháp áp đặt cấu trúc có thứ tự lên các
token. Việc tạo ra cây phân tích cú pháp là
một bước quan trọng mà một trình biên dịch
phải thực hiện như trong hình 1.
Quy trình xây dựng một trình biên
dịch sử dụng Lex và Yacc [1],[4] được
trình bày như hình 4. Giả sử, cần viết một
trình biên dịch có tên là bas. Dùng trình
sọan thảo (có thể là Parser Generator 2,
chép tự do trên Internet), trước tiên, xác
định tất cả các luật, kết hợp với các mẫu
và đặt chúng trong tập tin bas.l. cho Lex.
Tiếp đến viết các luật văn phạm vào tập
tin bas.y cho YACC.
Nhiệm vụ của Yacc là đọc các luật
văn phạm và định nghĩa các token, ghi
chúng vào tập tin bas.y và sinh ra bộ phân
tích cú pháp đặt vào tập tin y.tab.c, các
token cũng được định nghĩa trong tập tin
y.tab.h. Nhiệm vụ của Lex là đọc các mô
tả mẫu trong tập tin bas.l và các định nghĩa
token trong tập tin y.tab.h để tạo ra bộ
phân tích từ vựng ghi vào tập tin Lex.yy.c.
Cuối cùng, bộ phân tích từ vựng và bộ phân
tích cú pháp được biên dịch (dùng trình biên
dịch C/C++ hay Java), tạo ra tập tin thực
thi bas.exe.
Mỗi luật văn phạm khai báo trong
tập tin bas.y đều có một hành động ngữ
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 hay 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
 

Các chủ đề có liên quan khác

Top