Sono consapevole del fatto che la maggior parte delle lingue moderne utilizza parole riservate per impedire che parole come le parole chiave vengano utilizzate come identificatori.
Le parole riservate a parte, assumiamo un linguaggio che consenta l'uso di parole chiave come identificatori. (Ad esempio, in Ruby può essere usata una parola chiave come nome di un metodo). Durante la compilazione, come gestiresti questa ambiguità?
La fase di lexing non sembra una buona scelta perché dovrebbe prendere in considerazione i token che la circondano. Anche la fase di parsing non sembra una buona scelta dato che idealmente il parser potrebbe funzionare con token non ambigui .
Se dovessi progettarlo da solo, suppongo che il lexer produrrà un token ambiguo, quindi avrò un altro livello che considera il token ambiguo nel contesto dei token che lo circondano (ad esempio, il token ambiguo segue una def
parola chiave? Quindi deve essere un identificatore.) Quindi, vorrei consegnare i token non ambigui al parser.
Nelle lingue che consentono l'uso di parole chiave come identificatori, qual è il modo standard in cui il compilatore può distinguerle?