(Luận văn thạc sĩ) phương pháp dựa trên hệ thống kiểu để tính cận trên tài nguyên của các chương trình featherweight java có giao tác

85 69 0
(Luận văn thạc sĩ) phương pháp dựa trên hệ thống kiểu để tính cận trên tài nguyên của các chương trình featherweight java có giao tác

Đ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

3 MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN MỤC LỤC DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG .7 DANH MỤC CÁC HÌNH VẼ PHẦN MỞ ĐẦU Tính cấp thiết đề tài .8 Mục tiêu luận văn Công cụ phần mềm Phƣơng pháp nghiên cƣ́u Bố cục luận văn CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ .10 1.1 Các lý thuyết tảng hệ thống kiểu 10 1.1.1 Khái niệm hệ thống kiểu 10 1.1.2 Vai trò của hệ thống kiểu 11 1.1.3 Các thuộc tính hệ thống kiểu 13 1.1.4 Các ứng dụng ý nghĩa kinh tế hệ thống kiểu 14 1.1.5 Hệ thớng kiểu việc thức hóa ngơn ngữ kiểu 16 1.2 Bộ nhớ giao tác phần mềm 18 1.2.1 Khái niệm thuộc tính giao tác .18 1.2.2 Bộ nhớ giao tác phần mềm 19 CHƢƠNG FEATHERWEIGHT JAVA CÓ GIAO TÁC 23 2.1 Cú pháp .23 2.2 Các ngữ nghĩa 24 2.2.1 Ngữ nghĩa cục .24 2.2.2 Ngữ nghĩa toàn cục 26 CHƢƠNG HỆ THỐNG KIỂU CHO TFJ 30 3.1 Các kiểu .30 3.2 Các qui tắc kiểu 38 3.2.1 Qui tắc cục bộ .38 3.2.2 Qui tắc toàn cục 41 CHƢƠNG THUẬT TỐN KIỂU VÀ CƠNG CỤ 44 4.1 Xây dựng cú pháp cho TFJ với ANTLR 44 4.1.1 Cơ sở lý thuyết cú pháp đƣợc hỗ trợ ANTLR 44 4.1.2 Bộ đặc tả cú pháp cho TFJ với ANTLR V3 .45 4.2 Xây dựng thuật tốn tính kiểu 48 4.2.1 Rút gọn chuỗi số có dấu chuỗi số tắc .48 4.2.2 Mô tả phép tốn cộng ⊕ chuỗi số có dấu tắc 49 4.2.3 Mơ tả phép tốn gộp ⊗ chuỗi số có dấu tắc 50 4.2.4 Mơ tả phép tốn điều kiện , phép tốn chọn ⊙, chuỗi số có dấu tắc 50 4.2.5 Tính tốn giá trị mức giới hạn tổng chi phí tài nguyên cho chƣơng trình TFJ 51 CHƢƠNG THỰC NGHIỆM 58 KẾT LUẬN 63 TÀI LIỆU THAM KHẢO 64 PHỤ LỤC .65 PHỤ LỤC CÁC CÔNG CỤ HỖ TRỢ CÀI ĐẶT THỰC NGHIỆM 65 PHỤ LỤC BẢNG MÔ TẢ CHI TIẾT ĐẶC TẢ CÚ PHÁP TFJ TRÊN ANTLR V3 69 PHỤ LỤC BẢNG MƠ TẢ CÁC PHƢƠNG THỨC TRONG CHƢƠNG TRÌNH 85 DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT STT CHỮ VIẾT TẮT, THUẬT NGỮ, KÝ HIỆU GIẢI NGHĨA CHỮ VIẾT TẮT FJ –Featherweigh Java STM - Software Transactional Memory TFJ – Transactional Featherweight Java Một ngôn ngữ Java tối giản để nghiên cứu tính chất Java Bộ nhớ giao tác phần mềm, giải pháp viết chƣơng trình tƣơng tranh, thay cho chế đồng dựa khóa Là ngơn ngữ mở rộng FJ tích hợp mơ hình nhớ giao tác phần mềm THUẬT NGỮ 10 11 12 13 14 15 16 Type System Transaction Thread Excution errors Syntactic mechanism Type checker Well-behaved Well-formed Ill-behaved Execution error Well-typed Ill-typed ADT-Abstract Data Type Efficiency Compositionality Guarantee Static phase 17 18 Dynamic phase Hệ thống kiểu Giao tác Luồng Lỗi thực thi Cơ chế cú pháp Bộ kiểm tra kiểu Tính chất hành xử chƣơng trình Tính chất thiết lập đúng chƣơng trình Tính chất hành xử yếu chƣơng trình Lỗi thực thi Mợt chƣơng trình đƣợc thơng qua bợ kiểm tra kiểu đƣợc gọi là kiểu tốt Một chƣơ ng trì nh không đƣợc thông qua bởi bộ kiểm tra kiểu đƣợc gọi là kiểu yếu Kiểu liệu trừu tƣợng Hiệu suất chƣơng trình Tính thành phần Tính đảm bảo Pha tĩnh, đặc tả bởi tập các qui tắc đánh giá kiểu mợt biểu thƣ́c nói riêng chƣơng trình nói chung có là well-formed Pha đợng, mơ tả chƣơng trình đƣợc thực hiện nhƣ thế nào 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Atomicity Consistency Isolation Durability Onacid Commit Lock-based synchronization Nested transactions Multi-threaded Spawn Joint commits Local semantics Global semantics Local enviroments Global enviroments Syntax Term Tính nguyên tử Tính quán Tính độc lập Tính bền vững Trạng thái mở giao tác Trạng thái kết thúc giao tác Đồng hóa dựa khóa Các giao tác lồng Đa luồng Sinh luồng Các commit luồng song song đồng thời thực kết thúc giao tác chung Ngữ nghĩa cục Ngữ nghĩa tồn cục Mơi trƣờng cục Mơi trƣờng tồn cục Cú pháp Các thành phần biểu thức cú pháp KÝ HIỆU + m - m # m ¬ m Mô tả thành phần + hệ thống kiểu dựa chuỗi số có dấu, m thao tác onacid liên tiếp Mô tả thành phần – hệ thống kiểu dựa chuỗi số có dấu, m thao tác commit liên tiếp Mô tả thành phần # hệ thống kiểu dựa chuỗi số có dấu, m giao tác lồng Mơ tả thành phần ¬ thể số lƣợng joint commit hệ thống kiểu dựa chuỗi số có dấu DANH MỤC CÁC BẢNG Bảng 2.1 Cú pháp TFJ [17] 23 Bảng 2.2 Ngữ nghĩa cục [17] 25 Bảng 2.3 Ngữ nghĩa toàn cục [17] 27 Bảng 3.1 Hệ thống kiểu mức cục bộ[17] 40 Bảng 3.2 Hệ thống kiểu mức toàn cục[17] 41 Bảng 4.1 Tổng quát hóa rule EBNF [18] 44 Bảng 4.2 Bảng kết kiểm thử phép tốn tắc chuỗi số có dấu 49 Bảng 4.3 Bảng kết kiểm thử phép tốn cộng chuỗi số có dấu tắc 50 Bảng 4.4 Bảng kết kiểm thử phép tốn gộp chuỗi số có dấu tắc 50 Bảng 4.5 Bảng kết kiểm thử phép tốn chọn chuỗi số có dấu tắc 51 Bảng PL-0 Chú giải chi tiết rule cú pháp ngôn ngữ TFJ 69 Bảng PL-0 Mô tả phƣơng thức dùng để tính tốn giới hạn chi phí tài ngun 85 DANH MỤC CÁC HÌNH VẼ Hình 1.1 Hệ thống kiểu trình biên dịch[10] 17 Hình 1.2 Sơ đồ trạng thái giao tác 18 Hình 1.3 Ví dụ giả mã cho mơ hình giao tác lồng đa luồng 20 Hình 1.4 Ví dụ mơ hình giao tác lồng, đa luồng joint 20 Hình 1.5 Ví dụ mơ hình giao tác thể tính phụ thuộc luồng song song 21 Hình 3.1 Mơ tả hai thành phần # liền kề 32 Hình 3.2 Minh họa ý nghĩa thành phần ¬ 34 Hình 3.3 Mơ hình mơ tả spawn thời điểm cuối biểu thức 40 Hình 4.1 Mơ tả bƣớc lấy đƣợc chuỗi StringTFJPrimitive 47 Hình 4.2 Mơ tả giai đoạn để tính giá trị giới hạn tài nguyên 51 Hình 4.3 Mơ hình chƣơng trình TFJ cho Ví dụ 4.3 53 Hình 4.4 Minh họa ví dụ giai đoạn để tính giới hạn tổng chi phí tài ngun 53 Hình 5.1 Mơ hình giao tác Thực nghiệm 58 Hình 5.2 Chạy mã Thực nghiệm công cụ 59 Hình 5.3 Mơ hình giao tác cho Thực nghiệm 61 Hình 5.4 Chạy mã Thực nghiệm cơng cụ tính kiểu tự động 62 Hình PL-0 Tạo Project 66 Hình PL-0 Tạo tệp ngữ pháp ANTLR 68 PHẦN MỞ ĐẦU Tính cấp thiết đề tài Gần máy tính điện thoại đƣợc trang bị nhiều xử lý hay xử lý có nhiều nhân (core) Để khai thác hết khả chạy song song xử lý cần có tiến trình luồng (process, thread) có khả tính tốn song song Các ngơn ngữ lập trình truyền thống sử dụng chế khóa đồng (lock, synchronization) để tiến trình hoạt động truy cập đến biến dùng chung Tuy nhiên, phƣơng pháp dễ gây khóa chết (deadlock) lỗi tiềm ẩn khó phát sửa chữa Software Transactional Memory (STM- nhớ giao tác phần mềm) [15], giải pháp để viết chƣơng trình song song sử dụng chế giao tác (transaction) hệ quản trị sở liệu thay cho chế đồng dựa khóa việc chia sẻ nhớ đồng thời STM xử lý với nhớ thông qua giao tác, giao tác cho phép tự đọc ghi để chia sẻ biến đƣợc khởi động (onacid) log đƣợc sử dụng để ghi hoạt động thời điểm kết thúc (commit) Tuy nhiên, vấn đề phát sinh mơ hình STM sử dụng thêm nhiều tài nguyên (bộ nhớ, xử lý), log thơng tin, biến, tính tốn để thực commit rollback tính tốn bị thất bại xong Hệ thống kiểu phƣơng pháp phân tích tĩnh dựa qui tắc kiểu đặt để đƣa khẳng định chƣơng trình có thành lập an tồn hay khơng, từ đó, hạn chế lỗi tiềm tàng xảy Hệ thống kiểu ƣớc lƣợng an tồn thơng tin tài ngun sử dụng chƣơng trình mà khơng cần thực thi nó[5] Việc có ý nghĩa thực tiễn với chƣơng trình cho ta biết đƣợc trƣờng hợp xấu cần nhớ Một số hệ thống kiểu trƣớc giải vấn đề tính tốn tài ngun tĩnh cho chƣơng trình có giao tác thơng qua thể phân cấp [13] tổng tài nguyên đƣợc tính theo ngun tắc cộng dồn, giới hạn tổng tài nguyên đƣa số lớn Luận văn nghiên cứu hệ thống kiểu [17] sử dụng chƣơng trình Featherweight Java có giao tác (Transactional Featherweight Java, gọi tắt TFJ) Hệ thống kiểu ƣớc lƣợng tài nguyên tiêu tốn xác so với nghiên cứu trƣớc [6, 13] Những vấn đề nêu sở khoa học thực tiễn để thực đề tài “Phương pháp dựa hệ thống kiểu để tính cận tài ngun chương trình Featherweight Java có giao tác” Mục tiêu luận văn Trên sở nghiên cứu lý thuyết hệ thống kiểu , để xác định tài nguyên chƣơng trình Featherweight Java có giao tác (TFJ) [17], đề tài đƣa phƣơng pháp tính tài ngun chƣơng trình TFJ cài đặt cơng cụ phần mềm có khả tính tài ngun sử dụng chƣơng trình TFJ Cơng cụ phần mềm Sử dụng thƣ viện cơng cụ hỗ trợ ANTLR để phân tích mã nguồn chƣơng trình TFJ Các cơng cụ lập trình NET ngôn ngữ C # để cài đặt thuật tốn chƣơng trình Phƣơng pháp nghiên cƣ́u Để đề tài đạt đƣợc kết nhƣ mục tiêu đặt ra, luận văn đề xuất áp dụng phƣơng pháp nghiên cứu nhƣ sau: - Nghiên cứu tài liệu: Nghiên cứu hệ thống kiểu nói chung tập trung vào hệ thống kiểu cho chƣơng trình TFJ nhƣ nêu [17] Đây mảng kiến thức mới, khơng đƣợc học trƣờng địi hỏi nhiều kiến thức tảng liên quan Đồng thời tơi phải nghiên cứu thuật tốn dựa hệ thống kiểu đề xuất để tính tài ngun cho chƣơng trình TFJ - Cài đặt, thực nghiệm: Nghiên cứu công cụ phân tích chƣơng trình thƣ viện hỗ trợ (ANTLR) để sử dụng phân tích chƣơng trình đầu vào Từ cài đặt thuật tốn đề xuất, đồng thời chạy thử, kiểm tra tính đắn cơng cụ Bố cục luận văn Trong luận văn sẽ đƣợc thƣ̣c hiện bởi các phần bản: - Phần mở đầu: Đƣa tính cấp thiết đề tài, cơng cụ phần mềm sử dụng, phƣơng pháp nghiên cứu bố cục luận văn - Chƣơng 1: Nghiên cƣ́u số kiến thức sở hệ thống kiểu nhớ giao tác phần mềm - Chƣơng 2: Nghiên cứu cú pháp ngữ nghĩa tổng qt chƣơng trình Featherweight Java có giao tác - Chƣơng 3: Nghiên cứu hệ thống kiểu cho chƣơng trình TFJ: Đị nh nghĩa, tập qui tắc kiểu dựa chuỗi số có dấu - Chƣơng 4: Xây dựng thuật tốn tính kiểu cơng cụ: Các phép tốn tính tốn kiểu, tính giới hạn tổng chi phí tài ngun cho chƣơng trình TFJ - Chƣơng 5: Thực nghiệm: Kiểm tra chƣơng trình tính kiểu xây dựng Chƣơng thơng qua ví dụ thực nghiệm với chƣơng trình TFJ - Kết luận: Tổng hợp kết đạt đƣợc, tồn hƣớng mở rộng đề tài 10 CHƢƠNG MỘT SỐ KIẾN THỨC CƠ SỞ 1.1 Các lý thuyết tảng hệ thống kiểu 1.1.1 Khái niệm hệ thống kiểu Hệ thống kiểu (type system) toán học xuất từ đầu kỷ 19 Đến hệ thống kiểu có sức ảnh hƣởng có ý nghĩa to lớn [1] Đã có nhiều quan điểm khác hệ thống kiểu: Một hệ thống kiểu phƣơng pháp kiểm soát cú pháp cho việc chứng minh vắng mặt hành vi chƣơng trình cách phân loại thành phần theo kiểu cho giá trị tính toán [1] Luca Cardelli phát biểu rằng: Hệ thống kiểu phƣơng pháp thức ngăn chặn lỗi thực thi trình chạy chƣơng trình [3, 5] Dƣới góc độ ngƣời lập trình, mợt hệ thống kiểu là tập các chú thí ch kiểu chế kiểm tra trợ giúp cho ngƣời lập trình Với ngƣời viết trì nh dị ch , một hệ thớng kiểu là ng̀n thơng tin đƣợc sƣ̉ dụng để tối ƣu mã máy sinh Theo lý thuyết ngôn ngữ, một hệ thống kiểu là một qui tắc để qui định cấu trúc lập luận về ngơn ngƣ̃ Nói tóm lại hệ thống kiểu đóng vai trò quan trọng với ngôn ngữ lập trình [8] Ta khái qt hóa khái niệm hệ thống kiểu nhƣ sau: Hệ thống kiểu là một chế cú pháp (syntactic mechanism) ràng buộc cấu trúc mợt chương trình bởi việc kết hợp các thơng tin ngữ nghĩ a với các thành phần chương trình giới hạn phạm vi các thành phần Theo đặc trƣng ngơn ngữ đƣợc thiết kế hệ thống kiểu đòi hỏi mỗi biến chƣơng trì nh phải có miền giá trị cụ thể mà nó có thể tham chiếu , mỗi khai báo hàm cũng phải thao tác các kiểu đối số cụ thể và trả về giá trị của kiểu cụ thể Thông tin này có thể đƣợc khai báo rõ ràng bằng cách sƣ̉ dụng các chú thí ch kiểu hoặc suy bởi bộ kiểm tra kiểu (type checker) Khi một chƣơng trì nh đƣợc biên dị ch , một bộ kiểm tra kiểu này đảm bảo rằng mỗi biến chỉ đƣợc gán đúng kiểu của giá trị và các hàm chỉ đƣợc gọi với tham số kiểu Các ngôn ngữ hạn chế phạm vi biến đƣợc gọi ngôn ngữ kiểu , nhƣ ML C Ngƣợc lại, ta hiểu ngơn ngữ phi kiểu, nhƣ LISP, Assembler Một hệ thống kiểu là thành phần của mợt ngơn ngƣ̃ kiểu, có vai trị theo dõi kiểu biến kiểu của tất cả các biểu thƣ́c chƣơng trì nh Trong ngơn ngữ có hệ thống kiểu mà giƣ̃ cho tất cả chƣơng trì nh chạy đƣợc ngôn ngƣ̃ lập trì nh cụ thể, nói ngơn ngữ kiểu tốt (well typed) Nó chỉ rằng, một phân tí ch cẩn thận là cần thiết để tránh nhƣ̃ng tuyên bố sai cho các ngôn ngƣ̃ lập trì nh Một hệ thống kiểu đƣợc sƣ̉ dụng để xác đị nh liệu chƣơng trì nh có đƣợc coi well-behaved (hành xử đúng) Do vậy, chƣơng trình đƣợc thực theo hệ thống 11 kiểu nên đƣợc xem xé t là các chƣơng trì nh thƣ̣c sƣ̣ của ngơn ngƣ̃ kiểu , chƣơng trình khác nên đƣợc loại bỏ trƣớc chạy Khi phát triển một cách đúng đắn , hệ thống kiểu cung cấp công cụ khái niệm để đánh giá một cách đầy đủ cá c khí a cạnh quan trọng của các đị nh nghĩ a ngôn ngƣ̃ Mô tả ngôn ngƣ̃ chí nh thƣ́c thƣờng không xác đị nh cấu trúc của một ngôn ngƣ̃ đầy đủ chi tiết để cho phép thƣ̣c thi rõ ràng Thƣờng xảy với các trì nh biên dị ch khác cho ngôn ngữ cài đặt hệ thống kiểu khác Hơn nƣ̃a, nhiều đị nh nghĩ a ngôn ngƣ̃ đã đƣợc tì m thấy là kiểu khơng đúng đắn , theo mợt chƣơng trì nh có thể sụp đổ mặc dù các đánh giá đƣợc chấp nhận bởi bộ k iểm tra kiểu Lý tƣởng , hệ thớng kiểu thức nên phần định nghĩa tất ngôn ngữ lập trình đƣợc định kiểu Bằng cách này, thuật tốn kiểm tra kiểu đƣợc đo đạc cách rõ ràng dựa vào thông số kỹ thuật chí nh xác nếu tất cả có thể và khả thi , ngôn ngƣ̃ có thể đƣợc thể hiện là kiểu đúng đắn Một ngôn ngƣ̃ đƣợc đị nh kiểu bởi sƣ̣ tồn tại của hệ thống kiểu cho nó , có hay khơng các kiểu cú phá p chƣơng trì nh Các ngôn ngữ kiểu đƣợc định kiểu rõ ràng nếu các kiểu là thành phần của cú pháp Tuy vậy, ta phải khẳng định không có ngôn ngƣ̃ chí nh thống hoàn toàn đƣợc đị nh kiểu , ngôn ngữ nhƣ ML Haskell hỗ trợ viết các đoạn chƣơng trì nh lớn , nơi các thông tin kiểu đƣợc bỏ qua , hệ thống kiểu ngôn ngƣ̃ tƣ̣ động gán các kiểu cho các đoạn chƣơng trì nh nhƣ vậy Do tùy tốn mà áp dụng ngơn ngữ định kiểu hay ngôn ngữ không định kiểu để cài đặt 1.1.2 Vai trò của hệ thống kiểu Hệ thống kiểu cần thiết cho ngơn ngữ lập trình Thơng thƣờng hệ thống kiểu các ngôn ngƣ̃ lập trì nh có vai trò chí nh [8] thể hiện: a) Phát lỡi Trong q trình thực thi xảy loại lỗi khác nhau, có lỗi có tác động đến kết chƣơng trình có lỗi kết làm thay đổi liệu mà khơng có tác động Ví dụ nhƣ: Ví dụ 1.1 Lỗi lệnh không hợp lệ khai báo biến C# Trong khai báo từ biến C# int x; Lỗi khơng hợp lệ C# khơng cho phép khai báo biến mà không gán trị Và lỗi gây tác động dừng thực thi Ta sửa cho cách gán trị cho nhƣ: int x=0; 12 Ví dụ 1.2 Lỗi không hợp lệ khai báo tham số không phù hợp C# private static int sum(String x, String y) { int result = x+y; return result; } Lỗi hồn tồn khơng hợp lệ lẽ biến result biến kiểu int x,y hai biến có kiểu String Điều ngơn ngữ C# không cho phép lỗi dẫn đến dừng chƣơng trình Ta sửa lại cho thành: private static int sum(String x, String y) { int result = Int32.Parse(x)+ Int32.Parse(y); return result; } Tuy nhiên có nhiều dạng lỗi thƣ̣c thi mà kết quả thay đổi dƣ̃ liệu mà không có tác động lập tƣ́c Ví dụ nhƣ phƣơng thức tính giai thừa C# cho nhƣ sau: Ví dụ 1.3 Tính giai thừa số nguyên n private int fact(int n) { if(n>0) return n * fact(n – 1); return 1; } Đối với chƣơng trình trình biên dịch hồn tồn khơng phát lỗi nhƣ đƣa giá trị đầu vào hợp lý nhƣ n=2 n=5, … Tuy nhiên, n=27 chƣơng trình thơng báo lỗi q phạm vi cho phép kiểu int C# (32bit) Một mục đích hệ thống kiểu ngăn chặn xuất hiện của lỗi thực thi (Ví dụ 1.1 Ví dụ 1.2), lỗi mà xảy thời gian chạy chƣơng trình Bên cạnh đó, có lỗi thực thi tiềm tàng, hệ thống kiểu phát nhƣ Ví dụ 1.3 Do đó, độ xác hệ thống kiểu phụ thuộc vào vấn đề tinh tế tạo lỗi thực thi (execution error) Hệ thống kiểu theo dõi các kiểu của các đới sớ , chúng phát phần mã lệnh gán giá trị không hợp lệ Hệ thống kiểu có thể phát hiện lỗi luồng dƣ̃ liệu logic chƣơng trì nh.Vì vậy, chúng đả m bảo sƣ̣ vắng mặt của lớp nào đó của các lỗi lập trì nh tƣ̀ các chƣơng trì nh Nhiều lỗi lập trì nh là sƣ̉ dụng dƣ̃ liệu sai ở các vị trí sai Hệ thống kiểu phân chia vùng giá trị hợp lệ có thể xuất hiện ngƣ̃ cảnh của chƣơng trì nh và kiểm tra 73 | INTEGER ; Sơ đồ: Mô tả: Đặc tả giá trị mặc định tham số, ta chỉ xét cho trƣờng hợp giá trị mặc định kiểu số nguyên kiểu xâu Ngoài mở rộng ta xây dựng kiểu số nhƣ: REAL, CHAR, kiểu đối tƣợng … block Block : '{' statement* '}' ; Sơ đồ: Mô tả: Đặc tả thân phƣơng thức, bao gồm tập lệnh nằm cặp ngoặc '{', '}' modifiers modifiers : modifier* ; Sơ đồ: Mơ tả: Đặc tả tính chất phƣơng thức, tính chất có khơng modifier Modifier : 'public' | 'protected' | 'private' | 'static' | 'abstract' | 'final' | 'native' | 'synchronized' | 'transient' | 'volatile' | 'strictfp' 74 ; Sơ đồ: Mơ tả: Các tính chất phƣơng thức typeData typeData : primitiveType | arrayType ; Sơ đồ: Mô tả: Các kiểu liệu trả liệu bản, bao gồm có kiểu nguyên thủy (primitiveType) kiểu mảng (arrayType) primitiveType primitiveType : 'bool' | 'string' | 'char' | 'byte' | 'short' | 'int' | 'long' | 'float' | 'double' ; Sơ đồ: 75 Mơ tả: Danh sách kiểu ngun thủy chọn arrayType arrayType :primitiveType 'array' '[' INTEGER ' ' INTEGER ']' ; Sơ đồ: Mô tả: Định nghĩa kiểu dạng mảng phần tử kiểu nguyên thủy statement Statement : variable | readStatement | writeStatement | assignment | ifStatement | methodCall | onacidStatement | commitStatement | spawnStatement | endspawnStatement | returnStatement ; Sơ đồ: 76 Mô tả: Đặc tả lệnh, bao gồm khai báo biến (variable), câu lệnh đọc giá trị từ bàn phím (readStatement), câu lệnh in hình giá trị (writeStatement), phép gán (assignment) câu lệnh điều kiện (ifStatement) , lời gọi phƣơng thức (methodCall), khối lệnh mở, đóng giao tác (onnacidStatement, commitStatement), khối lệnh sinh luồng, kết thúc luồng (spawnStatement, endspawnStatement), câu lệnh trả giá trị (returnStatement) variable Variable :primitiveType nameVariable (',' nameVariable)* ('=' expression)? ';' |nameTypeOBJ nameVariableOBJ newAsign ';' ; Sơ đồ: Mô tả: Đặc tả khai báo biến, bao gồm có khai báo biến kiểu nguyên thủy khai báo biến kiểu nameVariable nameVariable : IDENT ; Sơ đồ: Mơ tả: 77 Định nghĩa tên biến có kiểu nguyên thủy, xâu bao gồm chữ số (IDENT) nameTypeOBJ nameTypeOBJ : IDENT ; Sơ đồ: Mô tả: Định nghĩa tên kiểu đối tƣợng ngƣời lập trình định nghĩa, xâu bao gồm chữ số (IDENT) nameVariableOBJ nameVariableOBJ : IDENT ; Sơ đồ: Mơ tả: Định nghĩa tên biến có kiểu đối tƣợng, xâu bao gồm chữ số (IDENT) newAsign newAsign : '=' 'new' nameTypeOBJ ; Sơ đồ: Mơ tả: Phần cịn lại phép khởi tạo biến đối tƣợng thơng qua từ khóa 'new' readStatement readStatement :'read(' STRING_LITERAL ',' IDENT (',' IDENT)* ')' ';' |'read(' IDENT ')' ';' ; Sơ đồ: Mô tả: Đọc giá trị từ bàn phím writeStatement writeStatement : 'write(' STRING_LITERAL ')' ';' | 'write(' IDENT ')' ';' | 'write(' STRING_LITERAL ',' IDENT ')' ';' ; 78 Sơ đồ: Mô tả: In hình giá trị assignment Assignment : IDENT ':=' expression ';' ; Sơ đồ: Mô tả: Câu lệnh biểu diễn phép gán biến với biểu thức ifStatement ifStatement : 'if' expression block ('else' block)? ; Sơ đồ: Mơ tả: Câu lệnh điều kiện bao gồm có thành phần 'if' có thành phần 'else' methodCall methodCall : 'this.' nameMethodCall '(' actualParameters? ')' ';' | IDENT '.' nameMethodCall '(' actualParameters? ')' ';' ; Sơ đồ: Mô tả: Đặc tả lời gọi phƣơng thức lớp thơng qua từ khóa 'this' phƣơng thức từ lớp ngồi thơng qua đối tƣợng Các phƣơng thức có giá trị tham số tƣơng ứng với kiểu định nghĩa phƣơng thức lớp nameMethodCall nameMethodCall 79 : IDENT ; Sơ đồ: Mô tả: Tên phƣơng thức actualParameters actualParameters : valueParameter valueParameterRest ; Sơ đồ: Mô tả: Các giá trị tham số có phƣơng thức valueParameterRest valueParameterRest :(',' valueParameter)* ; Sơ đồ: Mô tả: Đặc tả thành phần có nhiều giá trị tham số valueParameter valueParameter : parameterOfString | parameterOfInt ; Sơ đồ: Mô tả: Giá trị tham số kiểu liệu xâu (parameterOfString) kiểu INTEGER (parameterOfInt) parameterOfString parameterOfString : STRING_LITERAL ; Sơ đồ: Mô tả: Đặc tả giá trị tham số kiểu xâu 80 parameterOfInt parameterOfInt : INTEGER ; Sơ đồ: Mô tả: Đặc tả giá trị tham số kiểu số returnStatement returnStatement : 'return' expression ';' ; Sơ đồ: Mô tả: Đặc tả cấu trúc trả giá trị phƣơng thức onacidStatement onacidStatement : 'onacid' ; Sơ đồ: Mô tả: Mở giao tác commitStatement commitStatement : 'commit' ; Sơ đồ: Mô tả: Đóng giao tác spawnStatement spawnStatement : 'spawn' ; Sơ đồ: Mô tả: Lệnh sinh luồng endspawnStatement endspawnStatement : 'endspawn' ; 81 Sơ đồ: Mơ tả: Lệnh đóng luồng term Term : | | | | | ; IDENT '(' expression ')' INTEGER STRING_LITERAL CHAR_LITERAL methodCall Sơ đồ: Mô tả: Đặc tả đơn vị thành phần biểu thức, bao gồm: Tên biến, tên đối tƣợng (IDENT) , biểu thức ('(' expression ')'), số (INTEGER), xâu (STRING_LITERAL), ký tự (CHAR_LITERAL), lời gọi phƣơng thức (methodCall) negation negation : 'not'* term ; Sơ đồ: Mô tả: Phép phủ định phần tử unary Unary : ('+' | '-')* negation ; Sơ đồ: 82 Mô tả: Đặc tả dấu phần tử mult Mult : unary (('*' | '/' | 'mod') unary)* ; Sơ đồ: Mô tả: Đặc tả phép toán nhân chia, lấy dƣ biểu thức add Add : mult (('+' | '-') mult)* ; Sơ đồ: Mơ tả: Đặc tả phép tốn cộng trừ biểu thức relation Relation : add (('=' | '/=' | '') add)* ; Sơ đồ: Mơ tả: Đặc tả phép tốn quan hệ biểu thức quan hệ expression Expression : relation (('and' | 'or') relation)* ; Sơ đồ: 83 Mô tả: Đặc tả phép toán logic biểu thức logic MULTILINE_COMMENT MULTILINE_COMMENT : '/*' * '*/' {Skip();}; Sơ đồ: Mô tả: Đặc tả thích nhiều dịng Các thích đƣợc loại bỏ phân tích cú pháp STRING_LITERAL STRING_LITERAL : '"' ( '"' '"' | c=~('"'|'\r'|'\n') )* '"' ; Sơ đồ: Mô tả: Đặc tả chuỗi ký tự đặc biệt CHAR_LITERAL CHAR_LITERAL : '\'' '\'' ; Sơ đồ: Mô tả: Đăck tả ký tự đặc biệt fragment LETTER fragment LETTER : ('a' 'z' | 'A' 'Z') ; Sơ đồ: 84 Mô tả: Đặc tả phạm vi chuỗi ký tự fragment DIGIT fragment DIGIT : '0' '9'; Sơ đồ: Mô tả: Đặc tả phạm vi chữ số INTEGER INTEGER : DIGIT+ ; Sơ đồ: Mô tả: Đặc tả kiểu số nguyên IDENT IDENT : LETTER (LETTER | DIGIT)*; Sơ đồ: Mô tả: Đặc tả xâu bao gồm chuỗi ký tự chữ số, tron chữ số khơng đƣợc đứng đầu WS WS : (' ' | '\t' | '\n' | '\r' | '\f')+ {Skip();}; Sơ đồ: Mô tả: Đặc tả ký tự: ký tự trắng ký tự kết thúc câu, dòng, đoạn … Các chuỗi đƣợc bỏ qua phân tích cú pháp COMMENT COMMENT : '//' * ('\n'|'\r') {Skip();}; Sơ đồ: Mô tả: Đặc tả dịng thích Dịng thích đƣợc loại bỏ phân tích cú pháp 85 PHỤ LỤC BẢNG MÔ TẢ CÁC PHƢƠNG THỨC TRONG CHƢƠNG TRÌNH Bảng PL-0 Mơ tả phương thức dùng để tính tốn giới hạn chi phí tài ngun PHƢƠNG THỨC private static bool isSignal(char signal) Mô tả Kiểm tra ký tự có dấu {+, -, #, :}, trả giá trị True thuộc dấu Ví dụ isSignal (‘+’) = True private static int getAfterClusterIndex(String S, int index) Mô tả Lấy chỉ số dấu liền sau ký tự có chỉ số index chuỗi số có dấu S Ví dụ getAfterClusterIndex(‚+3#44+2:5‛, 2)=5 private static String sign(String S) Mô tả Lấy dãy dấu từ trái sang phải có chuỗi số có dấu S Ví dụ Sign(‚+3#44+2:5‛)= ‚+#+:‛ private static bool isSharpN(String S) Mô tả Kiểm tra số có dấu có dạng #n hay không, trả True S[0]=’#’ n>0, ngƣợc lại trả False Ví dụ isSharpN(‚#4‛)= True; isSharpN(‚-1‛)=False; isSharpN(‚#0‛)=False public static String canonical(String S) Mơ tả Chính tắc hóa chuỗi số đánh dấu S Ví dụ canonical(‚+1+2+1-1-2+1:3‛)= ‚+1#3+1:3‛ public static String sum(String S1, String S2) Mô tả Phép cộng chuỗi số đánh dấu tắc S1 S2 (Phép toán cộng ⊕), trả chuỗi số tắc, với S1 S2 chuỗi tập dấu có thứ tự Ví dụ sum (‚#2-1+1:3‛,‚#3-2+1:2‛) = ‚#5-3+2:5‛ private static int calWeight(String S, int h1) Mô tả Tính giá trị phần trị số sau ký tự có chỉ số h1 chuỗi số có dấu S Ví dụ calWeight(‚#5-356+2:5‛, 3) = 356 private static String calSmallS(String S, int h, int ch) Mơ tả Tính giá trị số đứng sau chỉ số h, trả giá trị số dấu giá trị ch>1 “#0” ch

Ngày đăng: 05/12/2020, 11:42

Từ khóa liên quan

Mục lục

  • MỤC LỤC

  • DANH MỤC CÁC KÝ HIỆU , THUẬT NGỮ, CHỮ VIẾT TẮT

  • DANH MỤC CÁC BẢNG

  • PHÂN MƠ ĐÂU

  • Tính cấp thiết của đề tài

  • Mục tiêu của luận văn

  • Phuơng pháp nghiên cứu

  • Bố cục của luận văn

  • CHƯƠNG 1. MỘT SỐ KIẾN THỨC CƠ SỞ

  • 1.1. Các lý thuyết nền tảng về hệ thống kiểu

  • 1.1.1. Khái niệm hệ thống kiểu

  • 1.1.2. Vai tro cua hê thông kiêu

  • 1.1.3. Các thuộc t́nh cơ bản của hệ thống kiểu

  • 1.1.4. Các ứng dụng v̀ ́ ngh̃a kinh tế của hệ thống kiểu

  • 1.1.5. Hệ thống kiểu trong việc chính thức hóa ngôn ngữ kiểu

  • 1.2. Bộ nhớ giao tác phần mềm

  • 1.2.1. Khái niệm v̀ các thuộc t́nh cơ bản của giao tac

  • 1.2.2. Bộ nhớ giao tác phần mềm

  • CHƯƠNG 2. FEATHERWEIGHT JAVA CÓ GIAO TÁC

  • 2.1. Cú pháp

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

  • Đang cập nhật ...

Tài liệu liên quan