NGÔN NGỮ và PHƯƠNG PHÁP DỊCH doc

34 569 5
NGÔN NGỮ và PHƯƠNG PHÁP DỊCH doc

Đ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

NGÔN NGỮ PHƯƠNG PHÁP DỊCH Phạm Đăng Hải haipd@soict.hut.edu.vn Chương 1: Những khái niệm Ngôn ngữ lập trình cấp cao trình dịch Đặc trưng ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngơn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng 9/4/2012 Ngôn ngữ lập trình cấp cao trình dịch Sự cần thiết ngơn ngữ lập trình bậc cao • Nhiều loại máy tính – Mỗi loại nhiều kiểu • Mỗi kiểu có ngơn ngữ máy riêng – Ngơn ngữ máy dãy nhị phân • Dùng ngơn ngữ máy • Cần ngôn ngữ – Độc lập với máy – Gần với ngữ tự nhiên 9/4/2012 • Ví dụ: C, Pascal, basic Ngôn ngữ bậc cao – Không phải dịch – Phức tạp – Không khả chuyển 1 Ngôn ngữ lập trình cấp cao trình dịch Ngơn ngữ lập trình cấp cao (NNLTCC) Chương trình viết NNLTCC • Độc lập với máy tính • Gần với ngơn ngữ tự nhiên • Chương trình dễ đọc, viết bảo trì • Muốn thực phải chuyển sang ngơn ngữ – Máy hiểu (ngôn ngữ máy) – Ngôn ngữ trung gian mà máy hiểu Được chuyển đổi Chương trình dịch • Chương trình thực chậm 9/4/2012 Ngơn ngữ lập trình cấp cao trình dịch Chương trình biên dịch (compiler) • Chương trình dịch làm nhiệm vụ dịch chương trình nguồn (thường viết ngơn ngữ lập trình bậc cao) sang chương trình đối tượng (chương trình đích) Chương trình nguồn Compiler Chương trình đích Thơng báo lỗi • Chương trình đích khơng thực mà cần liên kết (link) đến thư viện để 9/4/2012 chương trình thực Ngơn ngữ lập trình cấp cao trình dịch Các bước xử lý chương trình Chương trình nguồn compiler Mã đối tượng Mã máy tuyệt đối Phase dịch linker loader Mã thực Thư viện 9/4/2012 Ngơn ngữ lập trình cấp cao trình dịch Thơng dịch (interpreter) • Làm nhiệm vụ “giải thích” chương trình nguồn Chương trình nguồn interpreter Kết – Phân tích câu lệnh tiếp – Thực câu lệnh Dữ liệu • Chương trình thơng dịch có kích thước nhỏ hơn, chạy chậm 9/4/2012 Ngơn ngữ lập trình cấp cao trình dịch Dịch thực chương trình nguồn Chương trình nguồn compiler Chương trình ngơn ngữ trung gian interpreter 9/4/2012 Phase 1: Chuyển từ chương trình nguồn sang NN trung gian Phase 2: Thực mã trung gian Kết Ngơn ngữ lập trình cấp cao trình dịch Compiler >< interpreter • Compiler : Dịch trực tiếp mã máy • Interpreter : Trực tiếp thực lệnh mã nguồn • Biến thể Interpreter : thông dịch mã trung gian 9/4/2012 Ngôn ngữ lập trình cấp cao trình dịch Xây dựng chương trình dịch • Viết trực tiếp từ ngơn ngữ máy – Khó khăn • Sử dụng ngơn ngữ bậc cao – Dễ dàng thực hiện, hiệu – Tăng tính khả chuyển, Chương trình bậc cao đầu tiên? – Chiến lược chương trình mồi (bootstraps) chương trình dịch đặc trưng • Ngơn ngữ nguồn dịch S • Ngơn ngữ đích T • Ngơn ngữ cài đặt I S T I 9/4/2012 10 Ngôn ngữ lập trình cấp cao trình dịch Xây dựng chương trình dịch Viết chương trình dịch L cho máy M • Dùng hợp ngữ M viết L’ tập L • Dùng L’ để viết L Như vậy, L thực qua L’ để M L M L L’ L’ M M M M PL0 PL0 PC C C PC PC PC C 9/4/2012 11 Chương 1: Những khái niệm Ngôn ngữ lập trình cấp cao trình dịch Đặc trưng ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngôn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng 9/4/2012 12 Đặc trưng ngơn ngữ lập trình cấp cao Các hệ ngơn ngữ lập trình • Được chia thành hệ • Việc phân chia cấp cao hay thấp phụ thuộc mức độ trừu tượng ngôn ngữ – Cấp thấp : gần với máy – Cấp cao : gần với ngôn ngữ tự nhiên 9/4/2012 13 Đặc trưng ngơn ngữ lập trình cấp cao Các hệ ngơn ngữ lập trình • Các ngơn ngữ lập trình bậc thấp – Thế hệ thứ : ngôn ngữ máy – Thế hệ thứ hai : Assembly • Thế hệ thứ ba ←Ngôn ngữ bậc cao – Dễ hiểu • Câu lệnh gần ngơn ngữ tự nhiên – Cho phép thực khai báo, Ví dụ biến – Phần lớn NNLT cho phép lập trình cấu trúc – Ví dụ: Fortran, Cobol, C, C++, Basic 9/4/2012 14 Đặc trưng ngôn ngữ lập trình cấp cao Các hệ ngơn ngữ lập trình • Ngơn ngữ lập trình hệ thứ tư – Thường sử dụng lĩnh vực cụ thể – Dễ lập trình,xây dựng phần mềm – Có thể kèm cơng cụ tạo form, báo cáo – Ví dụ :SQL, Visual Basic, Oracle • Ngơn ngữ lập trình hệ thứ năm – Giải toán dựa ràng buộc đưa cho chương trình (khơng phải giải thuật người lập trình) – Việc giải tốn máy tính thực – Phần lớn ngôn ngữ dùng để lập trình logic • Giải tốn lĩnh vực trí tuệ nhân tạo 9/4/2012 15 Đặc trưng ngơn ngữ lập trình cấp cao Các thành phần NNLTCC Từ vựng cú pháp Kiểu liệu Các đại lượng Các toán tử biểu thức Các câu lệnh Chương trình 9/4/2012 16 Đặc trưng ngơn ngữ lập trình cấp cao Từ vựng cú pháp Từ vựng – Chữ cái: A Z, a z – Chứ sơ: – Dấu: dấu chức năng, dấu tốn tử • Dấu đơn: +, -, ; {, } • Dấu kép: >=, ), • Logic: Và (AND, &&), ( OR, ||), – Xâu: ghép xâu ←Pascal Biểu thức ← Kết hợp toán hạng toán tử – Số học: Trả số – Logic: Trả giá trị luận lý – Xâu: Trả chuỗi ký hiệu 9/4/2012 20 Đặc trưng ngơn ngữ lập trình cấp cao Các câu lệnh Câu lệnh – – – Câu lệnh gán: :=, = Câu lệnh vào/ra, gọi hàm Câu lệnh ghép, gộp: begin end, { } Câu lệnh rẽ nhánh – – – vào :if…then, if() vào ra: if …then…else, if()…else… vào, nhiều ra: case … of, switch() {} Câu lệnh lặp – – – 9/4/2012 Số lần lặp xác định: For to/downto do, for( ; ; ) Kiểm tra điều kiện trước: While Do, while () Kiểm tra điều kiện sau: Repeat Until, while() 21 Đặc trưng ngơn ngữ lập trình cấp cao Chương trình Các dạng chương trình – Thủ tục→ Khơng trả giá trị (void) – Hàm → Trả giá trị Vấn đề truyền tham số – Truyền theo trị: Không thay đổi giá trị – Truyền theo biến (địa chỉ): thay đổi giá trị Vấn đề Địa phương /toàn cục – Địa phương: tồn chương trình – Rồn cục: Tồn tồn chương trình 9/4/2012 22 Đặc trưng ngơn ngữ lập trình cấp cao Nhận xét Ngơn ngữ lập trình bậc cao có ngun tắc giống nhau, cách thể khác 9/4/2012 23 Chương 1: Những khái niệm Ngơn ngữ lập trình cấp cao trình dịch Đặc trưng ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngơn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng 9/4/2012 24 Các giai đoạn chương trình dịch Các phase chương trình dịch Chương trình dịch gồm phase Phân tích từ vựng Phân tích cú pháp – Phân tích ngữ nghĩa Sinh mã 9/4/2012 25 Cấu trúc chương trình dịch Chương trình nguồn Phân tích từ vựng Phân tích cú pháp Bảng ký hiệu Phân tích ngữ nghĩa Sinh mã trung gian Xử lý lỗi Tối ưu mã Sinh mã máy Chương trình đích 9/4/2012 26 Các giai đoạn chương trình dịch Bảng ký hiệu • Là cấu trúc liệu dùng chứa tên thuộc tính cần thiết chúng – Thuộc tính cung cấp thơng tin • Vị trí, kiểu, phạm vị hoạt động… – Nếu tên chương trình con: số tham số, kiểu trả – Tên xác định phân tích từ vựng • Khi tên, tùy thuộc vào vị trí tên chương trình – Đưa tên thuộc tính vào bảng ký hiệu – Lấy thông tin tên bảng ký hiệu 9/4/2012 27 Các giai đoạn chương trình dịch Bảng ký hiệu→Ví dụ float pos, init, size; //var pos, init, size: real Kiểu Tên Tên Kiểu Loại … … Id3 size real var Id2 init real var Id1 pos real var … … Bảng ký hiệu pos = init + 10 * size; 9/4/2012 28 Các giai đoạn chương trình dịch Phân tích từ vựng (Lexical Analysis - Scanner) Là pha chương trình dịch • Duyệt ký tự chương trình nguồn – Loại bỏ ký tự thừa • Dấu tab, khoảng trắng, thích • Xây dựng từ vựng từ ký tự đọc • Nhận dạng từ tố từ từ vựng – Từ tố (token) đơn vị cú pháp xử lý trình dịch thực thể khơng thể chia nhỏ • Chuyển từ tố cho pha tiếp 9/4/2012 29 Các giai đoạn chương trình dịch Phân tích từ vựng →Ví dụ pos := init + 10 * size; Bộ PTTV thực • Đọc ký tự: chữ p – Nhận dạng từ vựng thuộc dạng tên, từ khóa (vì bắt đầu chữ cái) – Đọc tiếp (o, s) tới gặp ký tự khác chữ cái, chữ số, • Gặp dấu trắng → xây dựng xong từ vựng pos – Do pos khơng trùng với từ khóa Vậy pos tên (ident) – Trả lại cho phân tích cú pháp từ tố ident • Đọc tiếp dấu : dấu = sau dấu cách – Nhận dạng từ vựng := trả từ tố gán (assign) 9/4/2012 30 10 Khái niệm ngôn ngữ Suy dẫn Cho văn phạm G = (VT, VN, P, S) • Gọi δ suy dẫn từ γ, tồn dãy xâu α0, α1, α2,…, αn thỏa mãn điều kiện γ = α0 ⇒ α1 ⇒ α2 ⇒ … ⇒ αn = δ • Nếu n ≥ 1, áp dụng bước suy dẫn, ký hiệu: γ ⇒+ δ • Nếu n ≥ 0, không áp dụng bước nào, ký hiệu: γ ⇒* δ 9/4/2012 58 Khái niệm ngôn ngữ Suy dẫn → Ví dụ Xét văn phạm G1 • abA ⇒ abbA {α=ab, β=ε, v=A,w=bA, A →bA ∈P } • abA ⇒ abbA ⇒ abbbA ⇒ abbbbA ⇒ abbbbc {α0= abA, α1= abbA,… α4= abbbbc} Vậy abA ⇒* abbbbc abA ⇒+ abbbbc abA ⇒* abA //← Áp dụng bước suy dẫn abA ⇒+ abA //← Sai, áp dụng suy dẫn 9/4/2012 59 Khái niệm ngôn ngữ Câu Cho văn phạm G = (VT, VN, P, S) • Một xâu δ suy từ ký hiệu khởi đầu S, gọi dạng câu hay dạng cú pháp – δ dạng câu S ⇒* δ • Câu dạng cú pháp bao gồm toàn ký hiệu kết thúc – δ câu S ⇒* δ δ∈ VT* 9/4/2012 60 20 Khái niệm ngơn ngữ Câu → Ví dụ Ví dụ văn phạm G1 S⇒aSA ⇒abA ⇒abc S⇒aSA ⇒abA ⇒abbA⇒abbc S⇒aSA ⇒abA ⇒abbA ⇒abbbA⇒abbbc Dạng câu: aSA, abA, abc, abbA, abbc,… Câu: abc, abbc, abbbc, abbbbc,… aabbcc có phải câu? 9/4/2012 61 Khái niệm ngôn ngữ Ngôn ngữ Cho văn phạm G = (VT, VN, P, S) • Ngơn ngữ L sinh từ văn phạm G, ký hiệu L(G) tập tất câu văn phạm – L(G) = {δ | δ∈ VT* S ⇒* δ } • Ví dụ văn phạm G1 – L(G1) = {b, abc, abbc, abbbc,… aabbcc,…} • G2= ({a,b}, {S,A}, {S →aA, A →a, A →b},S) – L(G2) = {aa, ab} 9/4/2012 62 Khái niệm ngôn ngữ Quy ước Nếu A→α1 A→α2 … A→αn Được viết gọn lại thành A→α1| α2| …| αn Ví dụ: G1=({a,b,c},{S,A},{S →aSA|b, A →bA|c},S) G2= ({a,b}, {S,A}, {S →aA, A →a|b}, S) 9/4/2012 63 21 Khái niệm ngôn ngữ Ngơn ngữ→Ví dụ Cho văn phạm G = (VT, VN, P, S) – VT = {Mơ, Mận, thì, uống, nhanh, đẹp} – VN={,,,} – S : Câu –P={ →, → Mơ | Mận, → uống | thì, → nhanh | đẹp } L(G) = {Mơ uống nhanh, Mơ nhanh, Mơ đẹp, Mơ uống đẹp, Mận nhanh,…} 9/4/2012 64 Khái niệm ngơn ngữ Đệ quy Cho văn phạm G = (VT, VN, P, S) A ∈VN //← A ký hiệu không kết thúc • A gọi đệ quy tồn A⇒+αAβ, với α, β ∈V* • Nếu α=ε, (A⇒+Aβ) gọi đệ quy trái – Nếu A⇒Aβ: Đệ quy trái trực tiếp (Sản xuất: A → Aβ) • Nếu β =ε, (A⇒+ αA) gọi đệ quy phải – Nếu A⇒ αA : Đệ quy phải trực tiếp (Sản xuất: A → αA) • Nếu α,β ≠ ε, (A⇒+ αAβ) gọi đệ quy – Nếu A⇒ αAβ: Đệ quy trực tiếp (Sản xuất:A→ αAβ) Ví dụ, định nghĩa Tên 9/4/2012 →|| 65 Khái niệm ngôn ngữ Văn phạm tương đương Hai văn phạm tương đương, chúng sinh ngôn ngữ G1 = (1VT, 1VN, P1, S1) G2 = (2VT, 2VN, P2, S2) L(G1) = L(G2) ⇒ G1⇔G2 9/4/2012 66 22 Khái niệm ngôn ngữ Phân loại văn phạm Phân thành loại [Chomsky,1957] Văn phạm ngữ cấu (pharse structure grammar) Ràng buộc: Khơng có ràng buộc ngồi đ/nghĩa Văn Phạm cảm ngữ cảnh (context sensitive) Ràng buộc: Nếu α→β l(α) ≤l(β); S →ε chấp nhận S không vế phải SX • Văn phạm phi ngữ cảnh (context free grammar) • Ràng buộc: Vế trái sản xuất ký hiệu không kết thúc Văn phạm quy (regular grammar) Ràng buộc: SX có dạng A →a|aB A →a|Ba 9/4/2012 67 Khái niệm ngôn ngữ Phân loại văn phạm Được sử dụng biểu diễn cấu trúc từ vựng 9/4/2012 Thường dùng biểu diễn cú pháp ngơn ngữ lập trình 68 Chương 1: Những khái niệm Ngơn ngữ lập trình cấp cao trình dịch Đặc trưng ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngơn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng 9/4/2012 69 23 Văn phạm phi ngữ cảnh Văn phạm phi ngữ cảnh • Cây suy dẫn • Suy dẫn trái, suy dẫn phải • Văn phạm đơn nghĩa • Sản xuất đệ quy • Vấn đề phân tích cú pháp 9/4/2012 70 Văn phạm phi ngữ cảnh Cây suy dẫn • G = (VT, VN,P, S) văn pham phi ngữ cảnh • Cây suy dẫn D cho VP G có thứ tự, – Mỗi nút có nhãn ký hiệu tập VT∪VN ∪ {ε} – Nhãn nút gốc S (Start Symbol) – Các nút có nhãn ký hiệu kết thúc ε – Nếu A nút D X1,X2, , Xn hậu duệ trực tiếp A theo tự trái qua phải A → X1X2 Xn sản xuất P – Nếu n=0 (X= ε) X hậu duệ đơn A A → ε sản xuất P, – Biên (kết quả) suy dẫn từ thu cách nối nút lại theo thứ tự từ trái qua phải • Rõ ràng, α biên D S ⇒* α 9/4/2012 71 Văn phạm phi ngữ cảnh Cây suy dẫn→Ví dụ Văn phạm: E→ E+E | E*E | (E) | a Xét xâu: ω = a + a * a E Thay biến trái nhất: E E * E E⇒E*E ⇒E+E*E ⇒a+E*E ⇒a+a*E ⇒a+a*a + E a a a Thay biến phải nhất: E⇒E*E ⇒E*a ⇒E+E*a ⇒E+a*a ⇒a+a*a Khá c nh au? Thay biến trái nhất: E⇒E+E⇒a+E⇒a+E*E⇒a+a*E⇒a+a*a Thay biến phải nhất: E⇒E+E ⇒E+E*E ⇒E+E*a ⇒E+a*a ⇒a+a*a 9/4/2012 E E + E a E * a E a 72 24 Văn phạm phi ngữ cảnh Suy dẫn trái Cho văn phạm G = (VT, VN, P, S) • Gọi δ suy dẫn trực tiếp từ bên trái γ, ký kiệu γ ⇒L δ tồn xâu x, α, β thỏa mãn điều kiện – γ = xAα ⇒ xβα = δ Luôn thay ký hiệu không kết – A→ β ∈P, thúc bên trái xâu *, x∈V * – α, β ∈V T • Gọi δ suy dẫn từ bên trái γ tồn dãy xâu α0, α1, α2,…,αn thỏa mãn γ = α0 ⇒L α1 ⇒L α2 ⇒L … ⇒L αn = δ – Nếu n ≥ 1, dùng suy dẫn, ký hiệu: γ ⇒L+ δ – Nếu n ≥ 0, khơng suy dẫn nào, ký hiệu: γ ⇒L* δ 9/4/2012 73 Văn phạm phi ngữ cảnh Suy dẫn phải Cho văn phạm G = (VT, VN, P, S) • Gọi δ suy dẫn trực tiếp từ bên phải γ, ký kiệu γ ⇒R δ tồn xâu y, α, β thỏa mãn điều kiện – γ = αAy ⇒ αβy = δ Luôn thay ký hiệu không kết – A→ β ∈P, thúc bên phải xâu *, y∈V * – α, β ∈V T • Gọi δ suy dẫn từ bên phải γ tồn dãy xâu α0, α1, α2,…, αn thỏa mãn: γ = α0 ⇒R α1 ⇒R α2 ⇒R … ⇒R αn = δ – Nếu n ≥ 1, dùng suy dẫn, ký hiệu: γ ⇒R+ δ – Nếu n ≥ 0, không suy dẫn nào, ký hiệu: γ ⇒R* δ 9/4/2012 74 Văn phạm phi ngữ cảnh Văn phạm đơn nghĩa Văn phạm PNC G=(VT,VN,P,S) đơn nghĩa – Với câu ω ∈ L(G) có suy dẫn trái (hoặc suy dẫn phải) ⇔ Chỉ có suy dẫn Ngược lại, có nhiều suy dẫn trái, suy dẫn phải có nhiều suy dẫn ⇒ Văn phạm nhập nhằng Nếu ω ∈ L(G) có nhiều suy dẫn ⇒ Có thể phân tích cú pháp theo nhiều cách ⇒ Nhiều cách hiểu 9/4/2012 75 25 Văn phạm phi ngữ cảnh Văn phạm đơn nghĩa→Ví dụ Văn phạm: E→ E+E | E*E | (E) | a Xâu: ω = a + a * a biên suy dẫn ⇒ Văn pham nhập nhằng E E * + E E E E a a=2 E + E a E * a a a E=8 E a E=6 9/4/2012 76 Văn phạm phi ngữ cảnh Văn phạm đơn nghĩa →Ví dụ G=(VT,VN,P,S) VT = {if, then, else} VN={, } S: P = { →if then →if then else } Xét dạng câu if then if then else 9/4/2012 77 Văn phạm phi ngữ cảnh Văn phạm đơn nghĩa →Ví dụ if if then else then if then if then else if if 9/4/2012 then then else 78 26 Văn phạm phi ngữ cảnh Văn phạm đơn nghĩa→Khử nhập nhằng Đưa thêm ký hiệu không kết thúc sản xuất để văn phạm tương đương E→ E+E | E*E | (E) | a E→ E+T | E*T | T T →(E) | a Luôn thực từ trái qua phải trừ gặp biểu thức ngoặc Phép nhân có độ ưu tiên cao phép cộng không gặp biểu thức ngoặc E→ E+T | T T→ T*F | F F →(E) | a 9/4/2012 79 Văn phạm phi ngữ cảnh Sản xuất đệ quy • Sản xuất đệ quy có dạng: A →αAβ, α,β∈V* • Dùng để biểu diễn q trình lặp hay cấu trúc lồng • Đệ quy trái: A → b|Aa A ⇒ Aa ⇒ Aaa ⇒ Aaaa ⇒ baaaa • Đệ quy phải: A → b|aA A ⇒ aA ⇒ aaA ⇒ aaaA ⇒ aaaab • Đệ quy A → b|aAb VD: A → b|{A} 9/4/2012 A ⇒ {A}⇒ {{A}} ⇒ {{{A}}} ⇒ {{{b}}} 80 Văn phạm phi ngữ cảnh Sản xuất đệ quy →Khử đệ quy trái Khử đệ quy trái cách thêm ký hiệu không kết thúc sản xuất để văn phạm tương đương E→ E+T | T T→ T*F | F F →(E) | a 9/4/2012 E→ TE’ E’ →+TE’ | ε T→ FT’ T’→ *FT’ | ε F →(E) | a 81 27 Văn phạm phi ngữ cảnh Vấn đề phân tích cú pháp (1/4) • Cho văn phạm G = (VT, VN, P, S) L(G) = {ω| ω∈ V*T S ⇒*ω} • Nhiệm vụ phân tích cú pháp xem xét xâu có thuộc ngơn ngữ sản sinh văn phạm không Cho x ∈ V*T; S ⇒*x ? • Nếu xâu x đốn nhận, cần sản xuất sử dụng để sinh – Cấu trúc lên suy dẫn • Tồn phương pháp xuống/dưới lên 82 9/4/2012 Văn phạm phi ngữ cảnh Vấn đề phân tích cú pháp (2/4) • Trên xuống (Top-down) – Xuất phát từ ký hiệu khởi đầu S dần tới nút (xâu cần phân tích), cách áp dụng liên tục sản xuất • Dưới lên (Bottom-up) – Xâu cần phân tích xem xét từ trái qua phải tìm cách thu gọn ký hiệu khưởi đầu S cách áp dụng sản xuất 9/4/2012 83 Văn phạm phi ngữ cảnh Vấn đề phân tích cú pháp (3/4) Xét văn phạm: E→ E+T | T T→ T*F | F F →(E) | a Xâu cần phân tích ω: a+a*a Top-Down E ⇒ E+T ⇒ T+T ⇒ F+T ⇒ a+T ⇒ a+T*F ⇒ a+F*F ⇒ a+a*F ⇒ a+a*a Bottop-Up a+a*a ⇐ F+a*a ⇐ T+a*a ⇐ E+a*a ⇐ E+F*a ⇐ E+T*a ⇐ E+T*F ⇐ E+T ⇐ E 9/4/2012 84 28 Văn phạm phi ngữ cảnh Vấn đề phân tích cú pháp (4/4) • Phân tích quay lui – Tại bước có nhiều sản xuất để lựa chọn – Nếu lựa chọn nhầm thực quay lui Phân tích quay lui tăng thời gian thực • Phân tích tất định – Tại bước xác định sản xuất – Yêu cầu văn phạm cần có tính chất định – Các kỹ thuật • Trên xuống: Phân tích LL(k), Đệ quy xuống, • Dưới lên: Thao tác trước, Phân tích LR(k), 9/4/2012 85 Chương 1: Những khái niệm Ngôn ngữ lập trình cấp cao trình dịch Đặc trưng ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngôn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng 9/4/2012 86 Giới thiệu ngơn ngữ PL/0 mở rộng Dạng chuẩn BNF • Siêu ngữ (metalanguage) – Ngôn ngữ sử dụng lệnh để mơ tả ngơn ngữ khác • Dạng chuẩn BNF – Backus-Normal-Form/Backus-Naur-Form – Là dạng siêu cú pháp để mô tả ngơn ngữ lập trình – BNF sử dụng rộng rãi để mô tả văn phạm ngơn ngữ lập trình, tập lệnh giao thức truyền thông 9/4/2012 87 29 Giới thiệu ngôn ngữ PL/0 mở rộng Ký pháp BNF Là tập luật thỏa mãn: – Vế trái luật cấu trúc cú pháp – Tên cấu trúc cú pháp ký hiệu không kết thúc – Ký hiệu không kết thúc bao cặp – Ký hiệu kết thúc phân cách cặp nháy đơn nháy kép – Mỗi ký hiệu không kết thúc định nghĩa hay nhiều luật – Các luật có dạng N ::= s • N ký hiệu khơng kết thúc, • s xâu gồm hay nhiều ký hiệu kết thúc không kết thúc – Các luật có chung vế trái phân cách | 9/4/2012 88 Giới thiệu ngôn ngữ PL/0 mở rộng Ký pháp BNF→Ví dụ • Mơ tả cách viết số nguyên, thực dấu phẩy tĩnh ::=’-’| ::=|’.’ ::=| ::=’0’|’1’|’2’|’3’|’4’|’5’|’6’|’7’|’8’|’9’ 9/4/2012 89 Giới thiệu ngôn ngữ PL/0 mở rộng Ký pháp EBNF (Extended BNF ) Được phát triển từ BNF, có ký pháp tương tự đơn giản hoá cách dùng số ký hiệu đặc biệt : – Không cần dùng ‘ ’ cho ký hiệu kết thúc – Dùng [ ] để phần bên tuỳ chọn (có khơng) – Dùng { } phần bên lặp lại số lần tuỳ ý không xuất lần • Nếu lặp lại m hay n lần , dùng m hay n số – Dùng ( | ) cho biết lựa chọn ký hiệu nằm bên 9/4/2012 90 30 Giới thiệu ngôn ngữ PL/0 mở rộng Ký pháp EBNF → Ví dụ • S→a {b} • S→ [a]α • S→ (a|b|c)α Trong BNF ⇔ ⇔ ⇔ S→a |ab|abb|… S→ α |a α S→ aα | bα | cα BNF >< EBNF ::= ‘IF’ ‘THEN’ | ‘IF’ THEN ‘ELSE’ Trong EBNF ::= IF THEN [ELSE ] 9/4/2012 91 Giới thiệu ngôn ngữ PL/0 mở rộng Sơ đồ cú pháp • Là cơng cụ để mơ tả cú pháp ngơn ngữ lập trình dạng đồ thị • Mỗi sơ đồ cú pháp đồ thị định hướng với lối vào lối xác định • Mỗi sơ đồ cú pháp có tên 9/4/2012 92 Giới thiệu ngơn ngữ PL/0 mở rộng Ngơn ngữ PL/0 • Được giới thiệu Niklaus Wirth năm 1975 – Trong Algorithms + Data Structures = Programs • Là ngơn ngữ lập trình phục vụ giáo dục – Tựa Pascal, chứa đặc trưng NNLT cấp cao Đặc trưng • Từ vựng: – – – – Chữ cái: a z, A Z ; Chữ số: Dấu đơn: + - * / % ( ) [ ] > < = , ; Dấu kép: := >= Expression >= < Expression b then a = a – b else b = b – a; d = b; End; Begin Readln(a); Readln(b); gcd(a,b,c); Writeln(c); End 9/4/2012 100 Giới thiệu ngôn ngữ KPL (Kyoto Programming Language) Phân tích chương trình PL/0 mở rộng Program Vidu; Begin X := 10 End ω = Program Vidu ; Begin X := 10 End L(ω) = ⇒* ω? 9/4/2012 101 Giới thiệu ngơn ngữ KPL (Kyoto Programming Language) Phân tích chương trình PL/0 mở rộng Ident(Vidu), Ident (X), Number(10) xác định phân tích từ vựng ⇒ Program Ident ; ⇒ Program Vidu; ⇒ Program Vidu; Begin End ⇒Program Vidu; Begin Ident := End ⇒Program Vidu; Begin X:= End ⇒Program Vidu; Begin X:= End ⇒Program Vidu; Begin X:= End ⇒Program Vidu; Begin X:= Number End ⇒Program Vidu; Begin X:=10 End 9/4/2012 102 34 ... trình dịch đặc trưng • Ngơn ngữ nguồn dịch S • Ngơn ngữ đích T • Ngôn ngữ cài đặt I S T I 9/4/2012 10 Ngơn ngữ lập trình cấp cao trình dịch Xây dựng chương trình dịch Viết chương trình dịch L... Những khái niệm Ngôn ngữ lập trình cấp cao trình dịch Đặc trưng ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngôn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng... ngơn ngữ lập trình cấp cao Các giai đoạn chương trình dịch Khái niệm ngôn ngữ Văn phạm phi ngữ cảnh Giới thiệu ngôn ngữ PL/0 mở rộng 9/4/2012 12 Đặc trưng ngơn ngữ lập trình cấp cao Các hệ ngơn ngữ

Ngày đăng: 24/03/2014, 16:22

Từ khóa liên quan

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

Tài liệu liên quan