1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Đặc tả hình thức ngôn ngữ lập trình

43 333 1

Đ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

Định dạng
Số trang 43
Dung lượng 292 KB

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

Nội dung

Đặc tả hình thức Ngôn ngữ lập trình là một 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..  Cú pháp và ngữ nghĩa của một ngôn ngữ lập trình

Trang 1

Chương 2 ĐẶC TẢ HÌNH THỨC NGÔN NGỮ LẬP TRÌNH

Trang 3

Đặc tả hình thức

 Ngôn ngữ lập trình là một 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 Phần cú pháp qui định sự kết hợp của các kí hiệu, còn phần ngữ nghĩa qui định ý nghĩa của mỗi sự kết hợp đó.

 Cú pháp và ngữ nghĩa của một ngôn ngữ lập trình được xác định một cách hình thức bằng cách sử dụng một hệ thống kí hiệu khác, thực chất cũng là một ngôn ngữ (siêu ngôn ngữ)

 Siêu ngôn ngữ (meta language): là ngôn ngữ được sử 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 tả hình thức của mỗi ngôn ngữ lập trình (Formal

Trang 4

Đặc tả hình thức

 Bộ từ vựng

 Cú pháp (Văn phạm)

 Ngữ nghĩa

Trang 5

 Pattern : Pattern của một token là các qui tắc kết hợp các kí tự

để tạo nên token đó

 Lexeme : Là một chuỗi các kí tự thoả mãn pattern của một

token

Trang 6

Token, Lexeme, pattern

Token Lexeme Thông tin mô tả của pattern

< hoặc <= hoặc > hoặc >= hoặc = hoặc <>

Một kí tự, tiếp theo là các kí tự hoặc chữ số

Bất kì hằng số nào Các kí tự nằm giữa " và " ngoại trừ \"

Trang 7

Biểu thức chính quy (regular expression)

 Để biểu diễn các token người ta dùng biểu thức chính quy

 Một biểu thức chính quy là một chuỗi miêu tả một bộ các chuỗi khác, theo những quy tắc cú pháp nhất định

 BTCQ có thể hiểu như là một ngôn ngữ nhỏ dùng cho mục đích: để tìm một chuỗi con trong biểu thức chuỗi

lớn

 VD: email

/^(?:\w+\.?)*\w+@(?:\w+\.)+\w+$/

Trang 8

Dùng biểu thức chính quy để biểu diễn các tokens

a : có xuất hiện ký tự 'a'

ab : có xuất hiện ký tự 'b' theo sau ký tự 'a' (theo đúng thứ tự)

a|b : có 'a' hoặc có 'b'

a* : xuất hiện nhiều hoặc không xuất hiện ký tự 'a'

a+ : xuất hiện nhiều hoặc ít nhất là một ký tự 'a'

(a)+ == a(a)*

a3 : xuất hiện 3 ký tự a

a? : xuất hiện a hoặc không xuất hiện (a)? = a | ∈

 VD: biểu diễn số nguyên:

digits = '0' | '1' | '2' | '3' | '4 | '5' | '6' | '7' | '8' | '9'

Trang 9

dn  rn

Trong đó di là các tên, ri là các BTCQ trên tập các kí hiệu

{dd1, d2, di-1}

Trang 10

Ví dụ

ĐNCQ của các định danh trong pascal là

letter  A | B | | Z | a | b | | zdigit  0 | 1 | | 9

id  letter (letter | digit)*

Trang 12

Bài tập

 Viết chương trình kiểm tra form đăng nhập theo yêu cầu bên dưới sử dụng biểu thức chính qui, bằng một trong các ngôn ngữ sau: Java, Javascript, php, ASP Net, C#

– Tên đăng nhập dài từ 6 đến 30 kí tự, gồm các kí tự từ a-z, 0-9 và khoảng trắng, không chứa các kí hiệu đặc biệt khác

– Mật khẩu từ 4-12 kí tự, có chứa ký tự đặc biệt.

– Ngày sinh,

số điện thoại,

email theo đúng

định dạng như bên

Trang 13

2.2 Cú pháp hình thức

 Cú pháp là thành phần quan trọng nhất trong một ngôn ngữ

Cú pháp được biểu diễn bởi một bộ luật cú pháp Bộ luật này dùng để mô tả cấu trúc của chương trình, câu lệnh.

 Bộ luật cú pháp của các ngôn ngữ khác nhau thì khác nhau.

 Để lập trình đúng, người lập trình phải nắm được bộ luật cú pháp của ngôn ngữ mà mình dùng xây dựng ứng dụng

Trang 14

Các dạng cú pháp hình thức

 Cú pháp trừu tượng (abstract syntax)

 Cú pháp cụ thể (concrete syntax)

Trang 15

a) Cú pháp trừu tượng

 Phân các yếu tố ngôn ngữ thành các lớp cú pháp (syntactic

class)

 Liệt kê tất cả các dạng (syntactic form) của mỗi lớp

– Không đề cập đến kí hiệu của ngôn ngữ mà nó mô tả.

– Có thể xẩy ra hiện tượng nhập nhằng (ambiguity)

 VD Biểu thức ‘a-b-c’ có thể hiểu là (a-b) – c hoặc a- (b-c)

E O E E O E

Trang 17

b) Cú pháp cụ thể

phi ngữ cảnh: Context – Free Grammar)

– Ký hiệu bắt đầu S  N(Start symbol)

– Tập các ký hiệu không kết thúc N (Non-terminals)

– Tập các ký hiệu kết thúc  (Terminals)

– Tập các luật sinh P (Production) có dạng: A   

Với A  N và  là chuỗi các ký hiệu kết thúc và không kết thúc

Câu hợp lệ của ngôn ngữ là chuỗi kí hiệu kết thúc được

dẫn ra từ kí hiệu khởi đầu S thông qua các luật sinh trong

Trang 18

<term> ::= <factor> | <term> <multop><factor>

<factor> ::= <identifier> | <literal> | (<expression>)

<identifier> ::= a | b | c,….|z

Trang 19

Cú pháp phi ngữ cảnh

 Cú pháp cụ thể còn được gọi là cú pháp phi ngữ cảnh (context-free syntax), trong đó vế trái của mỗi luật sinh chỉ có duy nhất một ký hiệu không kết thúc

 Cú pháp phi ngữ cảnh biểu diễn được cú pháp của mọi ngôn ngữ lập trình cấp cao hiện nay

Trang 20

2.3 Ngữ nghĩa hình thức (Formal semantics)

 Đặc tả ngữ nghĩa hình thức cho phép:

– Chứng minh tính đúng đắn của chương trình

– Kiểm tra tính đúng đắn của chương trình dịch

 Các dạng ngữ nghĩa hình thức

– Ngữ nghĩa tác vụ (Operational semantics)

– Ngữ nghĩa tiên đề (Axiomatic semantics)

– Ngữ nghĩa biểu thị (Denotational semantics)

Trang 22

và hệ điều hành gây khó hiểu

– Định nghĩa ngữ nghĩa phụ thuộc vào máy tính

 Phương pháp tương đương tốt hơn: sử dụng máy ảo

Trang 23

Ngữ nghĩa tác vụ

 Dùng ngữ nghĩa tác vụ để đặc tả ngữ nghĩa một ngôn ngữ lập trình

L cần

– Bộ chuyển đổi (translator) đổi L thành ngôn ngữ cấp thấp

– Sử dụng máy ảo cho ngôn ngữ cấp thấp

goto Loop;

out:…

Trang 25

c) Ngữ nghĩa biểu thị

 Ở ngữ nghĩa biểu thị, 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, từ miền cú pháp vào miền ngữ nghĩa

Trang 26

Hiện thực và thiết kế ngôn ngữ

 Cú pháp và ngữ nghĩa hình thức được dùng để hiện

thực và thiết kê ngôn ngữ lập trình

– Cú pháp hình thức được sử dụng để tạo ra bộ phân tích cú

Trang 27

2.4 Chương trình dịch

 Sự biên dịch, sự thông dịch

 Các giai đoạn của quá trình biên dịch

 Sự ràng buộc

Trang 28

Chương trình dịch

 Chương trình dịch (translator) là chương trình nhập và chuyển đổi chương trình nguồn (source program) sang chương trình đối tượng (object program) hay chương

trình đích (target program)

– Chương trình nguồn viết bằng ngôn ngữ nguồn

– Chương trình đối tượng được thể hiện trên ngôn ngữ đối tượng

 Thời gian chuyển đổi từ chương trình nguồn sang

chương trình đối tượng goi là thời gian dịch (compile

time)

 Thời gian diễn ra sự thực thi chương trình đối tượng trên máy tính goi là thời gian thực thi (execution time hoăc

Trang 29

Phân loại chương trình dịch

 Gồm hai loại

– Trình biên dịch (compiler):chương trình nguồn được

trình biên dịch chuyển sang chương trình đích, thường ở dạng mã máy (hoặc assembly), sau đó chương trình đích mới được thực thi Trong hệ thống biên dịch dữ liệu và

chương trình nguồn được xử lý ở hai thời điểm khác nhau

Chương trình

nguồn

Chương trình biên dịch

Chương trình đối tượng Máy tính Kết quả

Dữ liệu

Trang 30

Phân loại chương trình dịch (tiếp)

– Trình thông dịch (interpreter): Chương trình thông dịch đọc

chương trình nguồn theo từng lệnh và phân tích rồi thực hiện nó (VD: DOS).

– Một kiểu khác trong các hệ thống thông dịch là ngôn ngữ nguồn được chuyển sang ngôn ngữ trung gian, sau đó máy ảo (virtual machine) sẽ thực hiện chuyển ngôn ngữ trung gian sang ngôn ngữ máy (VD Java)

Dữ liệu

Trang 31

Trình thông dịch Java

Text editor

Java virtual Machine

Operating

system

Java compiler

Source code (filename.java)

Bytecodes (classname.java) Java interpreter

Trang 32

Ngôn ngữ biên dịch và thông dịch

 Ngôn ngữ biên dịch là ngôn ngữ mà chương trình dịch cho nó là chương trình biên dịch, ví dụ như Fortran,

Pascal, C, C++…

 Ngôn ngữ thông dịch là ngôn ngữ mà chương trình dịch cho nó là chương trình thông dịch, ví dụ như LISP, APL, Java,…

Trang 33

Các giai đoạn của quá trình biên dịch

 Một chương trình dịch được chia làm 6 giai đoạn:

Trang 34

Phân tích từ vựng

 Chương trình nguồn đối với chương trình dịch chỉ là một chuỗi kí hiệu

 Bộ phân tích từ vựng dò các kí hiệu trong chuỗi kí hiệu chương trình nguồn, và gom chúng lại thành các nhóm kí hiệu có ý nghĩa gọi là các token, như từ khóa, tên biến, hằng, kí hiệu tác vụ.

 VD phân tích từ vựng phép gán: c:=a+b*7 thu được:

c ident(định danh) b ident(định danh)

:= becomes(kí hiệu tác vụ gán) * times (kí hiệu tác vụ nhân)

a ident(định danh) 7 number (số/hằng)

+ plus(kí hiệu tác vụ cộng)

Chuỗi tokens thu được: id 1 :=id 2 +id 3 *7

(ident, c) becomes (ident, a) plus (ident, b) times (number, 7)

Trang 35

Phân tích từ vựng

Source

program

Lexical analyzer

Get next token

Token

Parser

Symbol table

Trang 36

Bảng danh hiệu (symbol table)

Trang 37

hơn của chương trình nguồn

như: biểu thức, phát biểu,

chương trình con Các cấu trúc

được thể hiện dưới dạng cây

cú pháp với nút lá là các token.

 Ví dụ cây cú pháp thu được

của phát biểu gán “c:=a+b*7“

Trang 38

Phân tích ngữ nghĩa

– Kiểm tra lỗi ngữ nghĩa: kiểm tra kiểu; kiểm tra phạm vi của hằng, biến; kiểm tra việc sử dụng tên

– Thu nhận thông tin thuộc tính cho các từ tố (token), ví

dụ như thông tin về giá trị, thông tin về loại hằng, biến hay hàm cho tên.

chương trình nguồn VD trong biểu thức gán c:=a+b*7,

BPTNN xác định ý nghĩa của các tác vụ :=, +, *, kiểm tra

Trang 39

Sinh mã trung gian

 Sau khi phân tích cú pháp và ngữ nghĩa, trình biên dịch sẽ tạo ra dạng biểu diễn mã trung gian (mã bộ tứ, mã 3 địa chỉ) của chương trình nguồn

 VD kết quả phân tích ngữ nghĩa phép gán biểu diễn bởi mã bộ tứ dạng

<toán tử> (<toán hạng 1>, <toán hạng 2>, <kết quả>) như sau:

CNV (7, , t1) (chuyển 7 sang giá trị thực)

* (id3, t1,t2) (t 2 =id 3 *t 1 )

+ (id2, t2, t3) (t 3 =id 2 +t 2 )

ASS (t3, ,id1) (gán giá trị t 3 và id 1 )

Trang 40

Tối ưu mã

 Giai đoạn này tối ưu mã trung gian để tạo ra được

chương trình đích tối ưu về tốc độ thực thi và bộ nhớ sử dụng

 VD tối ưu mã cho mã trung gian của biểu thức

c:=a + b*7 là:

* (id 3 , 7.0, t 1 ) + (id 2 , t 1 , id 1 )

Trang 41

Sinh mã

 Giai đoạn cuối cùng là sinh ra mã đích thông thường ở dạng

mã máy hay mã Assembly Các vị trí vùng nhớ được chọn lựa cho mỗi biến được chương trình sử dụng Sau đó các lệnh trung gian được dịch lần lượt thành chuỗi các lệnh mã máy Vấn đề quyết định là việc gán các biến cho các thanh ghi.

 VD mã assembly của phép gán c:=a+b*7

MOV Reg, id3;

MUL Reg, 7.0;

ADD Reg, id2;

MOV id 1 , Reg;

Trang 42

Phân tích ngữ nghĩa (tiếp)

 Việc phân tích ngữ nghĩa phải dựa vào các luật ngữ nghĩa đi kèm với từng luật cú pháp để thực hiện chức năng sinh thuộc tính cho các từ tố và kiểm tra lỗi ngữ nghĩa

Trang 43

Ví dụ

Ngày đăng: 27/10/2017, 11:27

TỪ KHÓA LIÊN QUAN

w