Tạo biểu đồ luồng kiểm soát đầy đủ thực sự xem xét tất cả các vấn đề ngôn ngữ khó hơn. Bạn không chỉ phải xác định những gì dường như là "khối cơ bản", nhưng bạn phải xác định các cuộc gọi chức năng (loại dễ dàng, nhưng xác định mục tiêu có thể khó hơn), nơi hoạt động hậu trường như khởi tạo lớp có thể xảy ra. và phải lo lắng về các điểm mà các ngoại lệ có thể xảy ra và điều khiển sẽ xảy ra nếu ngoại lệ xảy ra.
Nếu bạn kiểm tra hầu hết ngôn ngữ, chúng cũng sẽ là rõ ràng về thứ tự đánh giá tính toán trong biểu thức, và điều này quan trọng nếu bạn có hai tác dụng phụ trong biểu thức; luồng kiểm soát phải phản ánh thứ tự (hoặc không theo thứ tự, nếu nó không được xác định).
Có thể bạn chỉ muốn trừu tượng luồng kiểm soát có các khối cơ bản và các điều kiện. Đó là rõ ràng là dễ dàng hơn một chút.
Trong cả hai trường hợp (CFG đơn hoặc CFG đầy đủ), bạn cần đi bộ AST, tại mỗi điểm có tham chiếu đến các mục tiêu kiểm soát có thể (ví dụ, đối với hầu hết các trường hợp, chẳng hạn như câu lệnh IF) mục tiêu lưu lượng: mệnh đề THEN và ELSE). Tại mỗi nút, liên kết nút đó với mục tiêu điều khiển thích hợp , có thể thay thế các mục tiêu luồng (ví dụ: khi bạn gặp phải IF).
Để làm điều này cho ngữ nghĩa đầy đủ ngôn ngữ của Java (hoặc C) là khá rất nhiều công việc. Bạn có thể chỉ cần sử dụng một công cụ tính toán số này ngoài giá. Xem http://www.semanticdesigns.com/Products/DMS/FlowAnalysis.html để biết điều này trông như thế nào, sắp ra khỏi các công cụ của chúng tôi.
Nguồn
2009-06-17 08:46:18
Bạn nên nêu rõ câu hỏi của mình trong câu hỏi, để câu trả lời có thể phản ánh câu hỏi của bạn và không có trong nhận xét. – EfForEffort
"CFG .... có được một đại diện cây từ nguồn ..." ?? Nếu bạn phân tích cú pháp mã nguồn, bạn sẽ có được một biểu diễn cây. Một CFG sẽ tạo ra một biểu đồ kết nối các nút AST với nhau. –