2012-01-30 17 views
7

Uygulama için bazı Etki Alanı Spesifik Dillerini (DSL) yapmak istediğinizde, önce yorum yazıcısı veya Brainfuck derleyicisinin yazılmasıdır. ">", "<", "+", "-", ".", ",", "[", "]": İlk fikri Brainfuck komutları olarak onlar davranacaktır gibi işlevleri geçersiz kılmak oldu. Ne yazık ki, "." olarak çalışamazsınız.Scala'da Brainfuck derleyicisi

Scala'da yazmak için daha iyi bir çözüm var mı?

cevap

6

Sorunuzda bunu özellikle söylemezsiniz, ancak DSL derken, Internal DSL mu demek istiyorsunuz?

İç DSL'ler harika ama temelde her zaman kullanmaya çalıştığınız dilin sözdizimi ile sınırlıdır ediyoruz. Scala, dahili bir DSL yazmak için özellikle iyi bir dildir, çünkü basit ve esnek bir sözdizimine sahiptir. Ama sonsuz esnek değil. keşfetmek isteyebilirsiniz

Diğer caddeler olabilir:

  1. yerine farklı bir sembol seçin "". Scala, Unicode tanımlayıcılarını destekleyebilir, bu yüzden bu yolda ilerlemeyi seviyorsanız, belki "∙" yi kullanabilirdiniz?
  2. External DSL Oluşturmak mı?
5

Bu example'un farkında olduğunuzu varsayalım.

Ayrıca, bu example yorumlarda Mikaël Mayer tarafından önerdi.

+0

daha şık bir yolu var mı? –

+0

Bilmiyorum, sadece Scala resmi sitesinden belirli bir örneği hatırlıyorum. – fiction

1

Scala çözümleyici birleştiricilerini kullanan bir BrainFuck yorumlayıcısı yazdım. Kaynak kod here ise yardımcı olabilir.