Tải bản đầy đủ (.ppt) (43 trang)

Đặc tả hình thức ngôn ngữ lập trình

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (168.09 KB, 43 trang )

Chương 2
ĐẶC TẢ HÌNH THỨC NGÔN NGỮ LẬP TRÌNH

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH

1


Nội dung
 Bộ từ vựng
 Cú pháp hình thức
 Ngữ nghĩa hình thức
 Chương trình dịch

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Đặc tả hình thức
 Ngôn ngữ lập trình là một hệ thống gồm các kí hiệu và các
qui tắc kết hợp các kí hiệu thành các cấu trúc có ý nghĩa.
Phần cú pháp qui định sự kết hợp của các kí hiệu, còn phần
ngữ nghĩa qui định ý nghĩa của mỗi sự kết hợp đó.
 Cú pháp và ngữ nghĩa của một ngôn ngữ lập trình được xác
định một cách hình thức bằng cách sử dụng một hệ thống
kí hiệu khác, thực chất cũng là một ngôn ngữ (siêu ngôn
ngữ).
 Siêu ngôn ngữ(meta language): là ngôn ngữ được sử dụng
để xác định cú pháp hoặc ngữ nghĩa của một ngôn ngữ lập
trình.
 Đặc tả hình thức của mỗi ngôn ngữ lập trình (Formal
description) cung cấp một mô tả chính xác về ngôn ngữ lập


trình đó.
Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Đặc tả hình thức
 Bộ từ vựng
 Cú pháp (Văn phạm)
 Ngữ nghĩa

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


2.1. Đặc tả từ vựng
 Ngôn ngữ là tập hợp chuỗi các ký tự từ alphabet (A…Z,
a…z, $,@,0..9, +,_,*,/,=,…)
 Token: Một token là một tập hợp các xâu kí tự có một
nghĩa xác định. Ví dụ: Các từ khoá, định danh, toán tử,
hằng, xâu kí tự, …
 Pattern: Pattern của một token là các qui tắc kết hợp các kí
tự để tạo nên token đó
 Lexeme: Là một chuỗi các kí tự thoả mãn pattern của một
token

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Token, Lexeme, pattern
Token

Lexeme


const
if
relation

const
if
<, <=, >, >=, =, <>

id

pi, count, d2

num
literal

3.1416, 0, 6.02E2
"computer"

Thông tin mô tả của pattern

const
if
< hoặc <= hoặc > hoặc >= hoặc =
hoặc <>
Một kí tự, tiếp theo là các kí tự hoặc
chữ số
Bất kì hằng số nào
Các kí tự nằm giữa " và " ngoại
trừ \"


Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Biểu thức chính quy (regular expression)
 Để biểu diễn các token người ta dùng biểu thức chính quy.
 Một biểu thức chính quy là một chuỗi miêu tả một bộ các chuỗi
khác, theo những quy tắc cú pháp nhất định
 BTCQ có thể hiểu như là một ngôn ngữ nhỏ dùng cho mục
đích: để tìm một chuỗi con trong biểu thức chuỗi lớn
 VD: email
/^(?:\w+\.?)*\w+@(?:\w+\.)+\w+$/

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Dùng biểu thức chính quy để biểu diễn các tokens
a   : có xuất hiện ký tự 'a'
ab  : có xuất hiện ký tự 'b' theo sau ký tự 'a' (theo đúng thứ tự)
a|b : có 'a' hoặc có 'b'
a*  : xuất hiện nhiều hoặc không xuất hiện ký tự 'a'
a+  : xuất hiện nhiều hoặc ít nhất là một ký tự 'a'
(a)+ == a(a)*
a3  : xuất hiện 3 ký tự a
a?  : xuất hiện a hoặc không xuất hiện (a)? = a | ∈
 VD: biểu diễn số nguyên:
digits = '0' | '1' | '2' | '3' | '4 | '5' | '6' | '7' | '8' | '9'
integer = '−'?(digits)+

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH



Định nghĩa chính qui
 Để thuận tiện về mặt kí hiệu, ta dùng định nghĩa chính qui
(ĐNCQ) để đặt tên cho các BTCQ
 Một ĐNCQ là một dãy các định nghĩa có dạng
d1 → r1
d2 → r2
.........
dn → rn
Trong đó di là các tên, ri là các BTCQ trên tập các kí hiệu Σ∪ {d1,
d2, ....di-1}

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Ví dụ
ĐNCQ của các định danh trong pascal là
letter → A | B | ...| Z | a | b |...| z
digit → 0 | 1 | ...| 9
id → letter (letter | digit)*

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Tìm hiểu thêm
 Cách sử dụng biểu thức chính qui trong các ngôn ngữ lập trình
thông dụng.
– Các cú pháp của biểu thức chính qui
– Các hàm xử lý biểu thức chính qui

– Một số biểu thức chính qui thông dụng
• Email
• Số điện thoại
• Họ tên, mật khẩu
• url
• File
• …

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Bài tập
 Viết chương trình kiểm tra form đăng nhập theo yêu cầu bên dưới
sử dụng biểu thức chính qui, bằng một trong các ngôn ngữ sau:
Java, Javascript, php, ASP. Net, C#
– Tên đăng nhập dài từ 6 đến 30 kí tự, gồm các kí tự từ a-z, 0-9 và
khoảng trắng, không chứa các kí hiệu đặc biệt khác
– Mật khẩu từ 4-12 kí tự, có chứa ký tự đặc biệt.
– Ngày sinh,
số điện thoại,
email theo đúng
định dạng như bên

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


2.2. Cú pháp hình thức
 Cú pháp là thành phần quan trọng nhất trong một ngôn
ngữ. Cú pháp được biểu diễn bởi một bộ luật cú pháp. Bộ
luật này dùng để mô tả cấu trúc của chương trình, câu

lệnh.
 Bộ luật cú pháp của các ngôn ngữ khác nhau thì khác
nhau.
 Để lập trình đúng, người lập trình phải nắm được bộ luật
cú pháp của ngôn ngữ mà mình dùng xây dựng ứng dụng

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Các dạng cú pháp hình thức
 Cú pháp trừu tượng (abstract syntax)
 Cú pháp cụ thể (concrete syntax)

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


a) Cú pháp trừu tượng
 Phân các yếu tố ngôn ngữ thành các lớp cú pháp (syntactic
class)
 Liệt kê tất cả các dạng (syntactic form) của mỗi lớp
 Ưu điểm: đơn giản
 Khuyết điểm:
– Không đề cập đến kí hiệu của ngôn ngữ mà nó mô tả.
– Có thể xẩy ra hiện tượng nhập nhằng (ambiguity)
 VD Biểu thức ‘a-b-c’ có thể hiểu là (a-b) – c hoặc a- (b-c)
E

O E

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


E O E


Ví dụ
Các lớp cú pháp trừu tượng của Pascal
B

Hằng

T

Kiểu biểu thức

O

Toán tử

P

Thông số hình thức

I

Danh hiệu

D

Định nghĩa


L

Biểu thức vế trái

C

Mệnh đề

E

Biểu thức

M

Chương trình

K

Biểu thức tĩnh

Biểu thức

Các dạng có thể của lớp L
L::= I | L.I | L[E] | E^
Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


b) Cú pháp cụ thể
 Cú pháp của ngôn ngữ được định nghĩa bởi bộ 4
(Văn phạm phi ngữ cảnh: Context – Free

Grammar)
– Ký hiệu bắt đầu S ∈ N(Start symbol)
– Tập các ký hiệu không kết thúc N (Non-terminals)
– Tập các ký hiệu kết thúc Σ (Terminals)
– Tập các luật sinh P (Production) có dạng: A → α

Với A ∈ N và α là chuỗi các ký hiệu kết thúc và không kết
thúc
Câu hợp lệ của ngôn ngữ là chuỗi kí hiệu kết thúc được dẫn
ra từ kí hiệu khởi đầu S thông qua các luật sinh trong tập
luật sinh P
Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


BNF (Backus-Naur Formalism)
 BNF là một siêu ngôn ngữ phổ biến để xây dựng cú pháp cụ
thể
 Ví dụ: Cú pháp cụ thể dạng BNF cho biểu thức trong PASCAL

<expression>::= <term> | <expression> <addop> <term>
<term>

::= <factor> | <term> <multop><factor>

<factor>

::= <identifier> | <literal> | (<expression>)

<identifier> ::= a | b | c,….|z
<literal>


::= 0 | 1 | 2,…|9

<addop>

::= +, -, or

<multop>

:: * | / | div | mod | and

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Cú pháp phi ngữ cảnh
 Cú pháp cụ thể còn được gọi là cú pháp phi ngữ cảnh
(context-free syntax), trong đó vế trái của mỗi luật sinh chỉ có
duy nhất một ký hiệu không kết thúc.
 Cú pháp phi ngữ cảnh biểu diễn được cú pháp của mọi ngôn
ngữ lập trình cấp cao hiện nay.

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


2.3. Ngữ nghĩa hình thức (Formal semantics)
 Đặc tả ngữ nghĩa hình thức cho phép:
– Chứng minh tính đúng đắn của chương trình
– Kiểm tra tính đúng đắn của chương trình dịch
 Các dạng ngữ nghĩa hình thức
– Ngữ nghĩa tác vụ (Operational semantics)

– Ngữ nghĩa tiên đề (Axiomatic semantics)
– Ngữ nghĩa biểu thị (Denotational semantics)

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


a) Ngữ nghĩa tác vụ
 Ý tưởng: đặc tả ý nghĩa một chương trình khi thực thi từng câu
lệnh trên máy tính (máy thật hoặc mô phỏng)
 Sự thay đổi trạng thái của máy tính cho ta ý nghĩa của câu lệnh
 Dựa vào môt máy ảo mà các tác vụ của nó đã được định nghĩa
một cách chính xác
 Ngữ nghĩa của một chương trình được định nghĩa bởi một tập
các tác vụ của máy ảo

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Ngữ nghĩa tác vụ
 Để dùng ngữ nghĩa tác vụ cho ngôn ngữ cấp cao cần có máy
ảo (virtual machine)
 Bộ diễn giải (interpreter) phần cứng chỉ dùng cho ngôn ngữ
máy của chính máy tính đó
 Bộ diễn giải phần mềm có 2 vấn đề
– Những tính chất cụ thể của máy tính phức tạp gồm phần cứng
và hệ điều hành gây khó hiểu
– Định nghĩa ngữ nghĩa phụ thuộc vào máy tính
 Phương pháp tương đương tốt hơn: sử dụng máy ảo cấp thấp
qua phần mềm mô phỏng


Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


Ngữ nghĩa tác vụ
 Dùng ngữ nghĩa tác vụ để đặc tả ngữ nghĩa một ngôn ngữ lập
trình L cần
– Bộ chuyển đổi (translator) đổi L thành ngôn ngữ cấp thấp
– Sử dụng máy ảo cho ngôn ngữ cấp thấp
 Vd:
Ngôn ngữ C:
for ( expr1; expr2; expr3 )
{
}

Ngữ nghĩa tác vụ:
expr1;
Loop: if expr2 == 0 goto out

Expr3;
goto Loop;
out:…

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


b) Ngữ nghĩa tiên đề
 Ngữ nghĩa của phát biểu S được đặc tả bởi công thức sau:
{P} S {Q}
Trong đó P là điều kiện về vị trí của các biến trước khi thực thi
S, gọi là tiền điều kiện.

Q là điều kiện về giá trị của biến sau khi thực thi S, gọi là hậu
điều kiện của S.
 Hệ luật Hoare gồm các tiên đề và luật suy dẫn về ngữ nghĩa
của phát biểu đặc tả.

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


c) Ngữ nghĩa biểu thị
 Ở ngữ nghĩa biểu thị, ngữ nghĩa của mỗi cấu trúc cú pháp
được đặc tả bằng một ánh xạ, gọi là hàm ngữ nghĩa, từ miền
cú pháp vào miền ngữ nghĩa.

Nguyễn Thị Hạnh – Bộ môn CNPM - Khoa CNTT – ĐH


×