Easyelectronics.ru

Электроника для всех
Текущее время: 20 июн 2019, 14:55

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 66 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 22 июл 2018, 15:33 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2166
Откуда: Китай, Пекин
anakost писал(а):
Все программы MS Office включают возможность написания скриптов на Visual Basic. И что, все конечные пользователи на нем пишут? Скорее тянут с инета написанное программистами.

всё так. 99% продвинутого использования Excel это формулы в ячейках. это пользователи любят и ценят.
ссылку на проект Excel to code я выше уже дал. Куда примитивнее... и редактор готовый есть, и умение им польлзоваться в наличии.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 22 июл 2018, 16:21 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 955
cheblin писал(а):
всё так. 99% продвинутого использования Excel это формулы в ячейках. это пользователи любят и ценят.
ссылку на проект Excel to code я выше уже дал. Куда примитивнее... и редактор готовый есть, и умение им польлзоваться в наличии.

Есть и такой языковой концепт-проект Thyrd на слиянии визуального программирования с использованием дизайна таблиц
Может кому то окажутся интересным его идеи. :)

P.S. Забавно, кто то на mirknig разместил ссылку на одну из книг по Forth (Форт) :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 23 июл 2018, 00:45 
Старожил

Зарегистрирован: 05 дек 2015, 16:56
Сообщения: 311
Pingvin писал(а):
KPG писал(а):
Pingvin писал(а):
Была и такая мысль - при первом чтении контроллер сам компилирует байт-код, в последующем исполняет его.

Насколько важно придерживаться синтаксиса классических компьютерных языков программирования в вашем понимании?

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

Если планируется делать с прицелом на пользователя - то я бы делал в графическом виде. Посмотрите на FBD.
У вас железка имеет весьма ограниченный набор источников событий и выходных сигналов. Что там по входу, две кнопки да ИК-приёмник? А на выходе - МР3 плеер для озвучки событий да ИК-светодиод? Плюс несколько дополнительных таймеров для отсчёта дополнительных игровых задержек.
Сделать набор блоков, которые имеют входы и выходы. А соединять их между собой - задача пользователя.
И никаких скриптов и парсеров :)
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 23 июл 2018, 01:06 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
Gipsy писал(а):
И никаких скриптов и парсеров :)

Внутреннее представление все равно представляет собой нечто, что потребует парсера или, как минимум, десериализатора. Причем вариант с десериализатором куда более хрупкий (чувствительный к повреждениям данных) и куда более геморный с точки зрения инструментария (например, показать разницу между версиями - надо писать все с нуля). Это если закрыть глаза на то, что всю эту гуйню еще надо написать, а текстовый редактор есть в штатной поставке любой системы, да и с остальными инструментами (например, контроль версий или дифф) сложностей никаких. Цена за все это - написать парсер.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 23 июл 2018, 06:42 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
О блоках тоже думал, но это, наверно - уже второй этап.
А так все верно - по сути нужно описать поведение системы при наступлении различных событий, коих действительно - немного.
Обрабртчики событий, так скажем + инициализация глобальных (системных) переменных.

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

А поскольку имеется SD карта и доступ к её содержимому по USB - пользователи будут легко обмениваться скриптами.
Или на сценарную игру - записали скрипт соответствующий - вот тебе новый сценарий игры.
Такие мечты...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 23 июл 2018, 12:46 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 894
Pingvin писал(а):
О блоках тоже думал, но это, наверно - уже второй этап.
А так все верно - по сути нужно описать поведение системы при наступлении различных событий, коих действительно - немного.
Обрабртчики событий, так скажем + инициализация глобальных (системных) переменных.

Все эти FBD или Click&Go довольно просты, там этап компиляции полностью отсутствует, чтобы такое написать никакие книги по компиляторам читать не нужно.
Если исходник в виде текстового файла, то просто берешь очередную строку, разбиваешь на токены, первый - это команда, остальное - аргументы. Хочешь сразу выполняешь, хочешь сохраняешь в виде бай-кода... Рабочий прототип можно за вечер написать, в чем проблема то? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 07:38 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
Пилю потихоньку виртуальную машину для байт-кода (оптокода).
Пока на компе.
Вот думаю - какие команды могут пригодиться?
Пока такие реализовал
typedef enum optoCode {
NOP=0,
PUSH,
POP,
SUM,
DONE,
MINUS,
DIVISION,
JUMP,
INIT_VAR,
LOAD_SYS_VAR,
STORE_SYS_VAR,
COMPARE,
JUMP_IF_EQUALLY

} tOptpCode;

Эти работают уже.

Типы данных пока это целые числа, символы (char) и строки.
Нужны ли массивы?

Так выглядит "программа" в оптокодах
uint32_t bytecod[]={LOAD_SYS_VAR,1,PUSH,5,SUM,STORE_SYS_VAR,1,INIT_VAR,VM_INTEGER,0,55, INIT_VAR, VM_CHAR, 1, 'Y', INIT_VAR, VM_STRING, 3, 'H','e','l','l','o','!','\0',PUSH,23,PUSH,34,SUM,PUSH,5,SUM,PUSH,3,MINUS,PUSH,3,DIVISION,JUMP,40,NOP,NOP,PUSH,5,PUSH,5,COMPARE,JUMP_IF_EQUALLY,0,DONE,'};

Почитал немного про скриптовый язык Pawn - был удивлен, как интуитивно пришел к некоторым решениям, используемым в Pawn.
Например - там есть такое понятие как cell (ячейка) - её величина зависит от разрядности контроллера.
У 32-битных её размер 4 байта.
Я так же решил не дробить "слово" контроллера и работаю с блоками данных в 4 бита.


Решил писать на С++
Нет никакого перебора switch() case
Есть массив с адресами функций, соответствующих оптокодам.
tFuncDef const VM::LSL_funcList[]={{LSL::nop},{LSL::push},{LSL::pop},{LSL::sum},{LSL::done},{LSL::minus},{LSL::division},{LSL::jump}, {LSL::init_var},
{LSL::load_sys_var},{LSL::store_sys_var},{LSL::compare},{LSL::jump_if_equally},{LSL::jump_if_more}};

Оптокод - есть индекс соответствующей функции в массиве.
Сразу вызывается нужная функция по указателю.
void VM::exec_optocod(tOptpCode optocod)
{

pF=LSL_funcList[optocod].funcAddress;
pF(&bytecod[VM::CP]);
}

так что работать должно быстро.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 11:04 
Старожил
Аватара пользователя

Зарегистрирован: 06 ноя 2013, 16:07
Сообщения: 648
Откуда: Германия
Pingvin писал(а):
так что работать должно быстро.


Если производительность имеет значение, то такие утверждения стоит внимательно проверять.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 13:43 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 698
Pingvin писал(а):
Захотелось сочинить свой скриптовый язык.

Гиблое дело. Шансы на успех меньше чем государственной лотереи.
Успех в моём понимании - повсеместное внедрение и использование конечного продукта.
Чтобы оценить масштаб бедствия - рекомендую взглянуть на GCC. Компилятор - который может собирать самого себя.

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 14:48 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 955
Вторников. Стек, или Путешествие туда и обратно

P.S. Свежая статья с Хабра Байт-машина для форта (и не только) по-индейски


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 15:55 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 894
Pingvin писал(а):
Вот думаю - какие команды могут пригодиться?

А компилятор для какого языка, собственно, хочется получить? Пока у тебя только 3 математических операции реализовано, даже умножения почему-то нет, банальные flag = !flag и то не напишешь, но откуда нам знать, может так и задумано :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 16:06 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3201
я просто оставлю это здесь:
https://github.com/rswier/c4/blob/master/c4.c


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 17:28 
Старожил

Зарегистрирован: 27 апр 2013, 13:53
Сообщения: 955
пользовательские скрипты в платe Pololu Maestro Servo - Maestro Scripting Language


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 20:02 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
Reflector писал(а):
Pingvin писал(а):
Вот думаю - какие команды могут пригодиться?

А компилятор для какого языка, собственно, хочется получить? Пока у тебя только 3 математических операции реализовано, даже умножения почему-то нет, банальные flag = !flag и то не напишешь, но откуда нам знать, может так и задумано :)

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 20:53 
Заглядывает иногда

Зарегистрирован: 28 сен 2018, 20:50
Сообщения: 41
Советую посмотреть на лисп и форт, это самые простые для реализации языки. Еще Tcl довольно простой.
Но проще взять что-нибудь готовое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 19 дек 2018, 23:27 
Старожил

Зарегистрирован: 23 янв 2016, 15:37
Сообщения: 894
Pingvin писал(а):
Должен быть простой язык для описания игровой логики лазертаг устройств.

Это слишком общее описание... Ну ладно, в принципе если довести количество математических операций до некоего приемлемого минимума, то тебе не хватает команд для работы с функциями и стеком. Пара каких-то CALL, один вызывает встроенные функции по индексу, второй по адресу, но сохраняя адрес возврата на стеке, плюс нужен RET. Если у функции есть аргументы, они перед вызовом пушатся на стек, а после вызова его нужно вернуть в прежнее положение, обычно просто прибавляют или отнимают значение равное количеству аргументов. При наличии локальных переменных аналогичным образом резервируют место на стеке и перед выходом из функции он также восстанавливается, дополнительно для работы с такими переменными нужен еще один набор Push/Pop и, насколько я понимаю, твои LOAD_SYS_VAR/STORE_SYS_VAR выполняют аналогичные функции по отношению к глобальным переменным. Компилятор на который _pv ссылку давал похожим образом поступает, только там встроенные функции в виде отдельных команд.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 07:30 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
_pv писал(а):
я просто оставлю это здесь:
https://github.com/rswier/c4/blob/master/c4.c

Это интерпретатор языка Си?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 07:34 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
Вызов подпрограмм безусловно нужен, вчера размышлял об этом.
На счёт сохранения результатов в стеке - не уверен.
Можно же через переменные все делать.
Все равно ведь результат будем присваивать переменной, так это можно и в самой подпрограмме сделать.
Пусть будут процедурами.


Последний раз редактировалось Pingvin 20 дек 2018, 12:37, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 12:07 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3201
Pingvin писал(а):
_pv писал(а):
я просто оставлю это здесь:
https://github.com/rswier/c4/blob/master/c4.c

Это интерпретатор языка Си?

Компилятор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 12:39 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
Код:

./c4 c4.c hello.c
./c4 c4.c c4.c hello.c



И в чём смысл?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 12:56 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3201
Pingvin писал(а):
Код:
./c4 c4.c hello.c
./c4 c4.c c4.c hello.c

И в чём смысл?

а если всё-таки в код посмотреть? его там совсем немного.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 13:10 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
Подумал - можно язык сделать максимально близким к оптокоду.
Вычисления - в польской нотации.

Show Например


Последний раз редактировалось Pingvin 20 дек 2018, 13:31, всего редактировалось 7 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 13:11 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
_pv писал(а):
Pingvin писал(а):
Код:
./c4 c4.c hello.c
./c4 c4.c c4.c hello.c

И в чём смысл?

а если всё-таки в код посмотреть? его там совсем немного.


Выложили проект на github, а описания - ноль.
Моветон!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 13:46 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 3201
Pingvin писал(а):
Выложили проект на github, а описания - ноль.
Моветон!

Да совсем озверели, там, о ужас, не то что скетча для ардуиныпроекта для моего любимого IDE нет, даже Makefile не потрудились приложить, и теперь совершенно непонятно как же это всё собрать!!!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Парсеры, генераторы компиляторов.
СообщениеДобавлено: 20 дек 2018, 13:53 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2189
Даже комментариев практически нет.
Оно стоит того, чтобы я время тратил на изучение?
Извлекать логику программы из исходников чтобы понять, что же она в итоге делает - так себе развлечение, на любителя...
Если хотите заинтересовать кого то своим проектом - будьте добры, не поленитесь, сделайте нормальное описание.
Ковыряться в чужих портянках не у каждого есть желание и время.


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

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


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

Сейчас этот форум просматривают: Шурик


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB