Наверное, для того чтобы понять, как они создаются, нужно узнать - почему.
^^ Там так и не было ответа как именно они создаются. Только ответ на "почему" и есть.
По факту, создать язык = создать компилятор который интерпритирует текст в бинарный код понятный машине.
Они создаются точно так же как и любые другие программы.
Продумывается под какие задачи должен язык быть заточен (например, джава является мультиплатформенной из-за "джава-машины" - виртуального посредника между платформами и написаной программой... ; .Net семейство языков транслируется с разных языков в один единый код который уже компилируется в конечную программу -- что создает возможность удобного взаимодействия между проэктами написанными на разных языках и некоторые другие плюшки)
Продумывается синтаксис языка. Максимально недвусмысленный.
(хотя по факту есть код который совсем не двусмысленный но каждый из языков его обрабатывает по-своему, но это редкость и про это пожже)
Пишется компилятор.(программа, главная задача которой -- трансляция текста программы[исходного кода] в эквивалентную программу на низкоуровневом языке, близкому к машинному бинарному коду)
Оттачивается сам синтаксис "в бою". Потом пишется новая версия того же языка с исправлениями и исправляются двузначности и другие минуса.
_________
Теперь про недвусмысленность...
Есть простой код который выглядит +- одинаково на большинстве языках программирования:
int i = 5;
i = ++i + ++i;
Правильный результат должен равнятся 14(я не буду расписывать почему так ибо влом). Но, в зависимости от языка этот результат будет от 11 до 14. (практически всегда 13, если быть точным)
Но это скорее фантомный пример того что даже языки программирования(точнее их компиляторы) вполне часто бывают неидеальными.
Можно писать не компилятор. Можно писать интерпретатор.
"учитель информатики" - сразу видно