Implementazione dell'overloading dell'operatore per es. +
(più) non è terribilmente difficile se sai che è un operatore binario. Uno può solo analizzare expression
+
expression
Ma cosa succede se il programmatore può scegliere se +
è binario, unario (prefisso / postfix), parte di un ternario o qualcos'altro? Per es.
-
.. ? .. : ..
-
..²
-
.. | .. | .. | .. | ..
-
.. 大 .. 小 ..
-
不 ..
Il problema sembra essere che l'arity dovrebbe essere noto al tempo di analisi, ma non lo è, è noto solo dopo l'intera compilazione / transpolazione.
Alcune idee:
- Penso che l'intero tipo di problema vada via passando alla sintassi simile a Lisp (non ancora abbastanza familiare con Lisp), ma lo renderò difficile dicendo che la sintassi deve essere un po 'come quella di C esempi.
- Una sorta di restrizione come avere sovraccarichi nella parte superiore / in un file separato in modo che possano essere compilati per primi.
- (Forse Arity deve essere corretto per ogni simbolo - in realtà non risponde alla domanda).
C'è un modo che non è terribile?
Diventa più possibile assumendo che gli operatori possano essere distinti dagli altri identificatori nella fase di analisi (ad esempio altri identificatori sono alfanumerici)?