JavaScript to C++ translator
От: cash_a_lot  
Дата: 17.02.10 12:43
Оценка:
Привет.

Требуется написать транслятор с языка JavaScript 1.6 на C++.
Есть несколько особенностей:
1. Требуется написать транслятор ядра JavaScript (ECMAScript) на С++.
2. Нам заранее известно, что во входном .JS файле нет синатаксических, семантических ошибок.

Как я делаю:
— Для лексического анализа, я использую flex-generated анализатор.
— Для трансляции я сам строю синтаксический граф. Граф содержит переходы от состояния к состоянию по токену.
На некоторые состояния графа я вешаю операции.

Тривиальный пример (JavaScript function definition):
Переходы между токенами: Function->Variable->Open_parenthesis->Variable->Comma->Variable->Comma->Variable->Close_parenthesis
Для первого токена Variable: операция create_function_name
Для остальных токенов Variable: операция add_function_parameter

Как можно реализовать транслятор?
1. Может удобнее использовать flex+bison? И анализировать синтаксическое дерево, которое строит bison?
2. Или использовать boost парсеры?

Спасибо.

17.02.10 18:56: Перенесено модератором из 'C/C++' — Кодт
Re: JavaScript to C++ translator
От: A13x США  
Дата: 17.02.10 13:19
Оценка:
Здравствуйте, cash_a_lot, Вы писали:

__>Привет.


__>Требуется написать транслятор с языка JavaScript 1.6 на C++.

__>...

А как "транслировать" eval?
Советую не мучаться и взять v8
Re[2]: JavaScript to C++ translator
От: cash_a_lot  
Дата: 17.02.10 13:33
Оценка:
Здравствуйте, A13x, Вы писали:

A>Здравствуйте, cash_a_lot, Вы писали:


__>>Привет.


__>>Требуется написать транслятор с языка JavaScript 1.6 на C++.

__>>...

A>А как "транслировать" eval?

A>Советую не мучаться и взять v8

Реализацию таких функции можно вынести в predefined класс.
И наследовать все транслируемые классы от predefined класса.
Кроме v8 есть mozilla, nombas и другие движки.
Но интересует именно трансляция.

Спасибо.
Re[2]: JavaScript to C++ translator
От: cash_a_lot  
Дата: 17.02.10 13:47
Оценка:
Здравствуйте, A13x, Вы писали:

A>Здравствуйте, cash_a_lot, Вы писали:


__>>Привет.


__>>Требуется написать транслятор с языка JavaScript 1.6 на C++.

__>>...

A>А как "транслировать" eval?

A>Советую не мучаться и взять v8

v8 еще не кросплатформенна.
Используя функциональность JS engines (v8, mozjs, nombas) мы можем выполнять трансляцию в C++ код?
Re: JavaScript to C++ translator
От: blackhearted Украина  
Дата: 17.02.10 16:14
Оценка:
Здравствуйте, cash_a_lot, Вы писали:

spidermonkey ?
Re[3]: JavaScript to C++ translator
От: A13x США  
Дата: 17.02.10 16:19
Оценка: 2 (1) +1
Здравствуйте, cash_a_lot, Вы писали:

__>Здравствуйте, A13x, Вы писали:


A>>Здравствуйте, cash_a_lot, Вы писали:


__>>>Привет.


__>>>Требуется написать транслятор с языка JavaScript 1.6 на C++.

__>>>...

A>>А как "транслировать" eval?

A>>Советую не мучаться и взять v8

__>Реализацию таких функции можно вынести в predefined класс.

__>И наследовать все транслируемые классы от predefined класса.
__>Кроме v8 есть mozilla, nombas и другие движки.
__>Но интересует именно трансляция.

__>Спасибо.


не понял.
я к тому, что реализация будет не полной, если текст такого транслятора не будет в себе заключать полноценной реализации интерпретатора.
Таким образом создание такого рода конвертеров бессмысленно. Достаточно создать сам движок (v8, SpiderMonkey, QtScript, whatever)
Re[4]: JavaScript to C++ translator
От: cash_a_lot  
Дата: 19.02.10 16:59
Оценка:
Здравствуйте, A13x, Вы писали:

A>Здравствуйте, cash_a_lot, Вы писали:


__>>Здравствуйте, A13x, Вы писали:


A>>>Здравствуйте, cash_a_lot, Вы писали:


__>>>>Привет.


__>>>>Требуется написать транслятор с языка JavaScript 1.6 на C++.

__>>>>...

A>>>А как "транслировать" eval?

A>>>Советую не мучаться и взять v8

__>>Реализацию таких функции можно вынести в predefined класс.

__>>И наследовать все транслируемые классы от predefined класса.
__>>Кроме v8 есть mozilla, nombas и другие движки.
__>>Но интересует именно трансляция.

__>>Спасибо.


A>не понял.

A>я к тому, что реализация будет не полной, если текст такого транслятора не будет в себе заключать полноценной реализации интерпретатора.
A>Таким образом создание такого рода конвертеров бессмысленно. Достаточно создать сам движок (v8, SpiderMonkey, QtScript, whatever)

Действительно.
А возможно ли дотянуться до типов функций/переменных с помощью SpiderMonkey?
Или динамическая типизация языка JavaScript помешает определить тип?

Спасибо.
Re: JavaScript to C++ translator
От: TimurSPB Интернет  
Дата: 19.02.10 17:04
Оценка:
__>Как можно реализовать транслятор?
Это какая то сверхзадача, имхо. Или это какой то крупный проект?

__>2. Или использовать boost парсеры?

Если ты про boost::spirit, то лучше застрелиться в начале проекта, чем попасть в психушку на этапе отладки.
Make flame.politics Great Again!
Re: JavaScript to C++ translator
От: c-smile Канада http://terrainformatica.com
Дата: 20.02.10 03:24
Оценка:
Здравствуйте, cash_a_lot, Вы писали:

__>Требуется написать транслятор с языка JavaScript 1.6 на C++.


Написать транслятор не проблема. Вопрос в том что дальше с этим делать.
Любой современный движок делает генерацию в байткод что в принципе есть просто таблица вызовов C/C++ функций.
Вот тебе и трансляция.

Из-за того что язык typeless по определению то сделать компилятор который будет значительно эффективнее той же V8 практически невозможно.

С точки зрения практики я думаю задача JavaScript to Erlang имеет больше шансов. Да и то...
Re[2]: JavaScript to C++ translator
От: cash_a_lot  
Дата: 22.02.10 16:16
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, cash_a_lot, Вы писали:


__>>Требуется написать транслятор с языка JavaScript 1.6 на C++.


CS>Написать транслятор не проблема. Вопрос в том что дальше с этим делать.

CS>Любой современный движок делает генерацию в байткод что в принципе есть просто таблица вызовов C/C++ функций.
CS>Вот тебе и трансляция.

CS>Из-за того что язык typeless по определению то сделать компилятор который будет значительно эффективнее той же V8 практически невозможно.


CS>С точки зрения практики я думаю задача JavaScript to Erlang имеет больше шансов. Да и то...


Вопрос в том, как добраться то таблицы вызвов C/С++ функций с помощью SpiderMonkey: определить тип возвращаемый функцией, типы локальных переменных и их контент.

Спасибо.
Re[3]: JavaScript to C++ translator
От: c-smile Канада http://terrainformatica.com
Дата: 23.02.10 06:34
Оценка:
Здравствуйте, cash_a_lot, Вы писали:

__>Вопрос в том, как добраться то таблицы вызвов C/С++ функций с помощью SpiderMonkey: определить тип возвращаемый функцией, типы локальных переменных и их контент.


В общем случае типы переменных на этапе компиляции не известны. Например что возвращает эта функция?

function foo(bar)
{
  return bar % 1? "odd" : false;
}
Re[5]: JavaScript to C++ translator
От: A13x США  
Дата: 24.02.10 11:10
Оценка:
Здравствуйте, cash_a_lot, Вы писали:

__>...

__>Действительно.
__>А возможно ли дотянуться до типов функций/переменных с помощью SpiderMonkey?
__>Или динамическая типизация языка JavaScript помешает определить тип?

а зачем дотягиваться до них?
для чего?
Re[4]: JavaScript to C++ translator
От: Аноним  
Дата: 24.02.10 12:28
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Здравствуйте, cash_a_lot, Вы писали:


__>>Вопрос в том, как добраться то таблицы вызвов C/С++ функций с помощью SpiderMonkey: определить тип возвращаемый функцией, типы локальных переменных и их контент.


CS>В общем случае типы переменных на этапе компиляции не известны. Например что возвращает эта функция?


CS>
CS>function foo(bar)
CS>{
CS>  return bar % 1? "odd" : false;
CS>}
CS>


Или такое
function fn(js) {
  return eval(js);
}
Re[2]: JavaScript to C++ translator
От: Guard_h4s Россия  
Дата: 28.02.10 14:12
Оценка:
Здравствуйте, TimurSPB, Вы писали:

__>>Как можно реализовать транслятор?

TSP>Это какая то сверхзадача, имхо. Или это какой то крупный проект?

__>>2. Или использовать boost парсеры?

TSP>Если ты про boost::spirit, то лучше застрелиться в начале проекта, чем попасть в психушку на этапе отладки.

А вот эти не стали стреляться =)
http://clipp.sourceforge.net/
Как вариант.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.