2012-01-30 11 views
7

Chcesz zrobić jakiś specyficzny dla domeny język (DSL) dla praktyki, pierwszy pomysł to napisać interpreter lub kompilator Brainfuck. Najpierw był pomysł, aby zastąpić funkcji, takich jak będą zachowywać się jak nakazuje brainfuck: ">", "<", "+", "-", ".", ",", "[", "]". Niestety, nie możesz odcyfrować funkcji jako ".".Kompilator Brainfuck w scala

Czy istnieje lepsze rozwiązanie, aby zapisać je w Scali?

Odpowiedz

6

Nie mówisz tego specjalnie w swoim pytaniu, ale wydaje się, że kiedy mówisz DSL, masz na myśli Internal DSL?

Wewnętrzne DSL są świetne, ale zasadniczo zawsze jesteś ograniczony przez składnię języka, którego próbujesz użyć. Scala jest szczególnie dobrym językiem do pisania wewnętrznego DSL, ponieważ ma prostą i elastyczną składnię. Ale nie jest to nieskończenie elastyczne.

innych dróg, które warto zbadać może być:

  1. Wybierz inny symbol zamiast „”. Scala może obsługiwać identyfikatory Unicode, więc jeśli masz ochotę jechać tą drogą, być może możesz użyć "∙"?
  2. Zamiast tego należy utworzyć External DSL?
5

Przypuszczam, że jesteś świadomy tego example.

Także ten example sugerowany przez Mikaël Mayer w komentarzach.

+0

Czy istnieje bardziej elegancki sposób? –

+0

Nie wiem, po prostu pamiętam ten konkretny przykład z oficjalnej strony Scala. – fiction

1

Napisałem interpreter BrainFuck, który wykorzystuje kombinatory parsera Scala. kod źródłowy to here, jeśli może to pomóc.

Powiązane problemy