Easyelectronics.ru

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

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



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

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

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

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

_________________
unirail.org


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

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

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

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


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

Зарегистрирован: 05 дек 2015, 16:56
Сообщения: 315
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
Сообщения: 2428
О блоках тоже думал, но это, наверно - уже второй этап.
А так все верно - по сути нужно описать поведение системы при наступлении различных событий, коих действительно - немного.
Обрабртчики событий, так скажем + инициализация глобальных (системных) переменных.

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

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


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

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

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


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

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2428
Пилю потихоньку виртуальную машину для байт-кода (оптокода).
Пока на компе.
Вот думаю - какие команды могут пригодиться?
Пока такие реализовал
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
Сообщения: 652
Откуда: Германия
Pingvin писал(а):
так что работать должно быстро.


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


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

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

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

_________________
Потоковая OS


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

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

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


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

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

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


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

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


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

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


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

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

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

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


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

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


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

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

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


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

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

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


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

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


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

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

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

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

Компилятор.


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

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

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



И в чём смысл?


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

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

И в чём смысл?

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


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

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

Show Например


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

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

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

И в чём смысл?

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


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


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

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

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


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

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


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

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


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

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


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

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

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