Tải bản đầy đủ (.pdf) (30 trang)

Cú pháp và ngữ nghĩa trong 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 (1.51 MB, 30 trang )

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 lp trình




Giảng viên: Ths.Trnh Qu
Nhóm sinh viên:
Phm Qut 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 nhp nhng) cm 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
Lut rút gn cho biu thc 16
5.2. Ngữ nghĩa biểu thị( Denotational semantics): 19
Ngôn ng s nh phân 19
Ngôn ng ln 20
ng 22
5.3. Ngữ nghĩa tiên đề (Axiomatic semantics) : 24
H lut HOARE 25
IV.ỨNG DỤNG CỦA NGỮ NGHĨA HÌNH THỨC 27
1.Ch 27
2.Cú pháp cm ng cnh 28
3.Hin thc và thit k ngôn ng 28
VI, TÀI LIỆU THAM KHẢO VÀ CHÚ THÍCH 29
Nhng tài liu tham kho 29
Mt 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 lp trình là 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 lp trình cung cp m
mô t mt thut toán mà máy tính có th hic nó.

 có th mô t ngôn ng l máy tính có th hic nó chúng ta cn
nh c sau:
 Cú pháp:
o Nhng qui t hiu,
o Hình thc hoc cu trúc ca biu thc, câu l
 Ngữ nghĩa:
o Ý m tt c 
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 
Những người sử dụng định nghĩa ngôn ngữ:
o Nhi thit k ngôn ng khác
o Nhi thc hin
o Lp trình viên( nhi s dng ngôn ng)
Chúng ta tht s phi có mt s  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  m
có th dn nhng s khác bit
Vic mô t cú pháp d  ng .Mt phn do kí hiu ngn g mô t
cú pháp.c phát trin cho ng 
Ví dụ 1:
if (<Biu thc> )
<Câu lnh-
else
<câu lnh-sai>
Ví dụ 2:
 Pascal S dng dm phgiữa câu lênh;C s dm phsau câu lnh
 Pascal:S dnh,C s dng { and }
 Pascal: s dng t khóa integer; C s dng 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 biu thc sau
Biu thc 1=4
Biu thc 2=1+3
Biu thc 3=1+1+1+1
C 3 biu th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
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: du ngoc tròn  x > y, t then, = hoc :=, Du chm phc
else,
 V m mt ng ng nhau
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; Nu bn không nh
trình ca bn không th chy
 Trong mng; bn hc nó, bn sn
t thúc
 a mt ngôn ng có ng rt ln:
o Làm th  vit cách d dàng
o Làm th  c và hi 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 chui ký t
 Cú pháp có th chính xác và chính thi BNF (Backus-Naur
Form)
 Mt ngôn ng ng là mt chui các ký t (hoc âm thanh) và

i cú pháp
  bn có th làm nhiu th ngôn ng gii mt giao din và không
có cú pháp thc


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à 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 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 ngôn
ng.Ngôn ng  nh cú pháp hoc ng a mt ngôn ng lp trình
c gi là siêu ngôn ngữ (meta-language) .Trong ni dung c tài này s  cn
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 tr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)
Ví dụ:lp toán t,lp biu tht kê tt c các dng có th ca tng lp cú
pháp

 Lit kê tt c các dng ca mi lp
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 )


Ví dụ: cú pháp lp trng cho ngôn ng PASCAL. Các ký hiu cho lp cú pháp
B hng
O toán t
I danh hiu
L biu thc 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 biu thc
K biu thc 
T biu thc kiu
P thông s hình thc

C lnh



expression
static expression
type expression
formal parameter
definition
command
program

Ví dụ: biu thc a-b-c có th biu din theo hai cách

 

  

 


E O E E O E
 t a,b,c có phi là các danh hiu hp 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 Ifunction 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: ca cú pháp trn, cho thy mt cách 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n ký hiu ca ngôn ng mà nó mô t, vi cú pháp tru
ng chúng ta không th c mt chui ký hiu có phi là m
hp l u trúc ca s kt hp các kí hiu trong chui
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 khc phc các m ca cú pháp trng.Nó cho
nh cu trúc kt hp ca chui ký hiu và cho bit chui ký hip l
hay không
m phi ng cnh( Context Free Grammars)
 i Noam Chomsky gi
 Language generators : miêu t
 V w


Ð nh cú pháp ca mt ngôn 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
-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).
Ví d: Câu lnh, biu thc
-P: Mt tp hp các luật sinh (productions) i lut sinh bao gm mt ký
hit thúc - gi là v trái, mt chui các token và / hoc
các ký hit thúc gi là v phi.
- S Mt trong các ký hic dùng làm ký hiu bu c
phm (start symbol)

BNF - Backus Normal Form (1959) là mt siêu ngôn ng ph bi xay dng 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ý hiu các bic dùng làm
ký hiu bu ).
 Các ch nh a, b, c, d, e, ; các chsvà mt s ký hiu khác ký hiu cho các ký
hiu kt thúc.
 Các ch in hoa X, Y, Z là các ký hiu có th là ký hiu kt thúc hoc bin.
 Các ch Hi-lu din cho chui các ký hiu kt thúc và bin.

Ta s biu dim mt cách tóm tt bng cách chlit kê các lut sinh ca nó.
Nt sinh ca bim nào
 ghi ngn g

Ví dụ 2: m trong Ví d.1 trên có th vit gn là :




Chúng ta qui ước:
 Mô t m bng cách lit kê các lut sinh.
 Lut sinh cha ký hiu bu s c liu tiên.
 Nu có nhiu lut sinh có cùng v trái thì nhóm li thành mt lut sinh duy nht,
 phi cách nhau bi ký hi

Ví dụ: t biu thc s hc (expression) bao gm các danh biu
(identifier) tham gia vào các phép toán +, * hoc biu thc con lng trong du ngo
, ta vit :
<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 chum phi ng c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 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 là
mt lut sinh, và  là các chui tùy ý các ký him
 Nu    


ta nói  dn xut ra (suy ra) 



Định nghĩa: m G (V, T, P, S). hay cây phân tích cú pháp
i) M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u S.
iii) Nu 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) Nnh n1, n2, , nk là con ca n theo th t t trái
sang phi có nhãn l 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ó
Vi dụ : m:



S aAS aSbAS aabAS aabbaS aabbaa

Ví dụ : xây dng cây phân tích cú pháp t dn xut.
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 ha ký hiu ca mm dn mt chui
trong ngôn ng.
 Nu ký hit thúc A có lu
th có mt nút trong có nhãn A ng t trái qua phi
là X, Y,Z
 Cây cú pháp (syntax - tree) là dng rút gn ca cây phân tích cú pháp 
biu din cu trúc ngôn ng.
 Trong cây cú pháp các toán t và t khóa không phi là nút lá mà là các nút trong.
Ví dụ: vi luc biu din bi cây cú pháp:

Mt kiu rút gn khác ca cây cú pháp là chui các luc rút gn li. Chng
hn ta có:

Sự mơ hồ (hay sự nhập nhằng) của văn phạm
Khái niệm: mm phi ng cc gm nhp nhng hay
còn g (ambiguity) nu nó có nhit cây dn xut cho cùng mt chui

w.
Ví dụm vi lut sinh: E-> E+E | E*E | (E) | a
Vi chui a+a*a ta có th v 2 cây dn xut 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 thc a+a*a có th hiu theo 2 cách khác nhau (a+a)*a hoc
a+(a*a)
 Mt ngôn ng có th c sinh ra t m nhp nhng hom không
nhp nhng
 Ngôn ng c gi là nhp nhng (nhp nhng c hu  không nghiên cu) nu
mu nhp nhng
Đồ thị cú pháp (Syntax Graphs)
Ví dụ:Kiu khai báo trong ngôn ng Pascal

2.3 Cú pháp cảm ngữ cảnh (context-sensitive syntax)
Hn ch rõ rt c cú pháp là không th hic các yu t ng
cnh trong các cu trúc cú pháp ca ngôn ng, Mi qui tc mô t các cu trúc ng pháp
có th to thành t các c hic nhng ràng
buc v ng i vi các c cnh là cn thi xác
nh s không hp l ca nh
const i=32;
begin

i:=i+1;

end;

Hoc
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


Hic tha nhn r nh nhng ràng
buc v ng cc dit mt cách không hình thc.
vic mô t không hình th và không chính xác.
III.NGỮ NGHĨA
Ng 
  ca biu thc, câu la cu trúc trong mt ngôn
ngc vit bi ngôn ng 
 Ng  cho mi th,bn làm trong ngôn ng
 Cú pháp ch  mô t ng 
 a 1 ngôn ng lu so va cú pháp
 Ng  t ch cu 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;

Nhn tha 2 dòng lnh khác nhau:
C: Thoát khi vòng lu 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 tc; mô t 1 tp hp th tc
 Java là 1 ngôn ng ng; mô 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  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 lp for mà không có cú pháp
 Java: không th 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!
Ngữ nghĩa là cơ bản
 Ng n  rt lp trình
 Mt s n có th vit mt kì ngôn
ng
o nghèo
o Bn có th s dng 1 ngôn ng hoc bn có th chiu vi nó
o Nu bn chiu vi ngôn ng ,bn cn c hai:
 S dng sai ngôn ng

 S dng 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



 Nhng li th c
chch xác nh thành 1 hành vi chính thc
 i vi ng ng hoàn toàn
 Nhip cy và nhii không hiu rõ và không s
dng ph bin
u thú v là ng ng sau thc t mt ngôn ng hoc có th không
áp dng cho toàn b ngôn ng (ng hp v HTML và SGML)
 a mt ngôn ng lp trình rõ ràng và chính xác, ng a ngôn
ng lc mô t mt cách hình thc.Ng c không ch là
 cho vic chn c
thit k và thc hin ngôn ng lp 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 ni dung c tài này s  cp ti 3 phn chính ca ng ng
 Denotational semantics, Operational semantics và Axiomatic semantics
3.1. Ngữ nghĩa tác vụ(Operational Semantics):
 Mô t a mng các câu lnh trên máy, mô phng hoc
thc t.S i trng thái ca câu lnh
 Dùng ng  cho 1 ngôn ng cp cao 1 máy o cn thit
 Da vào mt máy o mà tp các tác v c
 Ng a mi phn t 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ữ
Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình

Trang 16


 Phn cch thun túy cn to ra rt cao
 Phn mch thu:
o m chi tit ca máy tính s ng khó hiu

o M  ph thuc vào máy
 La chn t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ý
ng)
o Xây dng mt gi lng


Máy rút gọn (reduction machine)

B u khin rút gn m tr ng a nó.
( 3 + 4 ) * 5 (7) * 5
7 * 5
35

Lut rút gn

















Lut rút gn cho biu thc

-



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
V1V2
V1* V2
V
7)
  
   


8)
  
   

9)
  
   

10)
  
   

11)
  
   

12)
  
   

13)
  
  

14)
    
  




Ví dụ: 


3 + 4 = 7
7

7
2 

2 * 7 = 14


(lut 1 và7)
(lut 1 và10)
(lut 3)
(lut 14)
(lut 13)
(lut 6)
(lut 1 và9)
(lut 12)
(lut 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 buc mng
(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 > : biu thng Env
i các lut rút gn dùng dng biu din có chng





Đánh giá ngữ nghĩa tác vụ:
o Tt nu s dng 1 cách không chính thng dn s dng ngôn ng
o Phc tp nu s dng 1 cách chính thc

5.2. Ngữ nghĩa biểu thị( Denotational semantics):

Ng u th c da trên lý thuy qui, là p ng
ng nht và c phát trin bi Scott và Strachey (1970).
Ng a mi 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 

 Val : Expression Integer
Val(2 + 3 * 4) = 14
 P : Program (Input Output)


c khi xem cách mô t hình thc ng a môt ngôn ng lp trình bng 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. Gm 2 kí hiệu “0” và “1”. Ng ng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ng
B  Bml S nh phân
B 0 | 1 | B0 | B1
Min 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 mt ngôn ng li n. Ngôn
ng này gm hai h, các du ngoc tròn
Hai phép toán:
 mt toán h-
 Hai toán hng là: 
Các lnh ca ngôn ng gm lnh rng (null ) , lnh gán, các cu khi
bn (tun tu kin và lp), và lnh gi th tc (call). Th tng
lnh gán thân th tc vào các tê th tc. Tt c các danh hiu là
toàn ct danh hiu nhp- xut. D liu nhp c
khng cho danh hiu nhp-xut sau khi thc hi liu xut
c

Ví dụa ngôn ng l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  liu nhp lun lý s
gây ra l


Bng Ngôn ngữ lập trình đơn giản   cú pháp và ng
a ngôn ng ln nói trên.Ide, Exp, Com và Pro lt là tp hp
danh hiu, biu thc, l
Các ng c xây dng t hai min là: Min giá tr lun lý T và min
giá tr nguyên Z. Min giá tr  c R( storable value), mi S (Store) và
min th t quy h n nhau.
M thuc mi c ánh x t mt tâp danh hiu vào
R+{unused}; nó cho bit mi quan h ca danh hiu vi giá tr. Mi danh hiu có th
nhn mt giá tr n (lun lý hay nguyên) mt th tc, mt danh hic s
dng (unused)
Mi th tc thuc min th tc P là mt ánh x t mi này vào mi
tr kia. Các giá tr n và th tu thuc giá tr mi 
gán chúng cho mt danh hiu
Mt s cách ký hic s d 
 Hàm ng  là s chng ln các hàm, chng hn
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  SE
là cách vit tt ca :
E: Exp  (SE)
 Các du ngoc vuông  i s các hàm ng 
 Biu thc x?X là biu thc lun lý, có giá tr true nu  và có giá tr
false nu 
 Biu thc  là biu thc la ch







 Kí hiu:


Mô t phép thc hi i v

Có tt c ba hàm ng  a biu thc, hàm ng a câu
lnh, và hàm ng a 
Hàm ng a biu thc din dt biu thc ()
 ) , hàm ng E s cho giá tr ng ca biu thc
Hàm ng a câu lnh: cho bit lnh  , kt qu ca hàm
ng  mi
Hàm ng  và giá tr nhp
, Hàm ng  cho kt qu ct 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 hiu
Biu thc
Phát biu



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, }
bB=T+Z
rR=B+P
s  S = Ide (R + {unused})
pP=SG
giá tr lun lý
giá tr nguyên
giá tr n
giá tr tr c

th tc
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}
kt qu ca biu thc
kt qu ca phát biu
kt qu c


Qui ước
E : Exp (S c vit là E : Exp S E
D i s ca hàm ng 










Nu s là1 ánh xthì 













 


 phép thc 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 ca ngôn ng c b sung thêm hai dt câu lnh 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;

x1
x2
x 2, y 3
x 3, y 3
x 1, y 3


Ng  ca ngôn ng vc 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
lL
rR=B+P
s  S = L (R + {unused})
pP=SG
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 tc

môi trung
kt qu ca biu thc
kt qu ca phát biu
kt 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 kL: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 bi lnh thut toán (coded
algorithms)
 Trong ngữ nghĩa biểu thị: S nh bi chc cht
ch
Đánh giá ngữ nghĩa biểu thị
  chn c
 Cung cp v nht ch c
 Tr  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i s dng 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 bic t bi công thc sau: {P} S {Q}
Trong đó:
 P u kin v tr ca các bic khi thc thi S, gi là tiền điều kiện
(precondition) ca S
 Q 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c 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}


Nu vi hậu điều kiện bt k ca S, ta bic nhng tiu kic
thc hin xong hu kic tha mãn, thì ta bic ng a S

u kin P2 gọi là yếu hơn P1 nếu P1=> P2. Tiu kin  c t ca phát biu
càng yu, ng a phát biu càng rõ.
Ví dụ:

×