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 3 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 z 4.2 Xây dựng thuật toá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 toá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 z 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 z 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 toà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 z 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 nguyên 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 z 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 nguyên 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” z 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 nguyên 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 phải nghiên cứu thuật toá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 z 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 tố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 ḅ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 z 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 toá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; z 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 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 khơng thể 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 z 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 Ngồ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' z 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ơ đồ: z 75 Mô tả: Danh sách kiểu nguyên 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ơ đồ: z 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ả: z 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 ')' ';' ; z 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 z 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 z 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' ; z 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ơ đồ: z 82 Mô tả: Đặc tả dấu phần tử mult Mult : unary (('*' | '/' | 'mod') unary)* ; Sơ đồ: Mơ tả: Đặc tả phép tốn nhân chia, lấy dƣ biểu thức add Add : mult (('+' | '-') mult)* ; Sơ đồ: Mô tả: Đặc tả phép toán cộng trừ biểu thức relation Relation : add (('=' | '/=' | '') add)* ; Sơ đồ: Mô tả: Đặc tả phép toán quan hệ biểu thức quan hệ expression Expression : relation (('and' | 'or') relation)* ; Sơ đồ: z 83 Mơ tả: Đặc tả phép tố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ơ đồ: z 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 z 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 nguyên 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 tố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: 06/03/2023, 15:56

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

Tài liệu liên quan