1. Trang chủ
  2. » Công Nghệ Thông Tin

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

30 820 18
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Tác giả Nhóm sinh viên: Phạm Quốc Đạt, Đoàn Thành Nam
Người hướng dẫn Ths.Trịnh Quốc Sơn
Trường học Đại học quốc gia TP.Hồ Chí Minh, Trường Đại học Công nghệ Thông tin
Chuyên ngành Khoa học Máy tính
Thể loại Báo cáo đề tài
Năm xuất bản 2013
Thành phố TP Hồ Chí Minh
Định dạng
Số trang 30
Dung lượng 1,51 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Syntax and semantic in programing language, syntax, sematic, cú pháp, ngữ nghĩa

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

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:

Phạm Quốc Đạt MSSV:11520529 Đoàn Thành Nam MSSV:11520601

TP Hồ Chí Minh 11/2013

Trang 2

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ự mơ hồ (hay sự nhập nhằng) của văn phạ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ữ nghĩa tác vụ(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ập trình đơn giản 20

Môi trườ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ứng minh chương trình 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ếng anh dùng trong đề tài 29

Chú thích 29

Trang 3

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)

Trang 4

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

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

……….………

………

……….………

………

………

Trang 5

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ấu trúc có ý nghĩa,Ngoài ra ngôn ngữ lập trình cung cấp một phương tiện để

mô tả một thuật toán mà máy tính có thể hiểu được nó

Để 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,Chương trình làm gì?

Những người sử dụng định nghĩa ngôn ngữ:

o Những người thiết kế ngôn ngữ khác

o Những người thực hiện

o Lập trình viên( những người sử dụng ngôn ngữ)

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

Việc mô tả cú pháp dễ hơn mô tả ngữ nghĩa.Một phần do kí hiệu ngắn gọn để mô tả

cú pháp.Nhưng nó chưa được phát triển cho ngữ nghĩa

Pascal Sử dụng dấu “chấm phẩy” giữa câu lênh;C sử dụng “chấm phẩy” sau câu lệnh

 Pascal:Sử dụng begin…end nhóm các câu lệnh,C sử dụng { and }

 Pascal: sử dụng từ khóa integer; C sử dụng int

Trang 6

– 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

– Nhưng bạn có thể làm nhiều thứ ngôn ngữ giống như với một giao diện và không

có cú pháp thực

Mô tả cú pháp (Describing Syntax) i

Trang 7

– 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) Trong nội dung của đề tài này sẽ đề cập đế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ừ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ú

Trang 8

command program

Ví dụ: biểu thức a-b-c có thể biểu diễn theo hai cách

L::=I | L.I| L[E] | E^

E::=B| I |OE | EOE | I(…,E,…) | L.I |L[E] | E^I

[…,E,…,E E, ] | (E)

K::=B | I | OK

T::= I | (…,I,…) | K K | ^I |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(…;P;…);C;l function I(…;P…):I;C;

C::=L:=E | I | I(…,E,…) | C;C |

If E then C l if E then C else C |

Case E of…;K: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 C |…D…begin C end | begin C end

M::=program I(…,I,…); C.

Ưu điểm: của cú pháp trừu tượng là đơn giả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ập đến ký hiệu của ngôn ngữ mà nó mô tả, với cú pháp trừu

tượng chúng ta không thể xác định được một chuỗi ký hiệu có phải là một chương trình hợp lệ hay không, cũng như cấ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)

Trang 9

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)

Ví dụ: Câu lệnh, biểu thức…

-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 ackus để 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ụ 1: Văn phạm G ({S, A, B}, {a, b}, P, S ), trong đó P gồm các luật sinh sau:

Trang 10

– Các chữ in hoa A, B, C, D, E, và S ký hiệu các biến (S thường được dùng làm

ký hiệu bắt đầ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ạp α, β, γ, biểu diễn cho chuỗi các ký hiệu kết thúc và biến

Ta sẽ biểu diễn văn phạ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ếu A → α1, A → α2, , A → αklà các luật sinh của biến A trong văn phạm nào

– Mô tả văn phạm bằng cách liệt kê các luật sinh

– Luật sinh chứa ký hiệu bắt đầu sẽ được liệt kê đầ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, trong đó các vế phải cách nhau bởi ký hiệu “|”đọc là “hoặc”

Ví dụ:để định nghĩa mộ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ặc đơn , 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ỗ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

Trang 11

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ó

Vi dụ : Xét văn phạm G ({S, A}, {a, b}, P, S), trong đó P gồm:

S →aAS | a

A →SbA | SS | ba

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)

Trang 12

Cây phân tích cú pháp minh họa ký hiệu ban đầu của một văn phạm dẫn đến một chuỗi trong ngôn ngữ

– Nếu ký hiệu chưa kết thúc A có luật sinh A → XYZ thì cây phân tích cú pháp có thể có một nút trong có nhãn A và có 3 nút con có nhãn tương ứ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 dùng để

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ật sinh S ( if then S1 else S2 đượ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ật sinh đơn đượ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ột văn phạm phi ngữ cảnh G được gọi là văn phạm nhập nhằng hay

còn gọi là mơ hồ (ambiguity) nếu nó có nhiều hơn một cây dẫn xuất cho cùng một chuỗi

w

Ví dụ: xét văn phạ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:

Trang 13

Điều này có nghĩa là biể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ừ văn phạm nhập nhằng hoặc văn phạ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ọi văn phạm sinh ra nó đều nhập nhằng

const i=32;

begin

i:=i+1;

Trang 14

Hiện chưa có một phương tiện được thừa nhận rộng rãi để xác định những ràng buộc về ngữ cảnh như trên, và chúng thường được diễn đạt một cách không hình thức việc mô tả không hình thức thường không đầy đủ và không chính xác

Ngữ nghĩa :Cú pháp 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ấy ý nghĩa của 2 dòng lệnh khác nhau:

C: Thoát khỏi vòng lặp khi điều kiện sai, Pascal: khi nó đúng

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

Trang 15

 C: không có 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!

Ngữ nghĩa là cơ bản

– Ngữ nghĩa ảnh hưởng đến cách chúng ta nghĩ về rất lập trình

– Một số người nói, “ ạn có thể viết một chương trình FORTRAN trong bất kì ngôn ngữ.”

o Đây là một chương trình nghèo

o Bạn có thể sử dụng 1 ngôn ngữ hoặc bạn có thể chiến đấu với nó

o Nếu bạn chiến đấ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)

Trang 16

 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 thườ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ữ (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

Một số ngữ nghĩa phổ biến bao gồm: ngữ nghĩa tĩnh (Static semantic) và ngữ nghĩa

Nhưng trong nội dung của đề tài này sẽ đề cập tới 3 phần chính của ngữ nghĩa động

đó là Denotational semantics, Operational semantics và Axiomatic semantics

3.1 Ngữ nghĩa tác vụ(Operational Semantics):

– Mô tả nghĩa của một chương trình bằng các câu lệnh trên máy, mô phỏng hoặc thực tế.Sự thay đổi trạng thái của máy xác định nghĩa của câu lệnh

– Dùng ngữ nghĩa tác vụ 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ủ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

Ngày đăng: 25/03/2014, 18:04

HÌNH ẢNH LIÊN QUAN

Đồ thị cú pháp (Syntax Graphs) - Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
th ị cú pháp (Syntax Graphs) (Trang 13)
Bảng Ngôn ngữ lập trình đơn giản dưới đây sẽ trình bày đầy đủ cú pháp và ngữ  nghĩa của ngôn ngữ lập trình đơn giản nói trên.Ide, Exp, Com và Pro lần lượt là tập hợp  danh hiệu, biểu thức, lệnh, chương trình - Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
ng Ngôn ngữ lập trình đơn giản dưới đây sẽ trình bày đầy đủ cú pháp và ngữ nghĩa của ngôn ngữ lập trình đơn giản nói trên.Ide, Exp, Com và Pro lần lượt là tập hợp danh hiệu, biểu thức, lệnh, chương trình (Trang 21)
Bảng Ngôn ngữ lập trình đơn giản - Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
ng Ngôn ngữ lập trình đơn giản (Trang 22)
Bảng ngữ nghĩa của ngôn ngữ với môi trường  Miền ngữ nghĩa - Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình
Bảng ng ữ nghĩa của ngôn ngữ với môi trường Miền ngữ nghĩa (Trang 24)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w