Я разрабатываю новый язык, и я следую традиционному подходу: , так что есть лексер, парсер, аш и виртуальная машина, которая выполняет байт-код.Расширяет мой язык во время выполнения
Когда парсер встречается с оператором типа +, то он создает инструкцию виртуальной машины ADD, и все работает так, как ожидалось.
Мне было бы интересно, чтобы конечный пользователь мог расширить язык, чтобы пользователь мог добавить функцию operator ++, чтобы создать свой собственный оператор post increment. Я не уверен в правильном способе продолжения работы, потому что парсер не может заранее знать всех операторов, которых пользователь может добавить, поэтому я спрашиваю о правильном подходе.
По существу перегрузка операторов превращает операторов в вызовы функций, но очень мало языков позволяют добавлять новые операторы из-за точной проблемы, о которой вы заявляете; даже C++, известный своей философией «Kitchen sink included», позволяет только перегрузить некоторые существующие операторы, и их поведение синтаксического анализа не может быть изменено. – bcrist
Я очень люблю подход Scala, где все методы - это операторы и наоборот. – lmm