Tải bản đầy đủ

Đề tài Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH

BÀI BÁO CÁO
Môn: Nguyên lý và phương pháp lập trình
Đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình

Giảng viên: Ths.Trịnh Quốc Sơn

Nhóm sinh viên:
Lưu Vĩnh Phúc

TP Hồ Chí Minh 12/2016

14520695


Mục Lục
Lời cảm ơn................................................................................................................2
Nhận xét của giáo viên............................................................................................ 3

I. CÚ
II.

PHÁP VÀ NGỮ NGHĨA............................................................................... 4

NHỮNG PHƯƠNG THỨC MÔ TẢ CÚ PHÁP (Formal Methods of
Describing Syntax)............................................................................................... 6
2.1. Cú pháp trừu tượng ( Abstract syntax)....................................................6
2.2. Cú pháp cụ thể (Concrete syntax).............................................................8
Cây phân tích cú pháp (Parse Tree)............................................................ 9
Sự mơ hồ (hay sự nhập nhằng) của văn phạm.............................................11

III.

NGỮ NGHĨA....................................................................................................13
3.1. Ngữ nghĩa tác vụ(Operational Semantics)............................................15
Luật rút gọn cho biểu thức.......................................................................... 16
3.2. Ngữ nghĩa biểu thị( Denotational semantics)..........................................19
Ngôn ngữ số nhị phân.................................................................................19
Ngôn ngữ lập trình đơn giản....................................................................... 20
Môi trường.................................................................................................. 22
3.3. Ngữ nghĩa tiên đề (Axiomatic semantics)................................................24
Hệ luật HOARE.......................................................................................... 25

IV.Demo cây phân tích cú pháp (Parse Tree).....................................................27


Lời cảm ơn
Để có được sự thành công thì phải gắn liền với những sự hỗ trợ, giúp đỡ dù ít hay
nhiều, dù trực tiếp hay gián tiếp của thầy cô và bạn bè. Trong suốt thời gian từ
khi bắt đầu học tập ở trong học kỳ này, Khoa đã tổ chức cho chúng em được tiếp
cận với môn học mà theo em là rất hữu ích đối với sinh viên ngành Khoa Học Máy
Tính cũng như tất cả các sinh viên thuộc các chuyên ngành Khoa Học Kĩ Thuật
khác. Đó là môn học “Nguyên Lý và Phương pháp lập trình”.
Em xin chân thành cảm ơn thầy Ths.Trịnh Quốc Sơn và Ths. Trần Nguyên
Phong đã tận tâm hướng dẫn chúng em qua từng buổi học trên lớp cũng như
những đóng góp ý kiến, thảo luận về đề tài .
Em xin chân thành cảm ơn thầy.
TP Hồ Chí Minh 12/2016
(Nhóm sinh viên thực hiên)



Nhận xét của giáo viên
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………
..……………………….……………………………………………………………………
………………………………………………………………………………………………
..…………………………….………………………………………………………………
………………………………………………………………………………………………
………………………………………………………………………………………………


I. CÚ PHÁP VÀ NGỮ NGHĨA
Ngôn ngữ lập trình là hệ thống gồm các ký kiệu và quy tắc kết hợp các ký hiệu
thành các cấu trúc có ý nghĩa.
Để có thể mô tả ngôn ngữ lập trình để máy tính có thể hiểu được nó chúng ta cần
xác định hai phương thức sau:
• Cú pháp:
o Những qui tắc mà chương trình có thể hiểu.
o Hình thức hoặc cấu trúc của biểu thức, câu lệnh và chương trình.
• Ngữ nghĩa:
o Ý nghĩa của các chương trình, bao gồm tất cả ý nghĩa.
o Theo sau cú pháp (Syntax), hình thức của câu lệnh phải rõ ràng, ngụ ý
những gì câu lệnh thực hiện hoặc dùng như thế nào.
Những người sử dụng định nghĩa ngôn ngữ:
 Người thiết kế ngôn ngữ (Other language designers).
 Người thực hiện (Implementers).
 Lập trình viên (Programmers).
Chúng ta thật sự phải có một sự định nghĩa ngôn ngữ rõ ràng, bởi nếu không chúng
ta thấy rằng một ngôn ngữ có lẽ khó học, khó thực hiện, và 1 số thì mơ hồ trong đặc điểm có
thể dẫn đến những sự khác biệt.
Ví dụ 1:
while( )
{

}

Ví dụ 2: Ta xét biểu thức sau:
Biểu thức 1=4
Biểu thức 2=1+1+2
Biểu thức 3=1+1+1+1

Cả 3 biểu thức trên đều có cùng giá trị, tức là giống nhau về mặt ngữ nghĩa tuy nhiên
chúng khác nhau về mặt cú pháp.


Sự quan trọng của cú pháp:
– Cú pháp chính xác, rõ ràng là rất quan trọng. Sai cú pháp là đồng nghĩa với việc,
chương trình không thể chạy.
– Trong một nghĩa nào đó, Cú pháp ít quan trọng, thì sửa cú pháp cho đến khi nào
chương trình chạy đúng, và kết thúc.
– Nhưng cú pháp của một ngôn ngữ có ảnh hưởng rất lớn:
o Làm thế nào để viết chương trình một cách dễ dàng.
o Làm thế nào để đọc và hiểu chương trình dễ dàng.
o Thật dễ để tạo ra những lỗi cú pháp khó hiểu.
Cú pháp là đánh máy (Syntax is typographical)
– Cú pháp mô tả cách chúng ta viết chương trình như là một chuỗi ký tự.
– Cú pháp có thể chính xác và chính thức được định nghĩa bởi BNF (Backus-Naur
Form).
– Một ngôn ngữ theo nghĩa thông thường là một chuỗi các ký tự (hoặc âm thanh) và
đòi hỏi cú pháp.
Mô tả cú pháp (Describing Syntax)
– Sentence : Là chuỗi ký tự trong bảng chữ cái alphabet.
– Language : Là tập hợp các câu.
– Lexeme : Là cú pháp thấp nhất trong hệ thống lệnh(e.g.,*,+,=,sum,begin)
– Token : Là 1 loại của lexeme.

II. Những phương thức chính mô tả cú pháp (Formal Methods of Describing
Syntax)
Cú pháp của một ngôn ngữ lập trình có thể được xác định một cách hình thức bằng
cách sử dụng một hệ thống các ký hiệu khác, mà về thực chất cũng là một ngôn ngữ.
Ngôn ngữ 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
gọi là siêu ngôn ngữ (meta-language) .

2.1 Cú pháp trừu tượng (Abstract syntax)
Cú pháp trừu tượng phân các yếu tố của ngôn ngữ lập trình ra 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: Cú pháp trừu tượng là đơn giản, cho thấy một cái nhìn khái quát về cấu
trúc, cú pháp của ngôn ngữ.
Nhược điểm: Không đề cập đến ký hiệu của ngôn ngữ mà nó mô tả, không thể xác
định chuoi ký hiệu có phải là một chương trình hợp lệ hay không.


Ví dụ:
– Lớp cú pháp
C Hằng (constant)
O Toán tử(operator)
E Biểu thức (expression)
– Dạng cú pháp
E ::= C | E O E | ( E )

2.2 Cú pháp cụ thể (concrete syntax)
Cú pháp cụ thể khắc phục được các nhược điểm của cú pháp trừu tượng.Nó cho
phép xác định cấu trúc kết hợp của chuỗi ký hiệu và cho biết chuỗi ký hiệu đó có hợp lệ
hay không.
Văn phạm phi ngữ cảnh( Context Free Grammars)
• Được phát triển bởi Noam Chomsky giữa thập niên 1950.
• Language generators : miêu tả cú pháp của ngôn ngữ tự nhiên.
• CFG là một văn phạm hình thức mà trong đó các luật là ở dạng V → w.
Ðể xác định cú pháp của một ngôn ngữ, người ta dùng văn phạm phi ngữ cảnh
CFG (Context Free Grammar) hay còn gọi là văn phạm BNF (Backers Naur Form)
Văn phạm phi ngữ cảnh (CFG) là một hệ thống gồm bốn thành phần, ký hiệu là văn
phạm G (V, T, P, S), trong đó:
-T: Một tập hợp các token các ký hiệu kết thúc (terminal symbols).
Ví dụ: Các từ khóa, các chuỗi, dấu ngoặc đơn…
-V: Một tập hợp các ký hiệu chưa kết thúc (nonterminal symbols), còn gọi là các
biến (variables).
-P: Một tập hợp các luật sinh (productions) trong đó mỗi luật sinh bao gồm một ký
hiệu chưa kết thúc - gọi là vế trái, một mũi tên và một chuỗi các token và / hoặc các
ký hiệu chưa kết thúc gọi là vế phải.
- S Một trong các ký hiệu chưa kết thúc được dùng làm ký hiệu bắt đầu của văn
phạm (start symbol).
BNF - Backus Normal Form (1959) là một siêu ngôn ngữ phổ biến để xay dựng cú
pháp cụ thể:
• Được tạo ra bởi John Backus để miêu tả cho Algol 58.
• NF tương đương với CFG (context-free grammars).
Metalanguage là một dạng ngôn ngữ dùng để miêu tả cho một ngôn ngữ khác.


Ví dụ: Văn phạm G ({S, A, B}, {a, b}, P, S ), trong đó P gồm các luật sinh sau:
S →A
A →aA
A →a
→b
→b
Cây phân tích cú pháp (Parse Tree)
– Để dễ hình dung sự phát sinh ra các chuỗi trong văn phạm phi ngữ cảnh, ta
thường diễn tả một chuỗi dẫn xuất qua hình ảnh một cây. (cây phân tích cú pháp)
– Cây phân tích cú pháp có thể được xem nhưmột dạng biểu diễn hình ảnh của
một dẫn xuất. Ta nói rằng αAβ dẫn xuất ra αγβ (ký hiệu: αAβ ⇒ αγβ) nếu A → γ
là một luật sinh, αvà β là các chuỗi tùy ý các ký hiệu văn phạm.
– Nếu α1 ⇒ α2 ⇒.. .. ⇒
ta nói α1 dẫn xuất ra (suy ra).
Định nghĩa: Cho văn phạm G (V, T, P, S). hay cây phân tích cú pháp
i)
Mỗi nút (đỉnh) có một nhãn, là một ký hiệu ∈(V ∪T ∪{ε}).
ii) Nút gốc có nhãn là ký hiệu bắt đầu S.
iii) Nếu nút trung gian có nhãn A thì A ∈V.
iv) Nếu nút n có nhãn A và các đỉnh n1, n2, ..., nk là con của n theo thứ tự từ
trái sang phải có nhãn lần lượt là X1, X2, ..., Xkthì A →X1X2... Xk là một
luật sinh trong tập luật sinh P.
v) Nếu nút n có nhãn là từrỗng εthì n phải là nút lá và là nút con duy nhất của
nút cha của nó.
Ví dụ: Xây dựng cây phân tích cú pháp:
E→E*E

E→E+E*E

E → id + id * E


III. NGỮ NGHĨA
Ngữ nghĩa:
– Nghĩa của biểu thức, câu lệnh, chương trình, ý nghĩa của cấu trúc trong một ngôn
ngữ, và ý nghĩa của chương trình được viết bởi ngôn ngữ đó.
– Ngữ nghĩa là cơ sở cho mọi thứ, bạn làm trong ngôn ngữ.
– Cú pháp chỉ là dòng “lệnh” để mô tả ngữ nghĩa.
– Xác định nghĩa của 1 ngôn ngữ lập trình khó hơn nhiều so với nghĩa của cú pháp.
– Ngữ nghĩa có thể coi như một chức năng mà bản đồ cấu trúc cú pháp
(maps syntactical) cho mô hình tính toán.
Ngữ nghĩa mức độ thấp (Low level semantics)
Ngữ nghĩa có thể ảnh hưởng tới mức rất thấp:
Ví dụ:
Java: do{x=2*x;} while (x<100);
Pascal: repeat x:=2*x until x>=100;
Nhận xét: Nhận thấy ý nghĩa của 2 dòng lệnh khác nhau.
Java : Thoát khỏi vòng lặp khi điều kiện sai, Pascal: thì ngược lại với Java.
Ngữ nghĩa mức độ cao (High-level semantics)
Ngữ nghĩa có thể ảnh hưởng tới mức rất cao:


C là 1 ngôn ngữ thủ tục; mô tả 1 tập hợp thủ tục.



Java là 1 ngôn ngữ hướng đối tượng; mô tả các đối tượng và trạng thái
của chúng.

Prolog là 1 ngôn ngữ logic; mô tả các sự việc và mối quan hệ logic giữa chúng.

Cú pháp hỗ trợ ngữ nghĩa
– Một ngôn ngữ không thể có ngữ nghĩa mà không có cú pháp để hỗ trợ ngữ nghĩa.
• C: không thể có vòng lặp for mà không có cú pháp.
• Java: không thể có các đối tượng mà không có cú pháp cho việc tạo ra và sử
dụng chúng.
Điều này không có nghĩa là vòng lặp for và các đối tượng là cấu trúc cú pháp!


• Những lợi thế của định nghĩa chính thức: rõ ràng điều mà các chương trình có
thể chứng minh là đúng và máy dịch xác nhận để thành 1 hành vi chính thức.
• Định nghĩa chính thức đối với ngữ nghĩa không được đáp ứng hoàn toàn.
• Nhiều phương pháp tiếp cận được đẩy và nhiều người không hiểu rõ và không
sử dụng phổ biến.
Điều thú vị là ngữ nghĩa chính là thường sau khi thực tế một ngôn ngữ hoặc có thể
không áp dụng cho toàn bộ ngôn ngữ (Trường hợp về HTML và SGML).
Để định nghĩa của một ngôn ngữ lập trình rõ ràng và chính xác, ngữ nghĩa của
ngôn ngữ lập trình cũng cần được mô tả một cách hình thức. Ngữ nghĩa hình thức không
chỉ là cơ sở cho việc chứng minh tính đúng đắn của chương trình, mà còn có ích trong
quá trình thiết kế và thực hiện ngôn ngữ lập trình.

3.1. Ngữ nghĩa tác vụ (Operational Semantics):
– Ý 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à tập các tác vụ của nó đã được định nghĩa chính xác.
– Ngữ nghĩa của mỗi phần tử chương trình được đặc tả bằng 1 tập các tác vụ của
máy ảo.
Chương trình

Điều khiển

Bộ lưu trữ

– Phần cứng (hardware) chương trình dịch thuần túy cần tạo ra rất cao.
– Phần mềm(software) chương trình dịch thuần túy cũng có vấn đề:
o Các đặc điểm chi tiết của máy tính sẽ làm hành động khó hiểu.
o Một định nghĩa ngữ nghĩa sẽ phụ thuộc vào máy.
– Lựa chọn tốt hơn: Mô phỏng máy tính hoàn chỉnh.
– Quá trình:
o Xây dựng một máy dịch (dịch mã nguồn tới mã máy của 1 máy tính
lý tưởng).
o Xây dựng một giả lập cho máy lý tưởng.


Đánh tả ngữ nghĩa tác vụ cho phép:
o Chứng minh tính đúng đắn của chương trình.
o Kiểm tra tính đúng đắn của chương trình dịch.

3.2 Ngữ nghĩa biểu thị( Denotational semantics):
Ngữ nghĩa biểu thị được dựa trên lý thuyết hàm đệ qui, là phương pháp mô tả
ngữ nghĩa trừu tượng nhất và được phát triển bởi Scott và Strachey (1970).
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 (semantic function) từ miền cú pháp (syntactic domain) sang miền ngữ
nghĩa(semantic domain) để biểu thị ngữ nghĩa.
Trước khi xem cách mô tả hình thức ngữ nghĩa của môt ngôn ngữ lập trình bằng
ngữ nghĩa biểu thị ta xét ngôn ngữ số nhị phân.
Ngôn ngữ số nhị phân
Ngôn ngữ số nhị phân là các số nhị phân. Gồm 2 kí hiệu “0” và “1”. Ngữ nghĩa
của số nhị phân chính là giá trị thập phân của số đó.
Bảng ngôn ngữ số nhị
phân
Cú pháp trừu tượng
B ∈ Bml Số nhị
phân B → 0 | 1 | B0 |
B1
Miền ngữ nghĩa: N là tập các số nguyên
Hàm ngữ nghĩa: N: Bml → N
N [[0]] = 0
N [[1]] = 1
N [[B0]] = 2 * N [[B]]
N [[B1]] = 2 * N [[B]] + 1


Ví dụ: theo định nghĩa trên thì ngữ nghĩa của số nhị phân 101 là:
N [[101]] = 2* N [[10]] +1=2*2* N [[1]]+1 = 2*2*1+1=5.
Ngôn ngữ lập trình đơn giản
Để đơn giản hóa vấn đề ta chỉ xét một ngôn ngữ lập trình tương đối đơn giản. Ngôn
ngữ này gồm hai hằng “0” và “1”, các dấu ngoặc tròn.
Hai phép toán:
 Một toán hạng là : ‘-’ và ‘not’.
 Hai toán hạng là : ‘+’ và ‘=’.
Các lệnh của ngôn ngữ gồm lệnh rỗng (null), lệnh gán, các cấu trúc điều khiển cơ
bản (tuần tự, điều kiện và lặp) và lệnh gọi thủ tục (call). Thủ tục được định nghĩa bằng
lệnh gán thân thủ tục vào các tập thủ tục. Tất cả các danh hiệu trong chương trình đều là
toàn cục. Chương trình có một danh hiệu nhập- xuất. Dữ liệu nhập của chương trình là trị
khởi động cho danh hiệu nhập-xuất sau khi thực hiện xong chương trình là dữ liệu xuất
của chương trình.
Ví dụ: chương trình của ngôn ngữ lập trình đơn giản :
Program (x);
Begin
y:=x;
p:=(procedure x:=x+1)
if x=y then x:=x+(-1) else x:=0;
call p
end
Với dữ liệu nhập là một số bất kỳ, dữ liệu ra cũng chính là số đó. Dữ liệu nhập luận lý sẽ
gây ra lỗi cho chương trình.
Denotation Semantics với Operational Semantics:
– Trong ngữ nghĩa tác vụ: Sự thay đổi được xác định bởi lệnh thuật toán
(coded algorithms).
– Trong ngữ nghĩa biểu thị: Sự thay đổi được xác định bởi chức năng toán học
chặt chẽ.
Đánh giá ngữ nghĩa biểu thị:
– Dùng để chứng minh tính đúng đắn của chương trình.
– Cung cấp về những suy nghĩ chặt chẽ của chương trình.
– Trợ giúp để thiết kế ngôn ngữ.
– Được sử dụng trong các hệ thống trình biên dịch.


– Vì sự phức tạp của nó, Nên ít được sử dụng cho người sử dụng ngôn ngữ.

3.3 Ngữ nghĩa tiên đề (Axiomatic semantics):
Ngữ nghĩa của phát biểu:
Ý nghĩa của chương trình được xác định bởi tập hợp các quy tắc làm thay đổi dữ
liệu sau khi thực hiện một phép toán nào đó của ngôn ngữ lập trinh.
- Ngữ nghĩa tiêu đề dùng dề chứng minh một số tính chất của chương trình.
- 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ề trị của các biến trước khi thực thi S, gọi là tiền điều kiện
(precondition) của S.
– Q là điều kiện về vị trí các biến sau khi thực thi S, gọi là hậu điều kiện
(Postcondition) của S.
– S là phát biểu.
Diễn dịch đặc tả trên là nếu P đúng thì sau khi S thực hiện xong ta có Q đúng.
Nếu với hậu điều kiện bất kỳ của S, ta biết được những tiền điều kiện sao cho khi S được
thực hiện xong hậu điều kiện trên được thỏa mãn, thì ta biết được ngữ nghĩa của S.
Điều kiện P2 gọi là yếu hơn P1 nếu P1=> P2. Tiền điều kiện ở đặc tả của phát biểu
càng yếu, ngữ nghĩa của phát biểu càng rõ.
Ví dụ:
{ y > 0 } x := 1 / y { x = 1 / y}
y>0⇒y≠0
Với hậu điều kiện Q của S, chúng ta ký hiệu ϖp(S,Q) Trong đó: Q là biến số, có thể xem là
ngữ nghĩa chính xác của S.


Ví dụ:
wp(x := 1 / y, x = 1 / y) ≡ y ≠ 0
wp(n := n + 1, n > 0) ≡ n ≥ 0
Ví dụ:a = b + 1 {a > 1}
Một tiền điều kiện có thể: {b >
10} Tiền điều kiện yếu: {b > 0}

Hệ luật HOARE
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 theo đặc
tả vừa trình bày trên.
Các kí hiệu “^, ¬,^,v ” được sử dụng trong hệ luật lần lượt tương ứng với các toán
tử luận lý NOT,AND và OR. Kí hiệu “=” được sử dụng làm ký hiệu định nghĩa, để phân
biệt với các toán tử luận lý “=”.
Luật 1: Nếu ({P} S {Q}) ∧ (Q ⇒
R) thì {P} S {R}
Luật 2: Nếu ({P} S {Q}) ∧ (R ⇒
P) thì {R} S {Q}
Luật 3: (Tiên đề về phép gán)
{Px→E} x:= E {P},
với E là biểu thức và Px→E là P trong đó x được thay bằng E
Ví dụ: chứng minh {f = i!} i := i + 1 {f * i = i!}
P ↔ f * i = i!E↔i+1
Pi→E ↔ f *(i+1) = (i+1)!
Theo L3: {f *(i+1) = (i+1)!} i := i + 1 {f * i = i!}
Vì f = i! ⇒ f *(i+1) = (i+1)! nên theo L2 ta có điều cần chứng minh
Luật 4: (Luật về phát biểu ghép)
Nếu ({P} S1 {Q}) ∧ ({Q} S2 {R})
thì {P} S1; S2 {R}
Ví dụ: Chứng minh {f =i!} i := i + 1; f := f * i {f = i!}


Theo ví dụ trước, ta có {f = i!} i := i + 1 {f * i = i!}
Ta chứng minh {f * i = i!} f := f * i {f = i!}

(1)
(2)

P ↔ f = i!E↔f*i
Pi→E ↔ f *i = i!
Theo L3, (2) được chứng minh
Theo L4 và (1),(2) ta có điều phải chứng minh
Luật 5: (Luật về pháp biểu IF)
Nếu ({P ∧ B} S1 {Q}) ∧ ({P ∧ ¬B} S2 {Q})
thì {P} if B then S1 else S2 {Q}
Luật 6: (Luật về phát biểu IF không có thành phần ELSE)
Nếu ({P ∧ B} S1 {Q}) ∧ ((P ∧ ¬B) ⇒ Q)
thì {P} if B then S1 {Q}
Ví dụ: {xy < 0} if x > y then max := x else max :=y {max > 0}
Theo L3, ta có {x > 0} max := x {max > 0}
Vì (xy < 0) ∧ (x > y) ⇒ (x > 0) nên theo L2 ta có
{(xy < 0) ∧ (x > y)} max := x {max >
0} Tương tự{(xy < 0) ∧ (x ≤ y)} max := y {max >
0} Áp dụng L5 ta có điều cần chứng minh
Luật 7: (Luật về phát biểu WHILE)
Nếu {P ∧ B} S {P}
thì {P} while B do S {P ∧ ¬B}
Ví dụ: {f =i!} while i≠n do begin i := i +1; f := f * i end {f=n!}
Theo ví dụ trước ta đã chứng minh
{f =i!} i := i + 1; f := f * i {f = i!}
Vì (f = i!) ∧ (i≠n) ⇒ f = i! nên theo L2
{(f = i!) ∧ (i≠n)} i := i + 1; f := f * i {f = i!}
Với P ↔ f = i! ↔ i≠n S ↔ i := i + 1; f := f * i
theo L7:
{f =i!} while i≠n do begin i := i +1; f := f * i end {(f=i!) ∧ (i=n)}
mà (f=i!) ∧ (i=n) ⇒ f = n! nên theo L1 ta có điều cần phải chứng
minh
Luật 8: Đúng đắn toàn phần
if {P ∧ B ∧ 0 ≤ E = E0} C {P ∧ 0 ≤ E < E0} then {P ∧ 0 ≤ E }while B do C {P ∧
¬B}
E: an integer expression called variant


Đánh giá ngôn ngữ tiền đề (Evaluation of Axiomatic Semantics)
– Rất khó để phát triển các tiên đề hoặc các qui tắc suy luận cho tất cả các phát biểu
trong một ngôn ngữ.
– Ngôn ngữ tiên đề là một công cụ tốt để chứng minh tính đúng đắn, và trong 1
framework cho lập luận về chương trình, Nhưng nó thì không hữu ích cho
người sử dụng ngôn ngữ.
– Ngôn ngữ tiên đề hữu dụng trong việc mô tả ý nghĩa của một ngôn ngữ lập trình
được giới hạn cho người sử dụng ngôn ngữ hoặc compiler writers.
IV.Demo cây phân tích cú pháp (Parse Tree)
- Dùng ngôn ngữ Prolog để biểu diễn cây cú pháp dạng List.


Kết quả trả về dạng list, thông qua kết quả này ta có thể hình dung được cây cú pháp đã
xây dựng.


*TÀI LIỆU THAM KHẢO
[1] Sile bài giảng Nguyên Lý và các Phương pháp lập trình TS.Hứa Văn Phùng ĐH Bách
Khoa TP.HCM
[2] Ngôn ngữ lập trình các nguyên lý và mô hình- TS.Cao Hoàng Trụ NXB ĐH Quốc Gia
TP.HCM 2007.
[3] Chapter 3 Describing Syntax and Semantics
[4] Semantics of Programming Languages Andrew M. Pitts-University of Cambridge
[5] Semantics of Programming Languages-Paul Klint- University of Amsterdam
[6] Syntax and Semantics of Programming Languages https://www.cs.uiowa.edu/



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×