У языка есть лексика, синтаксис и семантика. Синтаксис можно описать сначала в виде БНФ, далее - например, в виде LL(1)-грамматики (зависит от конкретного метода синтаксического анализа). Семантику можно описать с помощью денотационной семантики
Но с прицелом на реализацию всё-таки описывают операционную семантику. См. WebAssembly, R7RS...
А реализация языка уже есть, или он только проектируется?
Пока только в голове, так спеку я хочу написать для того что-бы от неё отталкиваться
А я бы начал с определяющего язык интерпретатора (definitional Interpreter) — тут все сразу и даже в исполняемом виде. Только надо писать этот интерпретатор как можно декларативнее!
Не особо вникал в описание семантики. Денотационная показалась более или менее понятной, а вот операционная - страшный лес)). Последняя имеет аналогию с операционной семантикой для описания процессов Хоара?
это будет компилируемый язык
Я бы, может, сначала порекомендовал написать пару алгоритмов на этом языке, чтобы понимать, как его конструкции будут выглядеть на практике. Потом можно написать простенький парсер с транслятором в Си, который даст БНФ, и уже отсюда уточнять детали в спецификации.
Это не мешает сделать интерпретатор:)
Ну кстати да, я, когда мне хочется сделать язык или DSL, начинаю писать для него простенькую программу. Сразу же вылезают вопросы удобства...
Наверное, имеет. Грубо говоря, операционная семантика — это описание виртуальной машины для языка.
Парсер только допускает программу, или транслирует её во что-то? Язык общего назначения?
скриптовый, с прицелом на веб
Поробуйте написать несколько программ целевого назначения на вашем языке, сравните их с другими. Если проблем не возникает - можно в первом приближении фиксировать спецификацию. Трансляция, или интерпретация очень помогают понять проблемы на ранних этапах
Если скриптовый, то ведь как здесь может быть компилятор?
https://ro-che.info/ccc/images/language.png
ну можно и не в жс, а в васм+жс
По моему опыту обновлять сразу две реализации языка - сплошная боль, особенно если задействован какой-то нетривиальный контрол-флоу
В блоге Алексей Недоря можно почитать — у него там вся предыстория и шаги создания своего языка. Поглубже копнуть на пару лет — там не много записей. Ещё обсуждения есть. А так как язык уже на финальной стадии — есть описание языка, компилятор и примеры. Это очень хороший пример как раз. http://алексейнедоря.рф
Спасибо большое за подсказку, я вот вчера как раз начал накидывать примеры кода https://github.com/MrNektom/sky/tree/main/examples
Обсуждают сегодня