Можно написать компилятор с 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>
Возможно ли это?
Алекс
Ответы
Ответ 1
Да, это очень возможно с помощью Jison.
Он генерирует парсер JavaScript, основанный на конструкциях языка, которые вы определяете.
Jison использует контекстно-свободную грамматику для ввода и выводит JavaScript файл, способный анализировать язык, описанный в этой грамматике. Вы затем может использовать сгенерированный script для анализа входов и принятия, отклонения, или выполнять действия на основе ввода.
- из документации
PS: CoffeeScript! был также создан с использованием этого.:)
Ответ 2
Да, но вам предстоит много работы. Так же, как настоящий компилятор, вам придется анализировать код, преобразовывать его в промежуточный код и т.д. После этого вам придется моделировать среду, включая все библиотеки времени выполнения, включенные в эти языки. Короче говоря, это не практично, но это возможно.
Ответ 3
Да, Javascript - это Turing Complete. Вы можете закодировать что-нибудь в нем, которое можно закодировать на любом языке. Конечно, это включает компиляторы. Я не могу представить себе никаких причин, чтобы когда-либо делать это. Если вы достаточно хорошо разбираетесь в Javascript, чтобы написать в нем компилятор, вам, скорее всего, просто напишите свой код в javascript вместо другого.
Ответ 4
См. Учебник по Metacompiler о том, как писать произвольные компиляторы (и компиляторы-компиляторы) в целом, используя Javascript в качестве языка реализации.
Ответ 5
Вы должны заглянуть в соблазнительные языки JS. В частности, следующее:
Ответ 6
Да, это возможно. Но вместо того, чтобы писать парсер вручную, я бы посоветовал вам использовать хороший генератор синтаксического анализатора.
Например, ANTLR Terence Parr - очень мощный генератор синтаксического анализатора, который цели JavaScript. Он работает в средах, поддерживающих ECMAScript 5.1. (тестируется в Firefox, Safari, Chrome, Internet Explorer и Node.js). Это с открытым исходным кодом (лицензия BSD) с обширной документацией и очень хорошей книгой.
Используя такой инструмент, вместо написания собственного парсера вы пишете грамматику, и синтаксический анализатор генерируется для вас.
Ответ 7
Да, возможно.
Было бы намного проще написать интерпретатор, который конвертирует с одного языка в Javascript, а затем будет генерировать и обрабатывать байтовый код браузера.