Lorsque vous écrivez une bonne description, vous devez définir tous les types de jetons possibles qui peuvent apparaître. Mais vous ne pouvez match contre jeton types, non jeton valeurs individuelles ...Heureux: ce n'est pas un mot-clé
C'est un peu problématique. Considérons, par exemple, le mot-clé data
. Selon le rapport Haskell, ce jeton est un "reservedid". Donc mon tokeniser le reconnaît et le marque comme tel. Cependant, considérez le mot-clé as
. Maintenant il s'avère que c'est pas un reservedid; c'est une varid ordinaire. Ce n'est spécial que dans un contexte. Vous pouvez déclarer totalement une variable normale nommée as
, et ça va.
Donc, voici une question: Comment analyser as
spécifiquement? Au début, je n'y pensais pas vraiment. Je viens de définir un nouveau type de jeton qui représente tout jeton varid dont le texte est as
.
... et puis j'ai passé environ 2 heures à essayer de travailler pourquoi diable ma grammaire ne fonctionne pas réellement. Oui, il s'avère que puisque ce type de jeton chevauche un type de jeton existant, l'ordre de déclaration est significatif. (!!!) Littéralement, changer l'ordre des déclarations fait parfaitement analyser la grammaire.
Mais maintenant je suis inquiet. Je crains que as
ne soit jamais apparié comme varid et ne correspondra jamais comme lui-même. Donc, toutes les règles de grammaire qui disent varid vont rejeter le as
jeton — ce qui est complètement faux!
Quelle est la correcte comment résoudre ce problème?