Компилятор Brainfuck в Scala - PullRequest
7 голосов
/ 30 января 2012

Хочу создать какой-нибудь предметно-ориентированный язык (DSL) для практики, первая идея - написать интерпретатор или компилятор Brainfuck . Первой идеей было переопределить функции, такие как они будут вести себя как команды Brainfuck: ">", "<", "+", "-", ".", ",", "[", "]". К сожалению, вы не можете декалировать функцию как ".".

Есть ли лучшее решение написать это в Scala?

Ответы [ 3 ]

6 голосов
/ 30 января 2012

Вы не говорите это конкретно в своем вопросе, но кажется, что когда вы говорите DSL, вы имеете в виду Внутренний DSL ?

Внутренние DSL - это хорошо, но в основном вывсегда ограничен синтаксисом языка, который вы пытаетесь использовать.Scala является особенно хорошим языком для написания внутреннего DSL, потому что он имеет простой и гибкий синтаксис.Но он не бесконечно гибок.

Другие возможности, которые вы, возможно, захотите изучить, могут быть:

  1. Выберите другой символ вместо ".".Scala может поддерживать идентификаторы Unicode, поэтому, если вы хотите пойти по этому пути, возможно, вы могли бы использовать «∙»?
  2. Создать вместо него Внешний DSL вместо?
5 голосов
/ 30 января 2012

Полагаю, вам известен этот пример .

Также этот пример , предложенный Микаэлем Майером в комментариях.

1 голос
/ 30 января 2012

Я написал интерпретатор BrainFuck, который использует комбинаторы парсера Scala. исходный код здесь , если это может помочь.

...