Подтвердить что ты не робот

Можно написать компилятор с Javascript?

Можно ли использовать Javascript для написания компилятора, который может поддерживать другой тип языка в качестве скриптов?

Скажем, у меня есть фрагмент HTML.

<script language="cpp" id="cppScriptBlock" EntryPoint="main">
    int main() {
        cout << "<h1>CPPHeader</h1>";
    }
</script>

<script language="java" id="javaScriptBlock" EntryPoint="MyJavaClass">
    public class MyJavaClass {
        public final void main() {
            java.lang.System.out.println("<h1>JavaHeader</h1>");
        }
    }
</script>

<script language="csharp" id="csharpScriptBlock" EntryPoint="MyCSharpClass ">
    public class MyCSharpClass {
        public static void Main() {
            System.Console.WriteLine("<h1>CSharpHeader</h1>");
        }
    }
</script>


<script language="javascript">
    $("#cppScriptBlock").compileAndRun();
    $("#javaScriptBlock").compileAndRun();
    $("#csharpScriptBlock").compileAndRun();
</script>

И, наконец, сгенерируем следующий HTML

<h1>CPPHeader</h1>
<h1>JavaHeader</h1>
<h1>CSharpHeader</h1>

Возможно ли это?

Алекс

4b9b3361

Ответ 1

Да, это очень возможно с помощью Jison.

Он генерирует парсер JavaScript, основанный на конструкциях языка, которые вы определяете.

Jison использует контекстно-свободную грамматику для ввода и выводит JavaScript файл, способный анализировать язык, описанный в этой грамматике. Вы затем может использовать сгенерированный script для анализа входов и принятия, отклонения, или выполнять действия на основе ввода.

- из документации

PS: CoffeeScript! был также создан с использованием этого.:)

Ответ 2

Да, но вам предстоит много работы. Так же, как настоящий компилятор, вам придется анализировать код, преобразовывать его в промежуточный код и т.д. После этого вам придется моделировать среду, включая все библиотеки времени выполнения, включенные в эти языки. Короче говоря, это не практично, но это возможно.

Ответ 3

Да, Javascript - это Turing Complete. Вы можете закодировать что-нибудь в нем, которое можно закодировать на любом языке. Конечно, это включает компиляторы. Я не могу представить себе никаких причин, чтобы когда-либо делать это. Если вы достаточно хорошо разбираетесь в Javascript, чтобы написать в нем компилятор, вам, скорее всего, просто напишите свой код в javascript вместо другого.

Ответ 4

См. Учебник по Metacompiler о том, как писать произвольные компиляторы (и компиляторы-компиляторы) в целом, используя Javascript в качестве языка реализации.

Ответ 6

Да, это возможно. Но вместо того, чтобы писать парсер вручную, я бы посоветовал вам использовать хороший генератор синтаксического анализатора.

Например, ANTLR Terence Parr - очень мощный генератор синтаксического анализатора, который цели JavaScript. Он работает в средах, поддерживающих ECMAScript 5.1. (тестируется в Firefox, Safari, Chrome, Internet Explorer и Node.js). Это с открытым исходным кодом (лицензия BSD) с обширной документацией и очень хорошей книгой.

Используя такой инструмент, вместо написания собственного парсера вы пишете грамматику, и синтаксический анализатор генерируется для вас.

Ответ 7

Да, возможно.

Было бы намного проще написать интерпретатор, который конвертирует с одного языка в Javascript, а затем будет генерировать и обрабатывать байтовый код браузера.