Cú pháp: Những qui tắc mà chương trình có thể hiểu. 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: Ý nghĩa của các chương trình, bao gồm tất cả ý nghĩa. 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.
ĐẠI HỌC QUỐC GIA THÀNH PHỐ 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ý phương pháp lập trình Đề tài: Cú pháp ngữ nghĩa ngôn ngữ lập trình Giảng viên: Ths.Trịnh Quốc Sơn Nhóm sinh viên: Lưu Vĩnh Phúc TP Hồ Chí Minh 12/2016 14520695 Mục Lục Lời cảm ơn Nhận xét giáo viên I CÚ II PHÁP VÀ NGỮ NGHĨA NHỮNG PHƯƠNG THỨC MÔ TẢ CÚ PHÁP (Formal Methods of Describing Syntax) 2.1 Cú pháp trừu tượng ( Abstract syntax) 2.2 Cú pháp cụ thể (Concrete syntax) Cây phân tích cú pháp (Parse Tree) Sự mơ hồ (hay nhập nhằng) văn phạm 11 III NGỮ NGHĨA 13 3.1 Ngữ nghĩa tác vụ(Operational Semantics) 15 Luật rút gọn cho biểu thức 16 3.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 3.3 Ngữ nghĩa tiên đề (Axiomatic semantics) 24 Hệ luật HOARE 25 IV.Demo phân tích cú pháp (Parse Tree) 27 Lời cảm ơn Để có thành công phải gắn liền với hỗ trợ, giúp đỡ dù hay nhiều, dù trực tiếp hay gián tiếp thầy cô bạn bè Trong suốt thời gian từ bắt đầu học tập học kỳ này, Khoa tổ chức cho chúng em tiếp cận với môn học mà theo em hữu ích sinh viên ngành Khoa Học Máy Tính tất sinh viên thuộc chuyên ngành Khoa Học Kĩ Thuật khác Đó 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 Ths Trần Nguyên Phong tận tâm hướng dẫn chúng em qua buổi học lớp đóng góp ý kiến, thảo luận đề tài Em xin chân thành cảm ơn thầy TP Hồ Chí Minh 12/2016 (Nhóm sinh viên thực hiên) Nhận xét giáo viên ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………….…………………………………………………………………… ……………………………………………………………………………………………… …………………………….……………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… I CÚ PHÁP VÀ NGỮ NGHĨA Ngôn ngữ lập trình hệ thống gồm ký kiệu quy tắc kết hợp ký hiệu thành cấu trúc có ý nghĩa Để mô tả ngôn ngữ lập trình để máy tính hiểu 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 hiểu o Hình thức cấu trúc biểu thức, câu lệnh chương trình • Ngữ nghĩa: o Ý nghĩa chương trình, bao gồm tất ý nghĩa o Theo sau cú pháp (Syntax), hình thức câu lệnh phải rõ ràng, ngụ ý câu lệnh thực dùng Những người sử dụng định nghĩa ngôn ngữ: Người thiết kế ngôn ngữ (Other language designers) Người thực (Implementers) Lập trình viên (Programmers) Chúng ta thật phải có định nghĩa ngôn ngữ rõ ràng, không thấy ngôn ngữ có lẽ khó học, khó thực hiện, số mơ hồ đặc điểm dẫn đến khác biệt Ví dụ 1: while( ) { } Ví dụ 2: Ta xét biểu thức sau: Biểu thức 1=4 Biểu thức 2=1+1+2 Biểu thức 3=1+1+1+1 Cả biểu thức có giá trị, tức giống mặt ngữ nghĩa nhiên chúng khác mặt cú pháp Sự quan trọng cú pháp: – Cú pháp xác, rõ ràng quan trọng Sai cú pháp đồng nghĩa với việc, chương trình chạy – Trong nghĩa đó, Cú pháp quan trọng, sửa cú pháp chương trình chạy đúng, kết thúc – Nhưng cú pháp ngôn ngữ có ảnh hưởng lớn: o Làm để viết chương trình cách dễ dàng o Làm để đọc hiểu chương trình dễ dàng o Thật dễ để tạo lỗi cú pháp khó hiểu Cú pháp đánh máy (Syntax is typographical) – Cú pháp mô tả cách viết chương trình chuỗi ký tự – Cú pháp xác thức định nghĩa BNF (Backus-Naur Form) – Một ngôn ngữ theo nghĩa thông thường chuỗi ký tự (hoặc âm thanh) đòi hỏi cú pháp Mô tả cú pháp (Describing Syntax) – Sentence : Là chuỗi ký tự bảng chữ alphabet – Language : Là tập hợp câu – Lexeme : Là cú pháp thấp hệ thống lệnh(e.g.,*,+,=,sum,begin) – Token : Là loại lexeme II Những phương thức mô tả cú pháp (Formal Methods of Describing Syntax) Cú pháp ngôn ngữ lập trình xác định cách hình thức cách sử dụng hệ thống ký hiệu khác, mà thực chất ngôn ngữ Ngôn ngữ dùng để xác định cú pháp ngữ nghĩa ngôn ngữ lập trình gọi siêu ngôn ngữ (meta-language) 2.1 Cú pháp trừu tượng (Abstract syntax) Cú pháp trừu tượng phân yếu tố ngôn ngữ lập trình thành lớp cú pháp (syntactic class) Liệt kê tất dạng (syntactic form) lớp Ưu điểm: Cú pháp trừu tượng đơn giản, cho thấy nhìn khái quát cấu trúc, cú pháp ngôn ngữ Nhược điểm: Không đề cập đến ký hiệu ngôn ngữ mà mô tả, xác định chuoi ký hiệu có phải chương trình hợp lệ hay không 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 ) 2.2 Cú pháp cụ thể (concrete syntax) Cú pháp cụ thể khắc phục nhược điểm cú pháp trừu tượng.Nó cho phép xác định cấu trúc kết hợp chuỗi ký hiệu 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 Noam Chomsky thập niên 1950 • Language generators : miêu tả cú pháp ngôn ngữ tự nhiên • CFG văn phạm hình thức mà luật dạng V → w Ðể xác định cú pháp ngôn ngữ, người ta dùng văn phạm phi ngữ cảnh CFG (Context Free Grammar) hay gọi văn phạm BNF (Backers Naur Form) Văn phạm phi ngữ cảnh (CFG) hệ thống gồm bốn thành phần, ký hiệu văn phạm G (V, T, P, S), đó: -T: Một tập hợp token ký hiệu kết thúc (terminal symbols) Ví dụ: Các từ khóa, chuỗi, dấu ngoặc đơn… -V: Một tập hợp ký hiệu chưa kết thúc (nonterminal symbols), gọi biến (variables) -P: Một tập hợp luật sinh (productions) luật sinh bao gồm ký hiệu chưa kết thúc - gọi vế trái, mũi tên chuỗi token / ký hiệu chưa kết thúc gọi vế phải - S Một ký hiệu chưa kết thúc dùng làm ký hiệu bắt đầu văn phạm (start symbol) BNF - Backus Normal Form (1959) siêu ngôn ngữ phổ biến để xay dựng cú pháp cụ thể: • Được tạo John Backus để miêu tả cho Algol 58 • NF tương đương với CFG (context-free grammars) Metalanguage dạng ngôn ngữ dùng để miêu tả cho ngôn ngữ khác Ví dụ: Văn phạm G ({S, A, B}, {a, b}, P, S ), P gồm luật sinh sau: S →A A →aA A →a →b →b Cây phân tích cú pháp (Parse Tree) – Để dễ hình dung phát sinh chuỗi văn phạm phi ngữ cảnh, ta thường diễn tả chuỗi dẫn xuất qua hình ảnh (cây phân tích cú pháp) – Cây phân tích cú pháp xem nhưmột dạng biểu diễn hình ảnh dẫn xuất Ta nói αAβ dẫn xuất αγβ (ký hiệu: αAβ ⇒ αγβ) A → γ luật sinh, αvà β chuỗi tùy ý ký hiệu văn phạm – Nếu α1 ⇒ α2 ⇒ ⇒ ta nói α1 dẫn xuất (suy ra) Định nghĩa: Cho văn phạm G (V, T, P, S) hay phân tích cú pháp i) Mỗi nút (đỉnh) có nhãn, ký hiệu ∈(V ∪T ∪{ε}) ii) Nút gốc có nhãn ký hiệu bắt đầu S iii) Nếu nút trung gian có nhãn A A ∈V iv) Nếu nút n có nhãn A đỉnh n1, n2, , nk n theo thứ tự từ trái sang phải có nhãn X1, X2, , Xkthì A →X1X2 Xk luật sinh tập luật sinh P v) Nếu nút n có nhãn từrỗng εthì n phải nút nút nút cha Ví dụ: Xây dựng phân tích cú pháp: E→E*E E→E+E*E E → id + id * E III NGỮ NGHĨA Ngữ nghĩa: – Nghĩa biểu thức, câu lệnh, chương trình, ý nghĩa cấu trúc ngôn ngữ, ý nghĩa chương trình viết ngôn ngữ – Ngữ nghĩa sở cho thứ, bạn làm ngôn ngữ – Cú pháp dòng “lệnh” để mô tả ngữ nghĩa – Xác định nghĩa ngôn ngữ lập trình khó nhiều so với nghĩa cú pháp – Ngữ nghĩa coi chức mà đồ cấu trúc cú pháp (maps syntactical) cho mô hình tính toán Ngữ nghĩa mức độ thấp (Low level semantics) Ngữ nghĩa ảnh hưởng tới mức thấp: Ví dụ: Java: do{x=2*x;} while (x=100; Nhận xét: Nhận thấy ý nghĩa dòng lệnh khác Java : Thoát khỏi vòng lặp điều kiện sai, Pascal: ngược lại với Java Ngữ nghĩa mức độ cao (High-level semantics) Ngữ nghĩa ảnh hưởng tới mức cao: – C ngôn ngữ thủ tục; mô tả tập hợp thủ tục – – Java ngôn ngữ hướng đối tượng; mô tả đối tượng trạng thái chúng Prolog ngôn ngữ logic; mô tả việc mối quan hệ logic chúng Cú pháp hỗ trợ ngữ nghĩa – Một ngôn ngữ có ngữ nghĩa mà cú pháp để hỗ trợ ngữ nghĩa • C: có vòng lặp for mà cú pháp • Java: có đối tượng mà cú pháp cho việc tạo sử dụng chúng Điều nghĩa vòng lặp for đối tượng cấu trúc cú pháp! • Những lợi định nghĩa thức: rõ ràng điều mà chương trình chứng minh máy dịch xác nhận để thành hành vi thức • Định nghĩa thức ngữ nghĩa không đáp ứng hoàn toàn • Nhiều phương pháp tiếp cận đẩy nhiều người không hiểu rõ không sử dụng phổ biến Điều thú vị ngữ nghĩa thường sau thực tế ngôn ngữ không áp dụng cho toàn ngôn ngữ (Trường hợp HTML SGML) Để định nghĩa ngôn ngữ lập trình rõ ràng xác, ngữ nghĩa ngôn ngữ lập trình cần mô tả cách hình thức Ngữ nghĩa hình thức không sở cho việc chứng minh tính đắn chương trình, mà có ích trình thiết kế thực ngôn ngữ lập trình 3.1 Ngữ nghĩa tác vụ (Operational Semantics): – Ý tưởng: đặc tả ý nghĩa chương trình thực thi câu lệnh máy tính (máy thật mô phỏng) – Sự thay đổi trạng thái máy tính cho ta ý nghĩa câu lệnh – Dựa vào máy ảo mà tập tác vụ định nghĩa xác – Ngữ nghĩa phần tử chương trình đặc tả tập tác vụ máy ảo Chương trình Điều khiển Bộ lưu trữ – Phần cứng (hardware) chương trình dịch túy cần tạo cao – Phần mềm(software) chương trình dịch túy có vấn đề: o Các đặc điểm chi tiết máy tính làm hành động khó hiểu o Một định nghĩa ngữ nghĩa phụ thuộc vào máy – Lựa chọn tốt hơn: Mô máy tính hoàn chỉnh – Quá trình: o Xây dựng máy dịch (dịch mã nguồn tới mã máy máy tính lý tưởng) o Xây dựng giả lập cho máy lý tưởng Đánh tả ngữ nghĩa tác vụ cho phép: o Chứng minh tính đắn chương trình o Kiểm tra tính đắn chương trình dịch 3.2 Ngữ nghĩa biểu thị( Denotational semantics): Ngữ nghĩa biểu thị dựa lý thuyết hàm đệ qui, phương pháp mô tả ngữ nghĩa trừu tượng phát triển Scott Strachey (1970) Ngữ nghĩa cấu trúc cú pháp đặc tả ánh xạ, gọi 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ữ nghĩa Trước xem cách mô tả hình thức ngữ nghĩa môt ngôn ngữ lập trình 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 số nhị phân Gồm kí hiệu “0” “1” Ngữ nghĩa số nhị phân giá trị thập phân số Bảng ngôn ngữ số nhị phân Cú pháp trừu tượng B ∈ Bml Số nhị phân B → | | B0 | B1 Miền ngữ nghĩa: N tập số nguyên Hàm ngữ nghĩa: N: Bml → N N [[0]] = N [[1]] = N [[B0]] = * N [[B]] N [[B1]] = * N [[B]] + Ví dụ: theo định nghĩa ngữ nghĩa số nhị phân 101 là: 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 xét ngôn ngữ lập trình tương đối đơn giản Ngôn ngữ gồm hai “0” “1”, dấu ngoặc tròn Hai phép toán: Một toán hạng : ‘-’ ‘not’ Hai toán hạng : ‘+’ ‘=’ Các lệnh ngôn ngữ gồm lệnh rỗng (null), lệnh gán, cấu trúc điều khiển (tuần tự, điều kiện lặp) lệnh gọi thủ tục (call) Thủ tục định nghĩa lệnh gán thân thủ tục vào tập thủ tục Tất danh hiệu chương trình toàn cục Chương trình có danh hiệu nhập- xuất Dữ liệu nhập chương trình trị khởi động cho danh hiệu nhập-xuất sau thực xong chương trình liệu xuất chương trình Ví dụ: chương trình ngôn ngữ lập trình đơn giả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 liệu nhập số bất kỳ, liệu số Dữ liệu nhập luận lý gây lỗi cho chương trình Denotation Semantics với Operational Semantics: – Trong ngữ nghĩa tác vụ: Sự thay đổi xác định lệnh thuật toán (coded algorithms) – Trong ngữ nghĩa biểu thị: Sự thay đổi xác định chức toán học chặt chẽ Đánh giá ngữ nghĩa biểu thị: – Dùng để chứng minh tính đắn chương trình – Cung cấp suy nghĩ chặt chẽ chương trình – Trợ giúp để thiết kế ngôn ngữ – Được sử dụng hệ thống trình biên dịch – Vì phức tạp nó, Nên sử dụng cho người sử dụng ngôn ngữ 3.3 Ngữ nghĩa tiên đề (Axiomatic semantics): Ngữ nghĩa phát biểu: Ý nghĩa chương trình xác định tập hợp quy tắc làm thay đổi liệu sau thực phép toán ngôn ngữ lập trinh - Ngữ nghĩa tiêu đề dùng dề chứng minh số tính chất chương trình - Ngữ nghĩa phát biểu S đặc tả công thức sau: {P} S {Q} Trong đó: – P điều kiện trị biến trước thực thi S, gọi tiền điều kiện (precondition) S – Q điều kiện vị trí biến sau thực thi S, gọi hậu điều kiện (Postcondition) S – S phát biểu Diễn dịch đặc tả P sau S thực xong ta có Q Nếu với hậu điều kiện S, ta biết tiền điều kiện cho S thực xong hậu điều kiện thỏa mãn, ta biết ngữ nghĩa S Điều kiện P2 gọi yếu P1 P1=> P2 Tiền điều kiện đặc tả phát biểu yếu, ngữ nghĩa phát biểu rõ Ví dụ: { y > } x := / y { x = / y} y>0⇒y≠0 Với hậu điều kiện Q S, ký hiệu ϖp(S,Q) Trong đó: Q biến số, xem ngữ nghĩa xác S Ví dụ: wp(x := / y, x = / y) ≡ y ≠ wp(n := n + 1, n > 0) ≡ n ≥ Ví dụ:a = b + {a > 1} Một tiền điều kiện có thể: {b > 10} Tiền điều kiện yếu: {b > 0} Hệ luật HOARE Hệ luật Hoare gồm tiên đề luật suy dẫn ngữ nghĩa phát biểu theo đặc tả vừa trình bày Các kí hiệu “^, ¬,^,v ” sử dụng hệ luật tương ứng với toán tử luận lý NOT,AND OR Kí hiệu “=” sử dụng làm ký hiệu định nghĩa, để phân biệt với toán tử luận lý “=” Luật 1: Nếu ({P} S {Q}) ∧ (Q ⇒ R) {P} S {R} Luật 2: Nếu ({P} S {Q}) ∧ (R ⇒ P) {R} S {Q} Luật 3: (Tiên đề phép gán) {Px→E} x:= E {P}, với E biểu thức Px→E P x thay E Ví dụ: chứng minh {f = i!} i := i + {f * i = i!} P ↔ f * i = i!E↔i+1 Pi→E ↔ f *(i+1) = (i+1)! Theo L3: {f *(i+1) = (i+1)!} i := i + {f * i = i!} Vì f = i! ⇒ f *(i+1) = (i+1)! nên theo L2 ta có điều cần chứng minh Luật 4: (Luật phát biểu ghép) Nếu ({P} S1 {Q}) ∧ ({Q} S2 {R}) {P} S1; S2 {R} Ví dụ: Chứng minh {f =i!} i := i + 1; f := f * i {f = i!} Theo ví dụ trước, ta có {f = i!} i := i + {f * i = i!} Ta chứng minh {f * i = i!} f := f * i {f = i!} (1) (2) P ↔ f = i!E↔f*i Pi→E ↔ f *i = i! Theo L3, (2) chứng minh Theo L4 (1),(2) ta có điều phải chứng minh Luật 5: (Luật pháp biểu IF) Nếu ({P ∧ B} S1 {Q}) ∧ ({P ∧ ¬B} S2 {Q}) {P} if B then S1 else S2 {Q} Luật 6: (Luật phát biểu IF thành phần ELSE) Nếu ({P ∧ B} S1 {Q}) ∧ ((P ∧ ¬B) ⇒ Q) {P} if B then S1 {Q} Ví dụ: {xy < 0} if x > y then max := x else max :=y {max > 0} Theo L3, ta có {x > 0} max := x {max > 0} Vì (xy < 0) ∧ (x > y) ⇒ (x > 0) nên theo L2 ta có {(xy < 0) ∧ (x > y)} max := x {max > 0} Tương tự{(xy < 0) ∧ (x ≤ y)} max := y {max > 0} Áp dụng L5 ta có điều cần chứng minh Luật 7: (Luật phát biểu WHILE) Nếu {P ∧ B} S {P} {P} while B S {P ∧ ¬B} Ví dụ: {f =i!} while i≠n begin i := i +1; f := f * i end {f=n!} Theo ví dụ trước ta chứng minh {f =i!} i := i + 1; f := f * i {f = i!} Vì (f = i!) ∧ (i≠n) ⇒ f = i! nên theo L2 {(f = i!) ∧ (i≠n)} i := i + 1; f := f * i {f = i!} Với P ↔ f = i! ↔ i≠n S ↔ i := i + 1; f := f * i theo L7: {f =i!} while i≠n begin i := i +1; f := f * i end {(f=i!) ∧ (i=n)} mà (f=i!) ∧ (i=n) ⇒ f = n! nên theo L1 ta có điều cần phải chứng minh Luật 8: Đúng đắn toàn phần if {P ∧ B ∧ ≤ E = E0} C {P ∧ ≤ E < E0} then {P ∧ ≤ E }while B C {P ∧ ¬B} E: an integer expression called variant Đánh giá ngôn ngữ tiền đề (Evaluation of Axiomatic Semantics) – Rất khó để phát triển tiên đề qui tắc suy luận cho tất phát biểu ngôn ngữ – Ngôn ngữ tiên đề công cụ tốt để chứng minh tính đắn, framework cho lập luận chương trình, Nhưng không hữu ích cho người sử dụng ngôn ngữ – Ngôn ngữ tiên đề hữu dụng việc mô tả ý nghĩa ngôn ngữ lập trình giới hạn cho người sử dụng ngôn ngữ compiler writers IV.Demo phân tích cú pháp (Parse Tree) - Dùng ngôn ngữ Prolog để biểu diễn cú pháp dạng List Kết trả dạng list, thông qua kết ta hình dung cú pháp xây dựng *TÀI LIỆU THAM KHẢO [1] Sile giảng Nguyên Lý Phương pháp lập trình TS.Hứa Văn Phùng ĐH Bách Khoa TP.HCM [2] Ngôn ngữ lập trình nguyên lý mô hình- TS.Cao Hoàng Trụ NXB ĐH Quốc Gia TP.HCM 2007 [3] Chapter Describing Syntax and Semantics [4] Semantics of Programming Languages Andrew M Pitts-University of Cambridge [5] Semantics of Programming Languages-Paul Klint- University of Amsterdam [6] Syntax and Semantics of Programming Languages https://www.cs.uiowa.edu/ [...]... từ miền cú pháp (syntactic domain) sang miền ngữ nghĩa( semantic domain) để biểu thị ngữ nghĩa Trước khi xem cách 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... 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ữ tiên đề hữu dụng trong việc mô tả ý nghĩa của một ngôn ngữ. .. B1 Miền ngữ nghĩa: N là tập các số nguyên Hàm ngữ nghĩa: N: Bml → N N [[0]] = 0 N [[1]] = 1 N [[B0]] = 2 * N [[B]] N [[B1]] = 2 * N [[B]] + 1 Ví dụ: theo định nghĩa trên thì ngữ nghĩa của số nhị phân 101 là: 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”,... tả ngữ nghĩa tác vụ cho phép: o Chứng minh tính đúng đắn của chương trình o Kiểm tra tính đúng đắn của chương trình dịch 3.2 Ngữ nghĩa biểu thị( Denotational semantics): Ngữ nghĩa biểu thị được dựa trên lý thuyết hàm đệ qui, là phương pháp mô tả ngữ nghĩa trừu tượng nhất và được phát triển bởi Scott và Strachey (1970) Ngữ nghĩa của mỗi cấu trúc cú pháp được đặc tả bằng một ánh xạ, gọi là hàm ngữ nghĩa. .. ngữ lập trình được giới hạn cho người sử dụng ngôn ngữ hoặc compiler writers IV.Demo cây phân tích cú pháp (Parse Tree) - Dùng ngôn ngữ Prolog để biểu diễn cây cú pháp dạng List Kết quả trả về dạng list, thông qua kết quả này ta có thể hình dung được cây cú pháp đã xây dựng *TÀI LIỆU THAM KHẢO [1] Sile bài giảng Nguyên Lý và các Phương pháp lập trình TS.Hứa Văn Phùng ĐH Bách Khoa TP.HCM [2] Ngôn ngữ. .. algorithms) – Trong ngữ nghĩa biểu thị: Sự thay đổi được xác định bởi chức năng toán học chặt chẽ Đánh giá ngữ nghĩa biểu thị: – Dùng để chứng minh tính đúng đắn của chương trình – Cung cấp về những suy nghĩ chặt chẽ của chương trình – Trợ giúp để 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ụng cho người sử dụng ngôn ngữ 3.3 Ngữ nghĩa tiên đề (Axiomatic... 3.3 Ngữ nghĩa tiên đề (Axiomatic semantics): Ngữ nghĩa của phát biểu: Ý nghĩa của chương trình được xác định bởi tập hợp các quy tắc làm thay đổi dữ liệu sau khi thực hiện một phép toán nào đó của ngôn ngữ lập trinh - Ngữ nghĩa tiêu đề dùng dề chứng minh một số tính chất của chương trình - Ngữ nghĩa của phát biểu S được đặc tả bởi công thức sau: {P} S {Q} Trong đó: – P là điều kiện về trị của các biến... hạng là : ‘-’ và ‘not’ Hai toán hạng là : ‘+’ và ‘=’ Các lệnh của ngôn ngữ gồm lệnh rỗng (null), lệnh gán, các cấu trúc điều khiển cơ bản (tuần tự, điều kiện và lặp) và lệnh gọi thủ tục (call) Thủ tục được định nghĩa bằng lệnh gán thân thủ tục vào các tập thủ tục Tất cả các danh hiệu trong chương trình đều là toàn cục Chương trình có một danh hiệu nhập- xuất Dữ liệu nhập của chương trình là trị khởi... thực hiện xong chương trình là dữ liệu xuất của chương trình Ví dụ: chương trình của ngôn ngữ lập trình đơn giả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ệu ra cũng chính là số đó Dữ liệu nhập luận lý sẽ gây ra lỗi cho chương trình Denotation Semantics với Operational Semantics: – Trong ngữ nghĩa tác vụ: Sự thay... các tiên đề và luật suy dẫn về ngữ nghĩa của phát biểu theo đặc tả vừa trình bày trên Các kí hiệu “^, ¬,^,v ” được sử dụng trong hệ luật lần lượt tương ứng với các toán tử luận lý NOT,AND và OR Kí hiệu “=” được sử dụng làm ký hiệu định nghĩa, để phân biệt với các toán tử luận lý “=” Luật 1: Nếu ({P} S {Q}) ∧ (Q ⇒ R) thì {P} S {R} Luật 2: Nếu ({P} S {Q}) ∧ (R ⇒ P) thì {R} S {Q} Luật 3: (Tiên đề về phép