Je suis actuellement dans une classe sur le développement de logiciels système. Nous sommes en train d'écrire l'assembleur à deux passes pour le langage d'assemblage d'une machine fictive. Nous avons implémenté le tokenizer, et toutes les classes dont nous avons besoin pour représenter abstraitement ce programme - tout ce qui reste (en plus d'implémenter le générateur de code dans une phase ultérieure) est d'analyser les tokens. Voici où j'ai un problème majeur. Je choisis de l'implémenter comme un analyseur de descente récursif, puisque c'est la seule technique avec laquelle j'ai actuellement l'expérience ... mais nous ne sommes pas autorisés à arrêter l'assemblage sur des erreurs de syntaxe. Par exemple, si l'utilisateur donne une instruction de mot de charge avec une syntaxe invalide, nous devons le remplacer par un NOP. Si l'utilisateur donne une mauvaise étiquette, nous devons simplement l'ignorer. Si l'utilisateur place des caractères inconnus dans une ligne, nous les supprimons. D'une part, cela semble facile - cependant, la mise en œuvre de ce qui me cause de casser (ce que je comprends être) l'une des règles importantes d'un analyseur de descente récursif. Chacune de mes fonctions tire plusieurs jetons avant d'appeler une autre fonction, car je dois prendre en compte toutes les erreurs de syntaxe pouvant être réparées. Étant donné que je ne peux pas arrêter l'assemblage, et que je dois disposer de suffisamment d'informations sur mon contexte actuel pour déterminer intelligemment ce que l'utilisateur avait l'intention de faire, je dois gérer beaucoup de choses au sein d'une même fonction.Comment gérer l'incapacité de casser les erreurs de syntaxe dans un analyseur de descente récursif
Ceci transforme le programme d'un vrai analyseur de descente récursif en plus d'un semi-fini-machine d'état. J'ai l'impression de mal faire, mais je ne suis pas sûr de savoir comment implémenter cela. Est-ce que quelqu'un a des suggestions/idées?
BTW - Je ne suis pas autorisé à utiliser des outils comme ANTLR ou tout autre générateur d'analyseur.
Merci.
Haha, j'aime votre idée ... malheureusement, ce n'est pas une option. Nous sommes tenus de faire la récupération de la syntaxe. Compte tenu de cela, des pensées? Existe-t-il une technique d'analyse en plus de l'analyse de descente récursive qui se prêterait mieux à ce genre de chose? – rybosome