2008-09-09 29 views

Trả lời

1

Tôi không có câu trả lời cho câu hỏi công cụ, nhưng tôi sẽ nói nó khá dễ dàng trong bất kỳ ngôn ngữ xử lý văn bản nào (perl/python/etc) để tạo ngẫu nhiên các câu từ ngữ pháp BNF. một ngôn ngữ lớn hơn (Java/C/etc), nhưng nó không phải là quá khó để cuộn của riêng bạn.

Vấn đề với điều này, tất nhiên, là nó chỉ có thể tạo chuỗi trong ngữ pháp, và trừ khi ngữ pháp của bạn rất đơn giản, không gian kiểm tra là vô cùng lớn.

1

Tôi đã thực hiện chính xác như nhận xét của Hazzen (sử dụng DSL nhúng trong ngôn ngữ kịch bản lệnh). Đó là một bài tập nhẹ nhàng thú vị, nhưng ngoại trừ các bài kiểm tra cơ bản nhất, ví dụ: phân tích cú pháp, nó không hữu ích khủng khiếp. Hầu hết các bài kiểm tra thú vị nhất của tôi phải làm với các mối quan hệ phức tạp hơn là có thể dễ dàng diễn tả trong BNF (hoặc bất kỳ ngữ pháp ngữ cảnh nào khác).

0

Nếu, giả sử bạn đang phát triển trình biên dịch, thì bạn có thể có kiểu dữ liệu cây cú pháp trừu tượng. Nếu có, thì bạn có thể viết một hàm để tạo ra một AST ngẫu nhiên - với điều đó, bạn có thể in nó thành một chuỗi và nạp nó vào thử nghiệm đơn vị của bạn. Nó được đảm bảo là một chương trình hợp lệ theo cách này, vì bạn đã bắt đầu với AST của mình.

Nếu tôi đang viết trình biên dịch trong Haskell hoặc ML, đây là những gì tôi sẽ làm, sử dụng QuickCheck.

0

Gramtest là một trong những công cụ có thể tạo chuỗi từ ngữ pháp BNF tùy ý xác định. Bạn có thể đọc thêm chi tiết về thuật toán đằng sau Gramtest here và một số mẹo thực hành về công cụ có sẵn here.

Các vấn đề liên quan