[image]

Выбор языка для простого интерпретатора

 
+
-
edit
 

Gudleifr

втянувшийся

<удалено по просьбе администрации>
   93.0.4577.6393.0.4577.63
Это сообщение редактировалось 23.01.2022 в 02:48

Unix

опытный

Gudleifr> Нужно решить, какой простой интерпретатор некоторого языка реализовать для простого программирования некоторой фичи.
[...]
Gudleifr> Ограничение: размер [ядра] интерпретатора - не более 100к символов на JavaScript.

Или я чего то не понял ...
Или почему бы прямо на JavaScript и не писать, а не заниматься онанизмом на деньги заказчика? Лучше чем JS (да хоть V8) в одиночку вряд ли сделаешь...

Но ты меня не слушай, я из "кровавого Ынтерпрайза", а не из "свободных художников", либо не понял о чём ты.
   78.078.0

Gudleifr

втянувшийся

Unix> Или почему бы прямо на JavaScript и не писать,
По условию задачи. Я спрашиваю, не видел ли кто-то более элегантный интерпретатор...
Имеющий удобный набор строковых примитивов...
Имеющий компактную запись вещественных вычислений...

P.S.
У меня к JS за время его использования скопились следующие претензии:
1. Зачем-то его сделали объектно-ориентированным.
2. На нем нельзя "просто взять и написать", надо искать объекты, которые "делают примерно то, что надо".
3. Зависимость от версий браузеров доставляет нещадно.
4. Количество "технологий", которые нужно прицепить к простейшему коду, для решения любой практической задачи, зашкаливает.
5. JS-бомонд может обсуждать только "кубические объекты в вакууме", но не смысл написанного.
   93.0.4577.6393.0.4577.63
Это сообщение редактировалось 12.09.2021 в 10:42
+
+1
-
edit
 

Sandro
AXT

инженер вольнодумец
★☆
Gudleifr> По условию задачи. Я спрашиваю, не видел ли кто-то более элегантный интерпретатор...

Эээээ ... ты написал "реализовать", а не "использовать".

Определись уже, что тебе надо.
   52.952.9
+
-
edit
 

Gudleifr

втянувшийся

Sandro> ... ты написал "реализовать"
Да.

Sandro> Определись уже, что тебе надо.
Между моей задачей и Ващими хотелками? Разумеется, первое.
   93.0.4577.6393.0.4577.63
+
+2
-
edit
 

Unix

опытный

Sandro>> Определись уже, что тебе надо.
Gudleifr> Между моей задачей и Ващими хотелками? Разумеется, первое.

Зря ругаетесь, пока не вижу повода. Ну кроме осени :)

Gudleifr - ты поставил вопрос довольно странно.
Поэтому что я, что Sandro (ну я так думаю) всё же решили что это очередной Junior изобретает DSL вместо закрытия issues в Jira-e © :D

Ну смотри сам - если тебе реально нужен какой то DSL - то на вход для его выбора ты почти ничего не дал. Вот это:
Имеющий удобный набор строковых примитивов...
Имеющий компактную запись вещественных вычислений...
 

ни о чём. "Удобный" - это кому? и это как? А кроме "компактной записи вещественных вычислений" ещё какие бывают? Ну хоть бы написал прямая или польская или чего ещё ты имел ввиду ...
В результате - единственный чёткий лимит: "не более 100к символов на JavaScript"

На мой вкус твоя ошибка тут это: вместо того чтобы рассказать о задаче и спросить какие идеи есть по еЯ решению, ты попросил чего-то про уже принятое решение. И когда тебе намекнули что возможно это "не туда" - обиделсо.

А как по мне, на твоих скудных вводных и плюс вот это:
2. На нем нельзя "просто взять и написать", надо искать объекты, которые "делают примерно то, что надо
 
то и выходит - сделай такие объекты для JS и юзай уже их! Вместо!©

Я JS недолюбливаю, но всё же с моей "кроваво-Ынтерпрайзной" колокольни так всё же много лучше чем то, что хочешь ты. Но да, я не твой тимлид, раздавать волшебных пендалей и возвращать в реальность - не моя забота.

Или, в который раз уже - расскажи о задаче, мыж нихчего не поняли :)

Ну ... как то так!©
   78.078.0

Gudleifr

втянувшийся

Unix> вместо того чтобы рассказать о задаче
Задача не важна. Вопрос чисто на эрудицию. Я тупо перебрал все пришедшие на ум языки интерпретаторов и понял, что нуждаюсь в новой мысли. Т.е. просто накидайте, пожалуйста, по паре-другой десятков первых пришедших в голову...

Заранее спасибо.
   93.0.4577.6393.0.4577.63

yacc

старожил
★★★
Gudleifr> Нужно решить, какой простой интерпретатор некоторого языка реализовать для простого программирования некоторой фичи. Условия - операции с плавающей точкой и работа с текстами.
Задача некорректна:

Gudleifr> Основное требование: программирование фичи должно проводиться быдло-способом: с максимальным использованием библиотек фичи, без модульностей и абстракций.
Это как ?
Как использовать библиотеки если нет модульности ???

Библиотеки - это как раз расширение языка, модульность.

Sandro правильно написал - определись с тем что нужно.

Пример: имеем текстовый редактор, можно реализовать скажем язык описания в виде фортрана или Бейсика и доступ к содержимого в формате встроенного оператора ( а не библиотеки ) get (x,y) - получить символ по позиции.

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

Язык выбирается по задаче, а не по простоте реализации
   92.0.4515.10792.0.4515.107

Gudleifr

втянувшийся

yacc> Как использовать библиотеки если нет модульности ???
Как в классическом BASIC - операторы вместо функций.

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

Заранее спасибо.
   97.0.4692.7197.0.4692.71
+
+1
-
edit
 

yacc

старожил
★★★
Gudleifr> Как в классическом BASIC - операторы вместо функций.
Так это оператор

Gudleifr> Да, напишите десяток первых пришедших в голову интерпретируемых языков, где были бы эти две фичи, и не заморачивайтесь, кто, где и как это реализует...
Бейсик - проще некуда
Можно Фокал

Форт это вообще гибкий язык - что хочешь реализуй, хоть плавающую точку - это словарь в терминах Форта. Какой словарь загрузил, такие "операторы" и будут.
   92.0.4515.10792.0.4515.107
+
-
edit
 

digger

аксакал

Gudleifr> Ограничение: размер [ядра] интерпретатора - не более 100к символов на JavaScript.

Т.е. сам интерпретатор написан и работает на жабоскрипте? Или к чему это условие?
   97.0.4692.7197.0.4692.71

Gudleifr

втянувшийся

yacc> Бейсик - проще некуда
Очевидно, но засчитываю.

yacc> Можно Фокал
Пожалуй, красивее BASIC (если не считать спектрумовского, где тоже "по первой букве").

yacc> Форт
Я его уже поминал.

Кто больше?
   97.0.4692.7197.0.4692.71
+
-
edit
 

Gudleifr

втянувшийся

digger> Т.е. сам интерпретатор написан и работает на жабоскрипте?
По крайней мере, ядро. Остальное, возможно, будет подгружаться в текстовом виде из библиотечного файла или самого документа.

digger> Или к чему это условие?
По правилам моего форумного "хостинга" есть возможность создания только ограниченного числа html-файлов ограниченного размера.
   97.0.4692.7197.0.4692.71
EE Татарин #12.01.2022 13:01  @Gudleifr#11.09.2021 15:37
+
-
edit
 

Татарин

координатор
★★★★★
Gudleifr> Основное требование: программирование фичи должно проводиться быдло-способом: с максимальным использованием библиотек фичи, без модульностей и абстракций. В идеале все должно сводиться к двум "операторам": "взять значение в этой точке [обработки] текста" и "вставить ранее запомненное значение
Gudleifr> в эту точку текста". Т.е. нужно уметь рассчитывать сами "значения", так и "области текста, рассчитанные на получение/вставку значений".
Gudleifr> Ограничение: размер [ядра] интерпретатора - не более 100к символов на JavaScript.
Видимо, просто не понимаю условий задачи.

Если всё сводится к двум операторам, то зачем брать за основу какой-то язык? Все универсальные языки слишком универсальны, и поэтому "сложны" и "избыточны" для задачи.
При этом того же ЯваСкрипта для задачи с избытком, всё, что нужно - добавить пару функций, удобно реализующих задачи этих двух операторов.

Если необходимо отсечь избыточную функциональность (ну, чтобы лишнего не понаписали), то брать и именно отсекать всё кроме вызова этих двух функций и манипуляций переменными при "компиляции" искомого в ЯваСкрипт. Не нужна объектность? Ну, при проверке скрипта убираются все строчки с определениями классовм, обращением к методам/данным объектов и т.п.
При этом непосредственно исполняемый ЯваСкрипт будет на десятичный порядок, а то и два быстрее интерпретатора, написанного на нём. А синтаксис ЯС предельно прост, да и вообще, с таким подходом от него остаётся почти только делимитер ";" между операторами. :)
   96.0.4664.11096.0.4664.110
RU Gudleifr #12.01.2022 13:40  @Татарин#12.01.2022 13:01
+
-
edit
 

Gudleifr

втянувшийся

Татарин> ...

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

Пример 1.
Ну, давайте, для примера представим, что это просто модель Машины Тьюринга (МТ).
1) Что мы видим? Есть единственный оператор: q, a -> q', a', r/l. Т.е. из всего JS нам понадобится единственная функция: "найти и применить нужную строку таблицы". Зато параметров для нее - целая таблица. Что проще? Придумать для обращения к клеткам этой таблицы удобную мнемонику или честно все это прописывать по правилам JS - списками и вызовами ф-ий?
2) Кроме того, глядя на (внутреннее) представление на JS этой таблицы (да и ленты МТ), мы можем заметить, что мы не будем обращаться к "просто переменным", мы будем чаще всего иметь переменные с кучей индексов. Каждый раз выписывать полный набор скобок, соответствующий понятию "текущая клетка" и т.п., право, слишком затруднительно.

Так что проще написать простой "язык", который позволит, хотя бы, избежать избыточности в повторных вызовах одних и тех же функций для одних и тех же структур.

Пример 2.
Приведу программу на очень простом языке разбиения структурного текста на "нужную" и "ненужную" часть:

GXGI: U-U-U F=G? F-CU-U A-A-A
G0GIN,G\PN: U-E-A A-BT-A
P\PI: U-A-U F=P? F-A-U A-A-A
PTTI: A-BS-S F=Y?H0 F-A-A U-BS-S
P#HI,PRHI: A-BS-S F=Y? F-A-A U-BS-S
PLL,P0LI: A-BT-S F=YHT0 F-X-A U-BT-S
PXGN: A-BT-A F=YHTL0 F-CE-A U-BT-A
H0TI: U-X-A S-T-S F=H0 F-X-A A-BT-S
HXHI: U-A-U S-S-S F=H? F-A-U A-A-A
T0LI: U-X-A S-T-S F=T0 F-X-A A-BT-S
TXTI: U-A-U S-S-S F=T? F-A-U A-A-A
LLLI: U-U-U S-S-S F=L? F-CU-U A-A-A
L\PN,L0GIN,LXGN: U-E-A S-T-A F=L0 F-CE-A A-BT-A

С двоеточиями - метки (показывают, в каком месте структуры текста мы находимся).
x-y-z означает: если x, то выполнить y (операции очень просты - перенести строку(и) в одно из хранилищ), установить z и закончить, иначе продолжить.
x=y означает: установить x, если выполняются y; продолжить.

Представляете честную запись этих "если ... , то перенести ..." на JS?
   97.0.4692.7197.0.4692.71
EE Татарин #12.01.2022 13:55  @Gudleifr#12.01.2022 13:40
+
-
edit
 

Татарин

координатор
★★★★★
Gudleifr> Так что проще написать простой "язык", который позволит, хотя бы, избежать избыточности в повторных вызовах одних и тех же функций для одних и тех же структур.
Ну так а я о чём сразу сказал?
Для подобного любой существующий язык слишком универсален (соотвественно, потребует избыточной для задачи нагрузки синтаксисом). В смысле, ЛЮБОЙ существующий язык универсальный будет избыточен. Зачем спрашивать "какой?"?

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

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

yacc

старожил
★★★
Gudleifr> Кто больше?
Т.е. здесь ветка о том, кто сколько знает ЯП интрепретаторов для среды исполнения с малыми ресурсами ( не более 100 кб текста ) ?
И более эрудированный тот, у кого пи больше кто вспомнит большее их количество ? :p
От широко известных - типа Бейсика, до академических типа
NODAL

NODAL interpreter for CP/M|INIS

A NODAL interpreter which works under CP/M operating system is made for microcomputers. This interpreter language named NODAL-80 has a similar structure to the NODAL of SPS, but its commands, variables, and expressions are modified to increase the flexibility of pr //  inis.iaea.org
 

или
Pilot

The Pilot Programming Language on CP/M

Pilot was created by John A. Starkweather in the early 1960s as a programming language for Computer Assisted Instruction. It has often been compared to Logo bec //  techtinkering.com
 

В этом смысл ветки ? :p
   92.0.4515.10792.0.4515.107

Gudleifr

втянувшийся

Татарин> Зачем спрашивать "какой?"?
Татарин> А без точного знания задачи никто оптимальный "удобный"© синтаксис, ессно, посоветовать в принципе не может.
Пардон, повторяю. Вопрос чисто на эрудицию. Я тупо перебрал все пришедшие на ум языки интерпретаторов и понял, что нуждаюсь в новой мысли.

Татарин> Нужно некое подобие регулярных выражений с возможностью какой-то специфичной для задачи манипуляции ими?
Один из вариантов.

yacc> NODAL
yacc> Pilot
Еще раз спасибо. От размера можете абстрагироваться. Мне нужны идеи.
   97.0.4692.7197.0.4692.71

yacc

старожил
★★★
Gudleifr> Еще раз спасибо. От размера можете абстрагироваться. Мне нужны идеи.
Приехали...

То размер важен, то не важен

А что, написать СВОЙ на той же LL-грамматике - не судьба ? - поставить задачу да написать.
Не надо объяснять какие языки по синтаксису для нее подходят ?
   92.0.4515.10792.0.4515.107

Gudleifr

втянувшийся

yacc> То размер важен, то не важен
Важен мне. От вас - только идеи.

yacc> А что, написать СВОЙ
Я и собираюсь писать свой. Я разве об этом не упомянул в нульпосте?
   97.0.4692.7197.0.4692.71
+
-
edit
 

tarasv

аксакал

Gudleifr> Пример 2.
Gudleifr> Приведу программу на очень простом языке разбиения структурного текста на "нужную" и "ненужную" часть:

До боли напоминает конфигурационные файлы парсеров EDI. Вы бы уточнили задачу вам нужен язык общего назначения или проблемно ориентированный?
   97.0.4692.7197.0.4692.71
+
-
edit
 

Gudleifr

втянувшийся

tarasv> Вы бы уточнили задачу вам нужен язык общего назначения или проблемно ориентированный?
Еще раз. Нужны примеры интерпретаторов, имеющих удобные/оригинальные/забавные средства работы со строками и арифметики вещественных чисел. Другие характеристики (кроме желательной/опциональной простоты) не интересуют.
   95.095.0

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru