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

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

Đ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

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

Báo cáo đề tài: pháp 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: pháp 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: pháp 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. PHÁP NGỮ NGHĨA 4 II.Những phương thức chính mô tả pháp (Formal Methods of Describing Syntax) 6 2.1 pháp trừu tượng ( Abstract syntax) 6 2.2 pháp cụ thể (concrete syntax) 7 Cây phân tích pháp (Parse Tree) 9 S  (hay s nhp nhng) cm 11  th pháp (Syntax Graphs) 12 2.3 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 thit k ngôn ng 28 VI, TÀI LIỆU THAM KHẢO 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: pháp 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 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 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. đặ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ý 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: pháp 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: pháp ngữ nghĩa trong ngôn ngữ lập trình Trang 4 I. PHÁP NGỮ NGHĨA Ngôn ng lp trình là h thng gm các ký hiu 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:  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 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, 1 s  m có th dn nhng s khác bit Vic mô t 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: pháp 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 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 pháp:  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 hi dàng o Tht d  to ra nhng li pháp khó hiu Cú pháp là đánh máy (Syntax is typographical)  pháp mô t cách chúng ta vit chui ký t  pháp có th chính xác 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) i pháp   bn có th làm nhiu th ngôn ng gii mt giao din không có pháp thc Mô tả pháp (Describing Syntax) i Báo cáo đề tài: pháp 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à 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ả 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 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), pháp cụ thể (concrete syntax) pháp cảm ngữ cảnh (context-sensitive syntax) 2.1 pháp trừu tượng ( Abstract syntax)  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 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 pháp  Lit kê tt c các dng ca mi lp Ví dụ: -Lớp pháp C Hng (constant) O Toán t(operator) E Biu thc (expression) -Dạng pháp E ::= C | E O E | ( E ) Ví dụ: pháp lp trng cho ngôn ng PASCAL. Các ký hiu cho lp 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: pháp 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 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 pháp trn, cho thy mt cách nhìn khái quát v cu trú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 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 pháp cụ thể (concrete syntax) Báo cáo đề tài: pháp ngữ nghĩa trong ngôn ngữ lập trình Trang 8 pháp c th khc phc các m ca pháp trng.Nó cho nh cu trúc kt hp ca chui ký hiu 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 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 / 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 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: pháp ngữ nghĩa trong ngôn ngữ lập trình Trang 9  Các ch in hoa A, B, C, D, E, 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 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 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 pháp)  Cây phân tích 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 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 [...]... 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 trạng thái của chúng – Prolog là 1 ngôn ngữ logic; mô tả các sự việc mối quan hệ logic giữa chúng pháp hỗ trợ ngữ nghĩa – Một ngôn ngữ không thể có ngữ nghĩa mà không có pháp để hỗ trợ ngữ nghĩa Trang 13 Báo cáo đề tài: pháp ngữ nghĩa trong ngôn ngữ lập trình  C: không... ngôn ngữ, ý 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ữ 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 phápNgữ nghĩa có thể coi như một chức năng mà bản đồ cấu trú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: pháp 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 máy... của ngữ nghĩa hình thức là hiện thực ngôn ngữ Cũng như pháp hình thức đã được sử dụng để tạo bộ phân tích 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 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 nhiều người không hiểu rõ 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 SGML) Để định nghĩa của một ngôn ngữ lập trình rõ ràng 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” “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 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: pháp 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” “1”, các dấu ngoặc tròn Hai phép toán:  một toán hạng là „-‟ „not‟  Hai... tài: pháp 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, 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: pháp 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 pháp đối với ngữ cảnh của cấu trúc đó 3.Hiện thực thiết kế ngôn ngữ Một phạm vi ứng... đề tài: pháp 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, 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 đủ 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ữ, ý 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 ni dung c tài này s  cp ti 3 phn chính ca ng ng  Denotational. 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

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

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan