새로운 언어를 개발 중이며 전통적인 접근법 인 을 따르므로 lexer, 파서, ast 및 바이트 코드를 실행하는 가상 시스템이 있습니다.런타임에 내 언어를 확장합니다
파서가 +와 같은 연산자를 발견하면 ADD 가상 시스템 명령어를 생성하고 모든 것이 예상대로 작동합니다.
최종 사용자에게 언어를 확장하는 방법에 관심이 있습니다. 예를 들어 사용자가 자신의 후행 증가 연산자를 만들기 위해 연산자 ++ 함수를 추가 할 수 있습니다. 구문 분석기가 사용자가 추가 할 수있는 모든 연산자를 미리 알 수 없기 때문에 진행할 올바른 방법이 확실하지 않으므로 따라야 할 올바른 방법이 무엇인지 묻습니다.
본질적으로 연산자 오버로딩은 연산자를 함수 호출로 바꾸지 만, 정확한 문제로 인해 새로운 연산자를 추가 할 수있는 언어는 거의 없습니다. "Kitchen sink included"철학으로 알려진 C++조차도 특정 기존 연산자에 과부하 만 허용하고 파싱 동작을 변경할 수 없습니다. – bcrist
저는 모든 메소드가 연산자이고 그 반대 인 스칼라의 접근법을 매우 좋아합니다. – lmm