Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 1
ĐẠI HỌC QUỐC GIA TP.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
p trình
tài: Cú pháp và ng ng lp trình
Giảng viên: Ths.Trnh Qu
Nhóm sinh viên:
Phm Qut MSSV:11520529
601
TP H Chí Minh 11/2013
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 1
Contents
Lời cảm ơn 2
Nhận xét của giáo viên 3
I. CÚ PHÁP VÀ NGỮ NGHĨA 4
II.Những phương thức chính 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) 7
Cây phân tích cú pháp (Parse Tree) 9
S (hay s nhp nhng) cm 11
th cú pháp (Syntax Graphs) 12
2.3 Cú pháp cảm ngữ cảnh (context-sensitive syntax) 12
III.NGỮ NGHĨA 13
3.1. Ng (Operational Semantics): 15
Máy rút gọn (reduction machine) 16
Lut rút gn cho biu thc 16
5.2. Ngữ nghĩa biểu thị( Denotational semantics): 19
Ngôn ng s nh phân 19
Ngôn ng ln 20
ng 22
5.3. Ngữ nghĩa tiên đề (Axiomatic semantics) : 24
H lut HOARE 25
IV.ỨNG DỤNG CỦA NGỮ NGHĨA HÌNH THỨC 27
1.Ch 27
2.Cú pháp cm ng cnh 28
3.Hin thc và thit k ngôn ng 28
VI, TÀI LIỆU THAM KHẢO VÀ CHÚ THÍCH 29
Nhng tài liu tham kho 29
Mt s t ti tài 29
Chú thích 29
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 2
Lời cảm ơn
Trên thực tế không có sự thành công nào mà không 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 người khác. Trong suốt thời
gian từ khi bắt đầu học tập ở giảng đường đại học đến nay chúng em đã nhận được rất
nhiều sự quan tâm, giúp đỡ của quý Thầy Cô, gia đình và bạn bè.
Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý Thầy Cô ở Khoa Khoa Học Máy
Tính – Trường Đại Học Công Nghệ Thông Tin đã cùng với tri thức và tâm huyết của
mình để truyền đạt vốn kiến thức quý báu cho chúng em trong suốt thời gian học tập tại
trường. Và đặc biệt, 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 đã 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 buổi nói chuyện, thảo luận về đề tài . Nếu
không có những lời hướng dẫn, dạy bảo của thầy thì em nghĩ đè tài này chúng em rất
khó có thể hoàn thiện được. Một lần nữa,chúng em xin chân thành cảm ơn thầy.
TP H Chí Minh 11/2013
(Nhóm sinh viên thực hiên)
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 3
Nhận xét của giáo viên
.
.
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 4
I. CÚ PHÁP VÀ NGỮ NGHĨA
Ngôn ng lp trình là h thng gm các ký hiu và các qui tc kt hp các ký hiu
thành các c lp trình cung cp m
mô t mt thut toán mà máy tính có th hic nó.
có th mô t ngôn ng l máy tính có th hic nó chúng ta cn
nh c sau:
Cú pháp:
o Nhng qui t hiu,
o Hình thc hoc cu trúc ca biu thc, câu l
Ngữ nghĩa:
o Ý m tt c
o Theo sau cú pháp (Syntax), hình thc ca câu lnh phi rõ ràng, ng ý
nhng gì câu lnh thc hin ho
Những người sử dụng định nghĩa ngôn ngữ:
o Nhi thit k ngôn ng khác
o Nhi thc hin
o Lp trình viên( nhi s dng ngôn ng)
Chúng ta tht s phi có mt s rõ ràng, bi nu không chúng ta
thy rng mt ngôn ng có l khó hc, khó thc hin, và 1 s m
có th dn nhng s khác bit
Vic mô t cú pháp d ng .Mt phn do kí hiu ngn g mô t
cú pháp.c phát trin cho ng
Ví dụ 1:
if (<Biu thc> )
<Câu lnh-
else
<câu lnh-sai>
Ví dụ 2:
Pascal S dng dm phgiữa câu lênh;C s dm phsau câu lnh
Pascal:S dnh,C s dng { and }
Pascal: s dng t khóa integer; C s dng int
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 5
Ví dụ 3: Ta xét biu thc sau
Biu thc 1=4
Biu thc 2=1+3
Biu thc 3=1+1+1+1
C 3 biu thu có cùng giá tr, tc là ging nhau v mt ngữ nghĩa tuy nhiên
chúng khác nhau v mt cú pháp
Ví dụ 4:
C: if (x > y) x = x-1; else y ;
Pascal: if x > y then x := x-1 else y := y-1;
Nhận xét:
S khác nhau: du ngoc tròn x > y, t then, = hoc :=, Du chm phc
else,
V m mt ng ng nhau
Sự quan trọng của cú pháp:
Cú pháp chính xác, rõ ràng là rt quan trng; Nu bn không nh
trình ca bn không th chy
Trong mng; bn hc nó, bn sn
t thúc
a mt ngôn ng có ng rt ln:
o Làm th vit cách d dàng
o Làm th c và hi dàng
o Tht d to ra nhng li cú pháp khó hiu
Cú pháp là đánh máy (Syntax is typographical)
Cú pháp mô t cách chúng ta vit chui ký t
Cú pháp có th chính xác và chính thi BNF (Backus-Naur
Form)
Mt ngôn ng ng là mt chui các ký t (hoc âm thanh) và
i cú pháp
bn có th làm nhiu th ngôn ng gii mt giao din và không
có cú pháp thc
Mô tả cú pháp (Describing Syntax)
i
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 6
Sentence: là chui ký t trong bng ch cái alphabet
Language là tp hp các câu
Lexeme là cú pháp thp nht trong h thng lnh(e.g.,*,+,=,sum,begin)
Token: là 1 loi ca lexeme
II.Những phương thức chính mô tả cú pháp (Formal Methods of Describing Syntax)
Cú pháp ca mt ngôn ng lp trình có th nh mt cách hình thc bng
cách s dng mt h thng các ký hiu khác, mà v thc cht ngôn
ng.Ngôn ng nh cú pháp hoc ng a mt ngôn ng lp trình
c gi là siêu ngôn ngữ (meta-language) .Trong ni dung c tài này s cn
Cú pháp trừu tượng( abstract syntax), Cú pháp cụ thể (concrete syntax) và Cú pháp cảm
ngữ cảnh (context-sensitive syntax)
2.1 Cú pháp trừu tượng ( Abstract syntax)
cú pháp trng phân các yu t ca ngôn ng lp trình ra thành các lớp cú
pháp (syntactic class)
Ví dụ:lp toán t,lp biu tht kê tt c các dng có th ca tng lp cú
pháp
Lit kê tt c các dng ca mi lp
Ví dụ:
-Lớp cú pháp
C Hng (constant)
O Toán t(operator)
E Biu thc (expression)
-Dạng cú pháp
E ::= C | E O E | ( E )
Ví dụ: cú pháp lp trng cho ngôn ng PASCAL. Các ký hiu cho lp cú pháp
B hng
O toán t
I danh hiu
L biu thc v trái
literal
Operater
identifier
l-expression
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 7
E biu thc
K biu thc
T biu thc kiu
P thông s hình thc
C lnh
expression
static expression
type expression
formal parameter
definition
command
program
Ví dụ: biu thc a-b-c có th biu din theo hai cách
E O E E O E
t a,b,c có phi là các danh hiu hp l hay
không
Các dạng có thể của mỗi lớp cú pháp
L::=I | L.I| L[E] | E^
E::=B| I |OE | EOE |
K::=B | I | OK
set of T I
Array [T] of T | file of T | record…;I: T;…end I
Record …;I:T;…case I:I of…;K:(…;I:T;…);…end
P::=I:I | var I:I
D::=const I=K; l type I=T;| var I:T; |
Procedure Ifunction I
) | C;C |
If E then C l if E then C else C |
end |
While E do C l repeat C until E |
For I:=E to E do C | for I:=E downto E do C |
With L do begin C end | begin C end
M::=program I
Ưu điểm: ca cú pháp trn, cho thy mt cách nhìn khái quát v cu
trúc cú pháp ca ngôn ng
Nhược điểm:không cn ký hiu ca ngôn ng mà nó mô t, vi cú pháp tru
ng chúng ta không th c mt chui ký hiu có phi là m
hp l u trúc ca s kt hp các kí hiu trong chui
2.2 Cú pháp cụ thể (concrete syntax)
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 8
Cú pháp c th khc phc các m ca cú pháp trng.Nó cho
nh cu trúc kt hp ca chui ký hiu và cho bit chui ký hip l
hay không
m phi ng cnh( Context Free Grammars)
i Noam Chomsky gi
Language generators : miêu t
V w
Ð nh cú pháp ca mt ngôn ngi ta dùng văn phạm phi ngữ cảnh
CFG (Context Free Grammar) hay còn gi 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: Mt tp hp các token các ký hiệu kết thúc (terminal symbols).
Ví d: Các t khóa, các chui, du ngo
-V: Mt tp hp các ký hiệu chưa kết thúc (nonterminal symbols), còn gi là các
bin (variables).
Ví d: Câu lnh, biu thc
-P: Mt tp hp các luật sinh (productions) i lut sinh bao gm mt ký
hit thúc - gi là v trái, mt chui các token và / hoc
các ký hit thúc gi là v phi.
- S Mt trong các ký hic dùng làm ký hiu bu c
phm (start symbol)
BNF - Backus Normal Form (1959) là mt siêu ngôn ng ph bi xay dng cú
pháp c th
cho Algol 58
i CFG (context-free grammars)
ngôn ng khác
Ví dụ 1: Văn phạm G ({S, A, B}, {a, b}, P, S ), trong đó P gồm các luật sinh sau:
Qui ước kí hiệu:
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 9
Các ch in hoa A, B, C, D, E, và S ký hiu các bic dùng làm
ký hiu bu ).
Các ch nh a, b, c, d, e, ; các chsvà mt s ký hiu khác ký hiu cho các ký
hiu kt thúc.
Các ch in hoa X, Y, Z là các ký hiu có th là ký hiu kt thúc hoc bin.
Các ch Hi-lu din cho chui các ký hiu kt thúc và bin.
Ta s biu dim mt cách tóm tt bng cách chlit kê các lut sinh ca nó.
Nt sinh ca bim nào
ghi ngn g
Ví dụ 2: m trong Ví d.1 trên có th vit gn là :
Chúng ta qui ước:
Mô t m bng cách lit kê các lut sinh.
Lut sinh cha ký hiu bu s c liu tiên.
Nu có nhiu lut sinh có cùng v trái thì nhóm li thành mt lut sinh duy nht,
phi cách nhau bi ký hi
Ví dụ: t biu thc s hc (expression) bao gm các danh biu
(identifier) tham gia vào các phép toán +, * hoc biu thc con lng trong du ngo
, ta vit :
<expression> ::= <expression> + <expression> <expression> ::= <expression> *
<expression> <expression> ::= (<expression> )
<expression> ::= <identifier>
Cây phân tích cú pháp (Parse Tree)
d hình dung s phát sinh ra các chum phi ng cng
din t mt chui dn xut qua hình nh mt cây. (cây phân tích cú pháp)
Cây phân tích cú pháp có th t dng biu din hình nh ca mt
dn xut. Ta nói rng A dn xut ra (ký hiu: A n là
mt lut sinh, và là các chui tùy ý các ký him
Nu
ta nói dn xut ra (suy ra)
Định nghĩa: m G (V, T, P, S). hay cây phân tích cú pháp
i) Mnh) có mt nhãn, là mt ký hiu (V T {
ii) Nút gc có nhãn là ký hiu bu S.
iii) Nu nút trung gian có nhãn A thì A V
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 10
iv) Nnh n1, n2, , nk là con ca n theo th t t trái
sang phi có nhãn l là mt lut
sinh trong tp lut sinh P.
v) Nu nút n có nhãn là trng thì n phi là nút lá và là nút con duy nht ca nút
cha ca nó
Vi dụ : m:
S aAS aSbAS aabAS aabbaS aabbaa
Ví dụ : xây dng cây phân tích cú pháp t dn xut.
E -E - (E) - (E + E) - (id + E) - (id + id)
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 11
Cây phân tích cú pháp minh ha ký hiu ca mm dn mt chui
trong ngôn ng.
Nu ký hit thúc A có lu
th có mt nút trong có nhãn A ng t trái qua phi
là X, Y,Z
Cây cú pháp (syntax - tree) là dng rút gn ca cây phân tích cú pháp
biu din cu trúc ngôn ng.
Trong cây cú pháp các toán t và t khóa không phi là nút lá mà là các nút trong.
Ví dụ: vi luc biu din bi cây cú pháp:
Mt kiu rút gn khác ca cây cú pháp là chui các luc rút gn li. Chng
hn ta có:
Sự mơ hồ (hay sự nhập nhằng) của văn phạm
Khái niệm: mm phi ng cc gm nhp nhng hay
còn g (ambiguity) nu nó có nhit cây dn xut cho cùng mt chui
w.
Ví dụm vi lut sinh: E-> E+E | E*E | (E) | a
Vi chui a+a*a ta có th v 2 cây dn xut khác nhau:
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 12
u thc a+a*a có th hiu theo 2 cách khác nhau (a+a)*a hoc
a+(a*a)
Mt ngôn ng có th c sinh ra t m nhp nhng hom không
nhp nhng
Ngôn ng c gi là nhp nhng (nhp nhng c hu không nghiên cu) nu
mu nhp nhng
Đồ thị cú pháp (Syntax Graphs)
Ví dụ:Kiu khai báo trong ngôn ng Pascal
2.3 Cú pháp cảm ngữ cảnh (context-sensitive syntax)
Hn ch rõ rt c cú pháp là không th hic các yu t ng
cnh trong các cu trúc cú pháp ca ngôn ng, Mi qui tc mô t các cu trúc ng pháp
có th to thành t các c hic nhng ràng
buc v ng i vi các c cnh là cn thi xác
nh s không hp l ca nh
const i=32;
begin
i:=i+1;
end;
Hoc
var x,y: real;
Begin
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 13
Hic tha nhn r nh nhng ràng
buc v ng cc dit mt cách không hình thc.
vic mô t không hình th và không chính xác.
III.NGỮ NGHĨA
Ng
ca biu thc, câu la cu trúc trong mt ngôn
ngc vit bi ngôn ng
Ng cho mi th,bn làm trong ngôn ng
Cú pháp ch mô t ng
a 1 ngôn ng lu so va cú pháp
Ng t ch cu trúc cú pháp (maps
syntactical) cho mô hình tính toán
Ng Mô hình tính toán (computational model)
Cách tiếp cận này gọi là ngữ nghĩa theo cú pháp
Ngữ nghĩa mức độ thấp (Low level semantics)
Ngữ nghĩa có thể ảnh hưởng đến mọi thứ ở mức rất thấp:
Ví dụ:
C: do { x = 2*x; } while (x < 100);
Pascal: repeat x := 2*x until x >= 100;
Nhn tha 2 dòng lnh khác nhau:
C: Thoát khi vòng lu ki
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 tc; mô t 1 tp hp th tc
Java là 1 ngôn ng ng; mô t ng và trng thái ca
chúng
Prolog là 1 ngôn ng logic; mô t các s vic và mi quan h logic gia chúng
Cú pháp hỗ trợ ngữ nghĩa
Mt ngôn ng không th có ng h tr ng
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 14
C: không có th có vòng lp for mà không có cú pháp
Java: không th ng mà không có cú pháp cho vic to ra và s
dng 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!
Ngữ nghĩa là cơ bản
Ng n rt lp trình
Mt s n có th vit mt kì ngôn
ng
o nghèo
o Bn có th s dng 1 ngôn ng hoc bn có th chiu vi nó
o Nu bn chiu vi ngôn ng ,bn cn c hai:
S dng sai ngôn ng
S dng ngôn ng sai
Vai trò của ngữ nghĩa ngôn ngữ lập trình (The Role of Programming Language
Semantics)
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 15
Nhng li th c
chch xác nh thành 1 hành vi chính thc
i vi ng ng hoàn toàn
Nhip cy và nhii không hiu rõ và không s
dng ph bin
u thú v là ng ng sau thc t mt ngôn ng hoc có th không
áp dng cho toàn b ngôn ng (ng hp v HTML và SGML)
a mt ngôn ng lp trình rõ ràng và chính xác, ng a ngôn
ng lc mô t mt cách hình thc.Ng c không ch là
cho vic chn c
thit k và thc hin ngôn ng lp trình
Một số ngữ nghĩa phổ biến bao gồm: ngữ nghĩa tĩnh (Static semantic) và ngữ nghĩa
động (Dynamic semantic)
Synthesized attributes
Attribute grammars
Natural semantics
Static semantic
Operational semantics
Denotational semantics
Axiomatic semantics
(or proof rules)
Dynamic semantic
rong ni dung c tài này s cp ti 3 phn chính ca ng ng
Denotational semantics, Operational semantics và Axiomatic semantics
3.1. Ngữ nghĩa tác vụ(Operational Semantics):
Mô t a mng các câu lnh trên máy, mô phng hoc
thc t.S i trng thái ca câu lnh
Dùng ng cho 1 ngôn ng cp cao 1 máy o cn thit
Da vào mt máy o mà tp các tác v c
Ng a mi phn t c t bng 1 tp các tác v ca
máy o
Chương trình
Điều khiển
Bộ lưu trữ
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 16
Phn cch thun túy cn to ra rt cao
Phn mch thu:
o m chi tit ca máy tính s ng khó hiu
o M ph thuc vào máy
La chn tng máy tính hoàn chnh
Quá trình:
o Xây dng mt máy dch(dch mã ngun ti mã máy ca 1 máy tính lý
ng)
o Xây dng mt gi lng
Máy rút gọn (reduction machine)
B u khin rút gn m tr ng a nó.
( 3 + 4 ) * 5 (7) * 5
7 * 5
35
Lut rút gn
Lut rút gn cho biu thc
-
1.
0
1
9
10 * V
10 * V + 1
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 17
10 * V + 9
V1+ V2
V1V2
V1* V2
V
7)
8)
9)
10)
11)
12)
13)
14)
Ví dụ:
3 + 4 = 7
7
7
2
2 * 7 = 14
(lut 1 và7)
(lut 1 và10)
(lut 3)
(lut 14)
(lut 13)
(lut 6)
(lut 1 và9)
(lut 12)
(lut 5)
Ngôn ngữ mở rộng
-
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 18
-list
stmt--
letter
Cú pháp trừu tượng
1
2
1
2
| E
1
-
2
| E
1
2
1
1
D | D
1
A | A
Môi trường
Env: Identifier Integer {undef}
Env
0
(I) = undef for all I
VD: a := 5;
b := a * 4;
a :=b-5
Env&{I = n} : thêm 1 ràng buc mng
(Env&{I=n})(J)=
Luật cho biểu thức
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 19
< E | Env > : biu thng Env
i các lut rút gn dùng dng biu din có chng
Đánh giá ngữ nghĩa tác vụ:
o Tt nu s dng 1 cách không chính thng dn s dng ngôn ng
o Phc tp nu s dng 1 cách chính thc
5.2. Ngữ nghĩa biểu thị( Denotational semantics):
Ng u th c da trên lý thuy qui, là p ng
ng nht và c phát trin bi Scott và Strachey (1970).
Ng a mi cc t bng mt ánh x, gi là hàm ngữ
nghĩa (semantic function) t miền cú pháp (syntactic domain) sang miền ngữ
nghĩa(semantic domain) biu th ng
Val : Expression Integer
Val(2 + 3 * 4) = 14
P : Program (Input Output)
c khi xem cách mô t hình thc ng a môt ngôn ng lp trình bng ng
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. Gm 2 kí hiệu “0” và “1”. Ng nga
s nh phân chính là giá tr thp phân ca s
Bảng ngôn ngữ số nhị phân
Cú pháp trng
B Bml S nh phân
B 0 | 1 | B0 | B1
Min ng p các s nguyên
Hàm ng N: Bml → N
N [[0]] = 0
N [[1]] = 1
N [[B0]] = 2 * N [[B]]
N [[B1]] = 2 * N [[B]] + 1
Ví dụ a s nh phân 101 là:
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 20
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 hóa v ta ch xét mt ngôn ng li n. Ngôn
ng này gm hai h, các du ngoc tròn
Hai phép toán:
mt toán h-
Hai toán hng là:
Các lnh ca ngôn ng gm lnh rng (null ) , lnh gán, các cu khi
bn (tun tu kin và lp), và lnh gi th tc (call). Th tng
lnh gán thân th tc vào các tê th tc. Tt c các danh hiu là
toàn ct danh hiu nhp- xut. D liu nhp c
khng cho danh hiu nhp-xut sau khi thc hi liu xut
c
Ví dụa ngôn ng ln
Program (x);
Begin
y:=x;
p:=(procedure x:=x+1)
if x=y then x:=x+(-1) else x:=0;
call p
end
Vi d liu nhp là mt s bt k, d li liu nhp lun lý s
gây ra l
Bng Ngôn ngữ lập trình đơn giản cú pháp và ng
a ngôn ng ln nói trên.Ide, Exp, Com và Pro lt là tp hp
danh hiu, biu thc, l
Các ng c xây dng t hai min là: Min giá tr lun lý T và min
giá tr nguyên Z. Min giá tr c R( storable value), mi S (Store) và
min th t quy h n nhau.
M thuc mi c ánh x t mt tâp danh hiu vào
R+{unused}; nó cho bit mi quan h ca danh hiu vi giá tr. Mi danh hiu có th
nhn mt giá tr n (lun lý hay nguyên) mt th tc, mt danh hic s
dng (unused)
Mi th tc thuc min th tc P là mt ánh x t mi này vào mi
tr kia. Các giá tr n và th tu thuc giá tr mi
gán chúng cho mt danh hiu
Mt s cách ký hic s d
Hàm ng là s chng ln các hàm, chng hn
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 21
E: Exp SE
là cách vit tt ca :
E: Exp (SE)
Các du ngoc vuông i s các hàm ng
Biu thc x?X là biu thc lun lý, có giá tr true nu và có giá tr
false nu
Biu thc là biu thc la ch
Kí hiu:
Mô t phép thc hi i v
Có tt c ba hàm ng a biu thc, hàm ng a câu
lnh, và hàm ng a
Hàm ng a biu thc din dt biu thc ()
) , hàm ng E s cho giá tr ng ca biu thc
Hàm ng a câu lnh: cho bit lnh , kt qu ca hàm
ng mi
Hàm ng và giá tr nhp
, Hàm ng cho kt qu ct giá tr n)
Bảng Ngôn ngữ lập trình đơn giản
Cú pháp trừu tượng
I Ide
E Exp
C Com
M Pro
Danh hiu
Biu thc
Phát biu
E 0 | 1 | - E | not E | E + E | E = E | I | procedure C | (E)
C null | I := E | call E | C;C | if E then C else C |
while E do C | begin C end
M program (I); C
Miền ngữ nghĩa
T = { true, false}
Z = { -2, -1, 0, 1, 2, }
bB=T+Z
rR=B+P
s S = Ide (R + {unused})
pP=SG
giá tr lun lý
giá tr nguyên
giá tr n
giá tr tr c
th tc
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 22
e E = R + {error}
g G = S + {error}
a A = B + {error}
kt qu ca biu thc
kt qu ca phát biu
kt qu c
Qui ước
E : Exp (S c vit là E : Exp S E
D i s ca hàm ng
Nu s là1 ánh xthì
phép thc hi qui i
v
Hàm ngữ nghĩa
E : Exp S E C : Com S G M: Pro B A
E 0 | 1 | - E | not E | E + E | E = E | I | procedure C | (E)(1) E [[0]]s = 0
(2) E [[1]]s = 1
(3) E [[ -E ]]s = e ? Z -e, error where e = E [[E]]s
(4) E [[not E]]s = e ? T not(e), error where e = E [[E]]s
(5) E [[E1+E2]]s = e1?Z and e2?Z e1+e2, error
where ei = E [[Ei]]s for i=1,2
(6) E [[E1=E2]]s = (e1?T and e2?T) or (e1?Z and e2?Z) e1=e2, error
where ei = E [[Ei]]s for i=1,2
(7) E [[I]]s= s[[I]] ? R s[[I]], error
(8) E [[procedure C]]s = C [[C]]
(9) E [[(E)]]s = E [[E]]s
C: Com S GM: Pro B A
(10) C [[null]s = s
(11) C [[I:=E]]s = e ? R s[I e], error where e = E [[E]]s
(12) C [[call E]]s = e ? P e(s), errorwhere e = E [[E]]s
(13) C [[C1;C2]]s = g ? S C [[C2]]g, error where g = C [[C1]]s
(14) C [[if E then C1 else C2]]s = E [[E]]s C [[C1]]s, C [[C2]]s
(15) C [[while E
(g?S
(16) C [[begin C end]]s = C [[C]]s
(17) M [[program (I); C]]b = g?S and g[[I]]?B g[[I]], error
where g = C [[C]](s[I where, for a
Môi trường
Cú pháp ca ngôn ng c b sung thêm hai dt câu lnh m
sau:
D Def
D var I = E | const I = E
C | with D do C
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 23
Ví dụ:
x := 1;
with var x = 2 do begin
y := x+1;
x := 3;
end;
x1
x2
x 2, y 3
x 3, y 3
x 1, y 3
Ng ca ngôn ng vc trình bày b
Bảng ngữ nghĩa của ngôn ngữ với môi trường
Miền ngữ nghĩa
lL
rR=B+P
s S = L (R + {unused})
pP=SG
d D = L + R + {undefined}
u U = Ide D
e E = R + {error}
g G = S + {error}
a A = B + {error}
ô nh
giá tr c
th tc
môi trung
kt qu ca biu thc
kt qu ca phát biu
kt qu c
Hàm ngữ nghĩa
E : Exp U S ED : Def U S (U × G)
C : Com U S GM: Pro B A
(1) E [[0]] u s = 0
(2) E [[1]] u s = 1
(3) E [[ -E ]] u s = e ? Z -e, error where e = E [[E]] u s
(4) E [[not E]] u s= e ? T not(e), error where e = E [[E]] u s
(5) E [[E1+E2]] u s = e1?Z and e2?Z e1+e2, error
where ei = E [[Ei]] u s for i=1,2
(6) E [[E1=E2]] u s = (e1?T and e2?T) or (e1?Z and e2?Z) e1=e2, error
where ei = E [[Ei]] u s for i=1,2
(7) E [[I]] u s= d ? L s(d), d ? R d, error where d = u [[I]]
(8) E [[procedure C]] u s = C [[C]] u
(9) E [[(E)]] u s = E [[E]] u s
(10) D [[var I = E]] u s = e ? R and kL:s(k) = unused
(u[I e]), (u,error)
where e = E [[E]] u s
(11) D [[const I = E]] u s = e ? R (u[I e],s),(u,error) where e = E [[E]] u s
(12) C [[null] u s = s
(13) C [[I:=E]] u s = d ? L and e ? R s[d e], error
where d = u[[I]] and e = E [[E]] u s
(14) C [[call E]] u s = e ? P e(s), errorwhere e = E [[E]] u s
(15) C [[C1;C2]] u s = g ? S C [[C2]] u g, error where g = C [[C1]] u s
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Trang 24
(16) C [[if E then C1 else C2]]s = E [[E]] u s C [[C1]] u s, C [[C2]] u s
(g?S
(18) C [[with D do C]] u s = g ? S C [[C
(19) C [[begin C end]] u s = C [[C]]u s
(20) M [[program (I); C]]b = g?S and g(k)?B g(k), error
where g = C [[C]](u [I s[k
and k is any location
Denotation Semantics với Operational Semantics
Trong ngữ nghĩa tác vụ: S nh bi lnh thut toán (coded
algorithms)
Trong ngữ nghĩa biểu thị: S nh bi chc cht
ch
Đánh giá ngữ nghĩa biểu thị
chn c
Cung cp v nht ch c
Tr thit k ngôn ng
c s dng trong các h thng trình biên dch
Vì s phc tp ca nó, Nên ít c s di s dng ngôn ng
5.3. Ngữ nghĩa tiên đề (Axiomatic semantics) :
Ngữ nghĩa của phát biểu:
Ng a phát bic t bi công thc sau: {P} S {Q}
Trong đó:
P u kin v tr ca các bic khi thc thi S, gi là tiền điều kiện
(precondition) ca S
Q u kin v v trí các bin sau khi thc thi S, gi là hậu điều kiện
(Postcondition) ca S
S là phát biểu
Din dc t trên là nếu P đúng thì sau khi S thực hiện xong ta có Q đúng
Ví dụ:
{x = A} x := x + 1 { x = A + 1}
Nu vi hậu điều kiện bt k ca S, ta bic nhng tiu kic
thc hin xong hu kic tha mãn, thì ta bic ng a S
u kin P2 gọi là yếu hơn P1 nếu P1=> P2. Tiu kin c t ca phát biu
càng yu, ng a phát biu càng rõ.
Ví dụ: