Comments 18
Меня мучает только один вопрос — зачем?
-23
Любопытство, полезный опыт и способ скоротать время в летние ночи
+13
я понимаю, если бы вместо брайнфака было бы что-то полезное, но писать язык, на котором брайнфакно что-то писать…
-23
Теперь допишите в компилятор возможность вызова методов JVM, чтобы можно было использовать библиотеки из той же Java, и можно будет пилить транслируемый в BF процедурный язык.
0
К примеру за этим Анализ приложения защищенного виртуальной машиной.Там как раз Brainfuck. В защитах ПО очень часто применяются подобные знания!
+6
На очень простой и скорее бесполезной задаче проверен весь стек технологий
Проверено, что всё запускается.
На новом языке/технологии всегда полезно написать «Hello, world!».
Проверено, что всё запускается.
На новом языке/технологии всегда полезно написать «Hello, world!».
+3
А есть смысл генерировать сразу байткод, если можно сгенерировать исходник Java, и прогнать уже через javac?
0
Данная статья именно о написании своего компилятора, а не трансляции Brainfuck в Java и последующей компиляцией.
Если вам нужно генерировать исходник на Java, то данная возможность есть из коробки. Посмотрите класс Translator, с помощью него можно получить исходник либо на Java, либо на C++.
Если вам нужно получить class файл, то опять же есть такая возможность. Компилятор поддерживает сохранение байткода в файл.
К тому же для «компиляции» вашим методом нужно иметь на борту машины JDK, в то время как моей реализации внешние программы не нужны.
Если вам нужно генерировать исходник на Java, то данная возможность есть из коробки. Посмотрите класс Translator, с помощью него можно получить исходник либо на Java, либо на C++.
Если вам нужно получить class файл, то опять же есть такая возможность. Компилятор поддерживает сохранение байткода в файл.
К тому же для «компиляции» вашим методом нужно иметь на борту машины JDK, в то время как моей реализации внешние программы не нужны.
+2
javac есть только в JDK (Java developer kit), а обычная Java (JRE) не имеет такой утилиты.
+1
В принципе, можно подключить к проекту %JDK_PATH%\lib\tools.jar и у нас есть компилятор:
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
+1
Да тут скорее проблема, что JDK тянет за собой еще различные зависимости и намного тяжелее jre. Или tools есть и в jre?
0
Рекомендую также посмотреть на Копирование Бита – Простейшая Вычислительная Машина . Автор этого написал Higher Subleq, компилятор компилирующий из C-образного языка в код Subleq
0
Почему ваш компилятор выполняет лексический анализ, но не синтаксический? Правильный Brainfuck ведь предполагает наличие пар [ и ], это ограничение на синтаксис. Компилятор может генерировать разумные сообщения об ошибках, если встретит одинокий ] или незакрытый [.
Также можно добавить в компилятор генерацию дебажной инфы (исходный файл, метки строк). Тогда программы, содержащие +[>+] будут при падении ссылаться на нужное место в исходнике, можно будет исполнять код построчно и т. п.
Сам как-то на досуге писал компилятор Brainfuck в JVM, в котором такое реализовал: github.com/SBasalaev/jbfc
Также можно добавить в компилятор генерацию дебажной инфы (исходный файл, метки строк). Тогда программы, содержащие +[>+] будут при падении ссылаться на нужное место в исходнике, можно будет исполнять код построчно и т. п.
Сам как-то на досуге писал компилятор Brainfuck в JVM, в котором такое реализовал: github.com/SBasalaev/jbfc
0
Потому что я не ставил для себя задачу писать дополнительные проверки «от дурака» и предполагал, что данные всегда корректны. Задача моя была написать простой компилятор.
Да, информацию можно добавлять, но я делал уклон на небольшую компактную реализацию, без подобных фич.
Да, информацию можно добавлять, но я делал уклон на небольшую компактную реализацию, без подобных фич.
0
Не факт, что без синтаксического анализатора получилось проще.
Туда можно было бы вынести детектирование [+] и [-] вместе со всеми остальными оптимизациями.
Туда можно было бы вынести детектирование [+] и [-] вместе со всеми остальными оптимизациями.
0
Sign up to leave a comment.
JBrainfuck — Пишем компилятор Brainfuck под Java VM