Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компиляция скрипта, Какие будут предложения ? 
:(
    Опции темы
Sheff
Дата 11.8.2004, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Уважаемые винградовцы и не только, я пишу компилятор скриптов в промежуточный язык типа ассемблера для последующей интерпретации виртуальной машиной и возникают вопросы: как генерировать оп-коды для конструкций типа if, for, а также массивов и функций. Компилятор выражений я сделал, к примеру выражение типа (2+3)*MyVar1 имеет вид:
push 2
push 3
pop
pop
sum //Суммируем то, что взяли из стека и результат толкаем в стёк
push MyVar1
pop
pop
mult //Умножаем
pop //Берём ответ
А вот как быть с:
if (MyVar1==5)
{
...
}
else
{
...
}
или:
MyArray[5*MyVar1+7]=MyVar1/2;
или:
a1=myfunc(myarray[myvar1*5],myvar1+6/myvar2)*3;

Как быть здесь ? Слишком уж много всего sad.gif

Если есть какие-нибудь идеи пишите, буду рад если подкините полезную ссылку...



--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Yuri Burger
Дата 11.8.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 11.5.2004

Репутация: нет
Всего: нет



Цитата(Sheff @ 11.8.2004, 16:50)
вопросы: как генерировать оп-коды для конструкций типа if, for,

сделай поддержку условных переходов.. собсно дальше всё будет просто..
PM MAIL   Вверх
mr.DUDA
Дата 11.8.2004, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



[оффтоп]
в БГУИР на ФКСИС изучают теорию компиляторов - кошмар из кошмаров; одни только книги по теме весят 400-500 страниц !
[/оффтоп]

Если уж взялся за дело серьёзно, то нужно выделить типы лексических конструкций (выражение, вызов функции, условие, цикл и проч.) и строить по исходному тексту дерево таких конструкций. Очень настоятельно рекомендую ознакомится с библиотекой Spirit, входящей в состав Boost - на её основе можно построить анализатор языка. Линк:
http://www.boost.org/libs/spirit/index.html


А лучше бы сократить себе объём работ, упростив синтаксис до предела. Например, запретить вызов функций в выраженях, выражений - в условиях, разрешить использовать в условных операторах только имена bool-переменных и проч.


--------------------
user posted image
PM MAIL WWW   Вверх
Sheff
Дата 13.8.2004, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



mr.DUDA
Ничего сложного, всё что я хотел уже сделал, сложные выражения понимаются отлично, одна проблема - очень медленный лексический анализатор, посмотрю ка я ту ссылку что ты написал, может пригодится...


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Sardar
Дата 13.8.2004, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Цитата(Sheff @ 13.8.2004, 16:04)
очень медленный лексический анализатор

Странно, сканер должен быть самой быстрой частью компилятора/интерпретатора. Сам писал или утилитами генерил? Если утилитами, то нужно оптимизировать реги.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Sheff
Дата 14.8.2004, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Sardar
Не, сам писал на скорую руку, надо будет переделовать, а то у меня файл 30Kb около 3 секунд разбирается sad.gif


--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Sardar
Дата 14.8.2004, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



Посмотри на www.gnu.org утилиту flex. А вообще набери в гугле что нибудь типа: "лексический анализ генератор сканер".

Если не секрет покажи код smile.gif


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Sheff
Дата 14.8.2004, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 503
Регистрация: 25.3.2002
Где: Зеленоград

Репутация: 3
Всего: 3



Цитата(Sardar @ 14.8.2004, 11:50)
Если не секрет покажи код

А толку, он же кривой, надо переписывать...
Цитата(Sardar @ 14.8.2004, 11:50)
Посмотри на www.gnu.org утилиту flex.

Не, я лучше сам, не люблю пользовать чужое



--------------------
--------------------------
Шеф всегда прав :)
PM MAIL WWW ICQ   Вверх
Sardar
Дата 15.8.2004, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 1
Всего: 317



If'ами и т.д. хрошего ничего не выйдет. Нужно писать свою реализацию регов, тогда сделаешь прямой(однопроходной) сканер. Плюсы - большая скорость и относительная простота.
Пару недель теории тебе обесепеченны. Реги самые простые из формальных грамматик, реализуются конечным автоматом(таблицы входных символов и переходов в твоей проге).


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0859 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.