Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2010, 22:29   #1
Volkodav2411
Новичок
Джуниор
 
Регистрация: 11.04.2009
Сообщений: 0
Хорошо Интерпретатор

Здраствуйте! Требуеться написать что-то вроде интерпретатора.
Допустим я ввожу в поле ввода
i:=0
x:=0
for i:=1 to 5 do
x:=x*10
ну и после нажатия кнопки "старт" этот код выполняеться (не надо создавать EXE файла)
В интерпретаторе требуются ТОЛЬКО цикл(for, while, можно только 1 из них), условный оператор, присваивание, умножение сложение деление вычитание, вывод переменных на экран
Типы данных - целые, дробные (integer, real)
Подкинте идею с чего начать, принцип... а лучше исходничек с комментарием=)
Заранее спасибо!
Volkodav2411 вне форума Ответить с цитированием
Старый 03.02.2010, 22:52   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

описываешь свой "язык" в форме бекуса-наура (чтобы было ясно, что получить в итоге), ну и реализовываешь проходные функции для каждой части. для вычисления сложных выражений можно использовать рекурсивный спуск, к примеру..
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 04.02.2010, 08:39   #3
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
описываешь свой "язык" в форме бекуса-наура (чтобы было ясно, что получить в итоге), ну и реализовываешь проходные функции для каждой части. для вычисления сложных выражений можно использовать рекурсивный спуск, к примеру..
Да уж, в БНФ все так ясно и наглядно .
Начни со структур данных - чем будет представляться программа (входящий поток символов, список строк и т.д.), структуры для хранения данных цикла, условия и пр. А уж далее как велит pproger - функции для выполнения каждой части.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 04.02.2010, 09:46   #4
Loky
Пользователь
 
Регистрация: 02.10.2008
Сообщений: 14
По умолчанию

Стучись 25523четыре3 есть готовый интерпретатор с исходниками. О цене договоримся. Вернее даже есть готовый курсвик на эту тему
Loky вне форума Ответить с цитированием
Старый 04.02.2010, 16:01   #5
Volkodav2411
Новичок
Джуниор
 
Регистрация: 11.04.2009
Сообщений: 0
По умолчанию

Цитата:
Начни со структур данных - чем будет представляться программа (входящий поток символов, список строк и т.д.), структуры для хранения данных цикла, условия и пр. А уж далее как велит pproger - функции для выполнения каждой части.
Типа синтаксис описать?
Volkodav2411 вне форума Ответить с цитированием
Старый 04.02.2010, 17:26   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Utkin
Цитата:
Начни со структур данных - чем будет представляться программа (входящий поток символов, список строк и т.д.), структуры для хранения данных цикла, условия и пр.
бнф как бы это и описывает. например:

Код:
Язык = “Start” Звено “,” … Звено Счетное “Stop”
Звено = “First” вещ ! “Second” вещ…вещ ! “Third” цел ! “Fourth” цел…цел
Счетное = Оператор … Оператор

Оператор = </Метка “:”/> переем “=” прав.ч
Прав.ч = </”-”/> Блок1 Зн1 … Блок1
Зн1 = “+” ! “-”
Блок1 = Блок2 Зн2 … Блок2
Зн2 = “*” ! “/”
Блок2 = Блок3 “↑” … Блок3
Блок3 = </функция…функция/> Блок4
Блок4 = переем ! вещ
Функция = Sin ! Cos ! Tg
Метка = цел
Перем = Б </[Б ! ц] … [Б ! ц]/>
Вещ = цел “.” Цел
Цел = ц…ц
Б = “A” ! “B” ! … “Z”
Ц = 0 ! 1 ! 2 ! … 7
ну и пример "программы" на таком языке:

Код:
Start

Fourth 345 213        76          23      456 234 123  345,
Second 5.3 2.1 7.4 2.1, 
First 3.14, 
Third 7654, 
Second 1.5 1.2 443.123 56.23, 
Third 213, 
Fourth 111 222 333

1: A1 = 3.44 + sin cos sin 2.45 + 1.11 * 2.1 ^ 3.1 + 4.5 - 6.74
    A2 = A1 ^ 3.2 - 5.7*2.1
    A3 = a1 - a2
2: A4 = cos 4.2*2.1^5.2 - 1.2 + tg 5.0^2.1

Stop
выложил бы код, но я там юзал wtl, собирать и тестировать влом

пс. а такие вещи, как структуры хранения данных и тп второстепенные
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 04.02.2010 в 17:31.
pproger вне форума Ответить с цитированием
Старый 04.02.2010, 21:17   #7
semenovmixan
Заблокирован
 
Регистрация: 08.01.2010
Сообщений: 0
По умолчанию

Готов взяться за проект
номер ICQ: 565460353 или 480964456
mikefreelance@rambler.ru
semenovmixan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свой интерпретатор к Apache Роман Радер Свободное общение 2 16.01.2010 18:48
Интерпретатор формул и кода. Mixasik Общие вопросы Delphi 0 15.07.2009 22:20
интерпретатор машинного языка Hellgrom Паскаль, Turbo Pascal, PascalABC.NET 0 02.05.2009 18:46
Интерпретатор Паскаля SvetickPro Помощь студентам 1 17.10.2008 22:00
командный интерпретатор <Dusha> Общие вопросы C/C++ 4 16.08.2008 18:27