Syntax and semantic in programing language, syntax, sematic, cú pháp, ngữ nghĩa
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 [...]... 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 13 Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình C: không... 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 :Cú pháp Mô hình tính toán (computational... 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 14 Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình 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... của ngữ nghĩa hình thức là hiện thực ngôn ngữ Cũng như cú pháp hình thức đã được sử dụng để tạo bộ phân tích cú pháp của ngôn ngữ lập trình một cách tự động, ngữ nghĩa hình thức cũng có thể giúp cho quá trình sinh tự động các trình thông dịch hoặc biên dịch Trong việc thiết kế ngôn ngữ, ngữ nghĩa hình thức cho phép các nhà thiết kế mô tả rõ ràng và chính xác ngữ nghĩa cũng như các đặc tính của ngôn ngữ. .. Đị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... 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 →... dụ: theo định nghĩa trên thì ngữ nghĩa của số nhị phân 101 là: Trang 19 Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình 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... tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình Đá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ữ. .. 27 Báo cáo đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình 2 .Cú pháp cảm ngữ cảnh Cách mô tả hình thức ngữ nghĩa như ở ngữ nghĩa biểu thị có thể được sử dụng để mô tả các ràng buộc về ngữ cảnh Các ràng buộc được xác định một cách hình thức bằng việc định nghĩa các hàm kiểm tra sự hợp lệ của các cấu trúc cú pháp đối với ngữ cảnh của cấu trúc đó 3.Hiện thực và thiết kế ngôn ngữ Một phạm vi ứng... đề tài: Cú pháp và ngữ nghĩa trong ngôn ngữ lập trình 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 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 . 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 . 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. 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