2012-01-30 46 views
7

Muốn tạo một số Ngôn ngữ Cụ thể cho Miền (DSL) để thực hành, ý tưởng đầu tiên là viết trình thông dịch hoặc trình biên dịch của Brainfuck. ý tưởng đầu tiên là để ghi đè lên các chức năng như họ sẽ cư xử như Brainfuck lệnh: ">", "<", "+", "-", ".", ",", "[", "]". Rất tiếc, bạn không thể thực hiện chức năng decalare như ".".Trình biên dịch Brainfuck trong scala

Có giải pháp nào tốt hơn để viết nó trong Scala không?

Trả lời

6

Bạn không nói điều này đặc biệt trong câu hỏi của mình, nhưng có vẻ như khi bạn nói DSL, bạn có nghĩa là Internal DSL?

DSL nội bộ là tuyệt vời, nhưng về cơ bản bạn luôn bị giới hạn bởi cú pháp của ngôn ngữ bạn đang cố gắng sử dụng. Scala là một ngôn ngữ đặc biệt tốt để viết một DSL nội bộ, bởi vì nó có một cú pháp đơn giản và linh hoạt. Nhưng nó không phải là vô cùng linh hoạt.

con đường khác bạn có thể muốn khám phá có thể là:

  1. Chọn một biểu tượng khác nhau thay vì "". Scala có thể hỗ trợ định danh Unicode, vì vậy nếu bạn thích đi xuống con đường đó, có lẽ bạn có thể sử dụng "∙"?
  2. Tạo một số External DSL thay thế?
5

Tôi cho rằng bạn biết về điều này example.

Ngoài ra điều này example được đề xuất bởi Mikaël Mayer trong nhận xét.

+0

Có cách nào thanh lịch hơn không? –

+0

Tôi không biết, tôi chỉ nhớ lại ví dụ cụ thể đó từ trang web chính thức của Scala. – fiction

1

Tôi đã viết một thông dịch viên BrainFuck sử dụng bộ phối hợp trình phân tích cú pháp Scala. mã nguồn là here nếu nó có thể hữu ích.

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