2012-01-30 5 views
7

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

Есть ли лучшее решение, чтобы написать его в Scala?

ответ

6

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

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

Другие направления вы можете захотеть исследовать может быть:

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

Я полагаю, что вы знаете об этом example.

Также этот example предложен Mikaël Mayer в комментариях.

+0

Есть ли более элегантный способ? –

+0

Не знаю, я просто напомню этот конкретный пример с официального сайта Scala. – fiction

1

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

 Смежные вопросы

  • Нет связанных вопросов^_^