roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 13:36

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 22 май 2010, 10:11 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Под стэковую машину гораздо проще написать компилятор, особенно если не выдумать всякие продвинутые оптимизации.

А откуда берется множество DUP/DROP?

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 22 май 2010, 10:19 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Ну... "множество" понятие относительное :)
Просто если сравнивать стековую машину, например, с кучей равнозначных регистров (как в AVR или ARM),
то непроизводительных пересылок больше...

А компилятор, естественно, под стековую машину проще писать - тут вы правы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 08:59 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Кое-что уже работает :)

Исходник:
Код:
function fib(@n)
{
    if (@n = 0) return 0;
    if (@n = 1) return 1;
    return fib(@n-1) + fib(@n-2);
}

function fib2(@n) : @n1, @n2, @tmp
{
    if (@n = 0) return 0;
    if (@n = 1) return 1;
    @n1 := 0;
    @n2 := 1;
    while (@n) {
        @tmp := @n2;
        @n2 := @n1 + @n2;
        @n1 := @tmp;
        @n := @n - 1;
    }
    return @n2;
}


Листинг компилятора:
Код:
   fib: L_LOAD 0
        CONST_0
        EQ
        BRF 9
        CONST_0
        RET_POP_0
     9: L_LOAD 0
        CONST_1
        EQ
        BRF 18
        CONST_1
        RET_POP_0
    18: L_LOAD 0
        CONST_1
        MINUS
        CALL fib
        L_LOAD 0
        CONST_2
        MINUS
        CALL fib
        PLUS
        RET_POP_0
  fib2: LOCALS 3
        L_LOAD 0
        CONST_0
        EQ
        BRF 46
        CONST_0
        RET_POP 3
    46: L_LOAD 0
        CONST_1
        EQ
        BRF 56
        CONST_1
        RET_POP 3
    56: CONST_0
        L_STORE 1
        CONST_1
        L_STORE 2
    62: L_LOAD 0
        BRF 91
        L_LOAD 2
        L_STORE 3
        L_LOAD 1
        L_LOAD 2
        PLUS
        L_STORE 2
        L_LOAD 3
        L_STORE 1
        L_LOAD 0
        CONST_1
        MINUS
        L_STORE 0
        BR 62
    91: L_LOAD 2
        RET_POP 3


_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 09:42 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
Ого! Круто...
А это прямо команды вирт. машины или какой-то "промежуточный код" в компиляторе?

Немного непонятен (по-моему, не очень логичен) формат вызова функции
(передача аргументов - размещение локальных - адресация - возврат результатов...)

Добавлено спустя 3 минуты 46 секунд:
входной язык не понравился :pardon:
Мне кажется, что нужно думать о красоте и юзабилити...
(Ну вот такое у меня представление о том, как работает этот мир)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 09:51 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Это команды машины.

Для вызовов используются команды CALL, CALL_DROP, LOCALS, RET, RET_POP, RET_0, RET_POP_0:
CALL addr - вызов функции
CALL_DROP addr - вызов функции, игнорировать возвращенное значение
LOCALS n - зарезервировать место под n локальных переменных
RET n - освободить n локальных переменных, вернуть 0
RET_POP n - освободить n локальных переменных, вернуть значение с вершины стэка
RET_0 - вернуть 0
RET_POP_0 - вернуть значение с вершины стэка

Michael_K писал(а):
входной язык не понравился

Предложите варианты. Я в общем то для того и выкладываю промежуточную инфу

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 10:52 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
мне кажется вот что:
1. логичнее (может быть) считать адреса аргументов и локальных с макушки стека (??? не уверен)
(тут могут быть варианты, если ВМ использует фреймы стека для контроля, например).

2. функция (может быть) должна выкидывать со стека аргументы (??? тоже не уверен)

3. язык, как мне кажется, перегружен "кривыми" условными символами -
все эти ":=", ";", "@" и прочие скобочки я бы постарался минимизировать...
Это потенциальный источник синтаксических ошибок, которые грозят перерасти в семантические
(что будет, если пользователь, например, поставит "=" вместо ":=" или напишет "n1" вместо "@n1"?)
Я бы также выкинул "объявления"... Тут надо смотреть на то, что хочется с типами получить...

Вот мне кажется, что нужно из си выкинуть некоторые символы:
"==" (по факту обычно применяется только в IF, WHILE итп, там, где по факту же редко применяется присваивание).

";" - компилятор почти всегда прекрасно может увидеть, где кончается одно выражение и начинается другое
(пробелом или переводом строки отделить, в крайнем случае применять только для явного разделения в одной строке, как двоеточие в бейсике).

объявления (и пользовательские типы), в крайнем случае использовать неявное преобразование к одному типу или вообще "универсальный" тип (да-да, я понимаю, что это отказ от современных концепций)

И (МОЖЕТ БЫТЬ) даже заменить открывающие-закрывающие фигурные скобки тупо отступом
(пусть пользователь будет генерить сразу красивый код, и не путается в скобочках),
хорошо бы, если бы это было поддержано редактором.

ну и стопудово нужен качественный функциональный препроцессор.

Код:
fib(n)
    if (n = 0) return 0
    if (n = 1) return 1
    return fib(n-1) + fib(n-2)

fib2(n)
    if (n = 0) return 0
    if (n = 1) return 1
    n1 = 0
    n2 = 1
    while (n)
        tmp = n2
        n2 = n1 + n2
        n1 = tmp
        n = n - 1
    return n2


В принципе и скобки в ИФах, вайлах итп - лишние :)

Добавлено спустя 9 минут 31 секунду:
Ну а вообще, нужно конечно ориентироваться на предполагаемые проекты.
Широкомасштабируемый код, многократно используемые куски, библиотекарь (ну, чем черт не шутит)
или, скажем, динамическое связывание (не приведи господь)
сразу наложат ограничения на жесткую типизацию и т.п.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 11:09 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
  1. Не принципиально
  2. Должна. Ошибка в компиляторе - при генерации RET не учитывается количество параметров
  3. @ (а есть еще $ и # :) ) были добавлены для упрощения компилятора на начальном этапе - это хинт компилятору, что перед ним - локальная переменная, глобальная или константа. Потом уберу
    Отступы - потенциальный источник ошибок (табуляция/пробел). Хотя и можно сделать редактор который не даст такие ошибки допустить.
    Типы - хочется чтобы были целое и строка (с фиксированной макс. длиной). Работа со строками - только нативные функции, в самом языке - только копирующее присваивание. Параметры функций - всегда целое.
    А скобки в условиях и так необязательные, просто по привычке их пишу

Раздельная компиляция - нафиг. Только инклюды.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 11:26 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
1. согласен
2. понятно
3. отступы... тоже согласен, просто лучшего не придумалось.
"только инклюды" - ДА!!!

Добавлено спустя 14 минут 5 секунд:
Цитата:
в самом языке - только копирующее присваивание.

А, например, разбор-генерация протокола обмена?
через нативные функции преобразования в целое и обратно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 11:32 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Ну про строки я с самого начала писал, что над этим надо подумать. Пока четкой картины нет

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 15:04 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Михаил, у тебя прям почти что питон получился :)

Код:
def fib(n):
    if n == 0: return 0
    if n == 1: return 1
    return fib(n-1) + fib(n-2)

def fib2(n)
    if n == 0: return 0
    if n == 1: return 1
    n1 = 0
    n2 = 1
    while n:
        tmp = n2
        n2 = n1 + n2
        n1 = tmp
        n = n - 1
    return n2

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 15:20 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
В качестве входного языка сильно рекомендую Оберон или Паскаль.
У него очень короткая грамматика, чего не скажешь, к примеру, о питоне.

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 15:32 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
угу, а у брейнф*ка грамматика еще короче.
Michael_K писал(а):
Мне кажется, что нужно думать о красоте и юзабилити...
(Ну вот такое у меня представление о том, как работает этот мир)

Понимаете, пользователю должно быть удобно и приятно, а не программисту.

Добавлено спустя 8 минут 24 секунды:
пользователя же мало волнует, как там устроен компилятор,
как формально описывается грамматика, что там происходит в виртуальной машине...
Главное, чтобы безгеморройно и хорошо решала его задачи.

Кстати, неплохо бы, наверное в поставленной задаче "слабые" имена ввести.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 15:32 
Не в сети
Аватара пользователя

Зарегистрирован: 08 окт 2004, 16:43
Сообщения: 2114
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий
Цитата:
угу, а у брейнф*ка грамматика еще короче.

К чему это важное замечание?

_________________
Все новости о моих проектах http://savethebest.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 15:33 
Не в сети
Аватара пользователя

Зарегистрирован: 07 окт 2009, 00:29
Сообщения: 6028
Откуда: СПб
К тому, что простая грамматика совсем не означает, что языком удобно пользоваться.
http://ru.wikipedia.org/wiki/Brainfuck


Последний раз редактировалось Michael_K 23 май 2010, 15:35, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ищу кросс-компилятор для АВР... :)
СообщениеДобавлено: 23 май 2010, 15:34 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Пользователю по большому счету пофигу C или паскаль - ибо "полноценного" языка все равно не будет. То о чем мы сейчас говорим вообще-то немного отличается от того, с чего начался этот топик. Мне нужен простой язык с минимальным набором конструкций, чтобы "склеить" нужным юзеру образом различные сервисы предоставляемые устройством

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 74 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO