Nếu bạn đang xem xét bằng văn bản DSL độc lập, sau đó bạn đang xem xét xây dựng trình biên dịch - không có cách nào xung quanh nó. Xây dựng trình biên dịch là kiến thức lập trình cần thiết và nó thực sự không khó như thường nghĩ. Steve Yegge của Righ Programmer Food tóm tắt giá trị của việc biết làm thế nào để xây dựng trình biên dịch khá độc đáo.
Có rất nhiều cách để bắt đầu. Tôi khuyên bạn nên kiểm tra 2 bài báo được đề cập trong bài viết: Want to write a compiler? Just read these Two papers. Người đầu tiên, Let's build a compiler, rất dễ tiếp cận. Nó sử dụng Turbo Pascal như một ngôn ngữ thực hiện, nhưng bạn có thể dễ dàng thực hiện nó bằng bất kỳ ngôn ngữ nào khác - mã nguồn rất rõ ràng. Pascal là một ngôn ngữ đơn giản.
Khi bạn có cảm giác tốt về cách mọi thứ hoạt động và thuật ngữ có liên quan, tôi khuyên bạn nên nghiên cứu một số thứ như ANTLR. ANTLR có một IDE đẹp, ANTLRWorks, đi kèm với một thông dịch viên và một trình gỡ lỗi. Nó cũng tạo ra hình ảnh thực sự tốt về ngữ pháp của bạn khi đang bay. Tôi thấy nó vô giá trong việc học.
ANTLR có một số hướng dẫn hay, mặc dù ban đầu chúng có thể hơi bị áp đảo. This one là tốt đẹp, mặc dù nó chống lại ANTLR 2.0, vì vậy bạn có thể gặp phải sự không tương thích với một phiên bản mới hơn (hiện tại phiên bản mới nhất là 3.1).
Cuối cùng, có một cách tiếp cận khác đối với DSL: Phương pháp tiếp cận Lisp. Với cú pháp ít cú pháp của Lisp (mã của bạn về cơ bản là các cây cú pháp trừu tượng), bạn có thể định dạng các ngôn ngữ vô tận ra khỏi nó, miễn là bạn đã quen với các dấu ngoặc đơn :).
Nếu bạn làm theo cách tiếp cận đó, bạn muốn sử dụng Lisp có thể nhúng. Trong Java, bạn có Clojure, một phương ngữ Lisp có khả năng tương tác hoàn hảo với JVM và các thư viện của nó. Tôi đã không sử dụng nó cá nhân, nhưng có vẻ tốt.Đối với Đề án, có GNU Guile, là licensed under LGPL. Đối với Common Lisp, có ECL, cũng theo LGPL. Cả hai đều sử dụng giao diện C cho khả năng tương tác, vì vậy bạn có thể nhúng chúng vào bất kỳ ngôn ngữ nào khác. ECL là duy nhất trong số Lisps trong đó mỗi hàm Lisp được thực hiện như một hàm C, vì vậy bạn có thể viết mã Lisp trong C nếu bạn muốn (nói, bên trong các phương thức mở rộng của riêng bạn - bạn có thể tạo các hàm C hoạt động trên các đối tượng Lisp, và sau đó gọi chúng từ Lisp). Tôi đã sử dụng ECL cho một dự án phụ của tôi trong một thời gian, và tôi thích nó. Người duy trì khá tích cực và đáp ứng.
LƯU Ý: Tôi không nhất thiết phải tìm kiếm tính hoàn chỉnh của Turing tại đây. Chủ yếu chỉ là cú pháp biểu thức để cấu hình mọi thứ trong mô hình của tôi. – chadmyers