1563
Обсуждение дизайна языков программирования (как новых, так и существующих). Литература: https://github.com/true-grue/Compiler-Development Создание и устройство компиляторов: @CompilerDev Для новичков: @pld_beginners
Ну, а в чём вопрос то?
Как я сказал, у меня в языке, в разных ситуациях используются разные редукции.
Например в языке есть нечто что я пока называю формами — то там идёт оперирование типизированными синтаксическими конструкциями — переписывание деревьев/термов короче
я просто не знаю, как скоупы обозначаются, потому использовал свою предполагаемую нотацию. можно и без неё. допустим, у нас есть
let e1 := a * b;
let e2 := e1 * c;
let a * let b * let c := d;
let program := e2;
program по правилу 4 будет выведено e2, затем по правилу 2 — e1 * c, из которого по правилу 1 — a * b * c, из которого по правилу 3 — d
Читать полностью…
ну как же? синтаксически конструкции b * c * d в программе не существует, но значение такое строится
Читать полностью…
кстааати. а можно написать правило вида let a * (let b * let c) := ..., редуцирующее a * (b * c)?
Если коротко, то есть нечто вроде первоклассных скоупов. Но оно же и словари/мапки/ассоциативные массивы, но гетерогенные.
Читать полностью…
Есть аналог. Как нибудь распишу.
Спасибо за вопрос🤗
с пушами и инсёртами этими обфускация хорошая получается
Читать полностью…
есть локальный скоуп или его аналог? чтобы переписать a * b * (c * d * (e * f * g) * h * i) * k * l в виде примерно { let efg := e * f * g; let cdhi := c * d * efg * h * i; a * b * cdhi * k * l }
У меня вдруг возник вопрос:
А как соотносятся зипперы (ФП) и паттерн-матчинг?
Спашиваю ибо у меня в языке это как будто одно и тоже 🤔
ага, я вроде такое для того самого языка с перегрузкой по возвращаемому типу реализовывал поверх парсера на комбинаторах, чтобы операторы раскидывать по заданным для них в коде приоритетам и ассоциативностям
Читать полностью…
да-да, я понял. непосредственно сам язык напоминает КЗГ
Читать полностью…
атомы — терминалы, переменные — нетерминалы. плюс типизация
Читать полностью…
Если знаете парсер Пратта то вот по поводу моего варианта:
/channel/LanguageDev/251239
то, что я пока увидел, больше похоже на вдохновление контекстно-зависимыми грамматиками, как будто
Читать полностью…
пожалуй что да, интересная концепция
Читать полностью…
но это будет работать только либо если редукции применяются на значениях, либо если в языке как таковых значений нет и он оперирует типизированными синтаксическими конструкциями (как в лямбда-исчислении, т.е. одно выражении буквально переписывается в другое)
Читать полностью…
Короче я не понял это сообщение.
Перефразируйте пожалуйста.
потому что теоретически если сделать { let a := b * c; a * d }, то синтаксически правило let b * let c * let d := .... не будет возможно редуцировать
единственное, что при таком подходе, как я предложил, потребуется редукция не синтаксическая, а на значениях. как сейчас сделано?
Читать полностью…
А я не могу понять почему я тащусь от этого подхода, хотя естественно у него есть недостатки
Читать полностью…
А как тебе мысль поменять звёздочку и точку местами?
Читать полностью…
Можем обсудить как сделать более читабельно 😏
Можете пожалуйста привести пример того что вам с трудом читается и почему?
Мне не особо важно какой будет синтаксис на самом деле. Но мне важна максимальная линейность нотации — я бы использовал s-expr, но там можно потеряться к скобках. Да и язык у меня по сути работает с последовательностями. Я показывал что можно хоть
++++++++
писать, не смотря на то что + это инфикс.
Ещё можно по разному строить выражения. Например имеется значение:a * b * (c * d * (e * f * g) * h * i) * k * l
Его можно построить иначе:[a; b]
* push [c; d; h; i]
* insert
. after [2; 2]
. [e; f; g]
* push [k; l]
* combine
Я всё больше подумываю оставить в языке только этот вариант. Он больше соответствует идее/концепции, чем первый —
то есть вместо вложенных скобок (любых) использовать только подобные конструкции с использованием одномерных кортежей или "одномерных скобок", а также мультиметоды в инфиксной форме (пробел, точка, звёздочка, плюс) и значений вроде push, insert и т.п.
Я открыт к предложениям🤗
UPD: исправил второй вариант — была лишняя строчка
Вы кстати уже не первый кто сравнивает мой язык с БНФ.
Но я не думал о том чтобы сделать его таким - как-то само получилось)
ну если так то да)
Но для разбора моего языка КЗГ не нужна
я про арифметические и не говорил. похоже на набор правил БНФ
a B c ::= d e F G h I
да нет, тут грамматика не многим сложнее чем у арифметических выражений.
Парсер Пратта знаете?
Вдохновлённая химией и молекулярной биологией
Читать полностью…
а, понял. прям так. f * 1 * #i-want-int
Читать полностью…