Question

Je travaille sur une implémentation du compilateur et souhaite vérifier si la fin du fichier est atteinte?

Je sais que cela peut être fait à l'aide de la fonction yywrap () dans le fichier lex, mais l'exigence est que nous voulions que l'EOF soit explicitement défini comme dans la valeur hexadécimale 0x1a, puis comment référencer-nous cela.

Exemple:

main () {     printf (" Vérifier le marqueur EOF \ n "); '0x1a' & Lt; - le marqueur EOF réel.

Je veux que ce qui précède ne soit pas une erreur de syntaxe, mais soit signalé comme une erreur   Les parenthèses non équilibrées, ou est mal défini.

Peut-on faire ce qui précède? Mon exigence est simplement d’avoir le jeton EOF dans l’analyseur, ce que, malheureusement, je n’ai pas pu faire jusqu’à ce jour: - ((le reste du travail sera facile à faire car alors, il me suffit de donner une règle tels que:

print    :    print_stmt '(' stmt_valid ')' colon '\n' 
{
    OK do the rest
}
         |    print_stmt '(' stmt_valid ')' colon end_indicator
{
    print error message and close application.
}
Était-ce utile?

La solution

Faites en sorte que votre lexer retourne un jeton pour l'EOF.

Je vous suggère de renvoyer le jeton dans deux cas:

  1. getc() a renvoyé -1 (le signe EOF habituel). Dans ce cas, renseignez le texte du jeton

  2. '\x1a' a renvoyé <=>. Dans ce cas, placez ce caractère dans le texte du jeton.

Ceci permet à votre grammaire de différencier ces deux cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top