Comment est-ce que je signalerais un EOF en lisant dans un fichier en C++? J'écris un scanner codé direct, dans le cadre d'une conception de compilateur, qui lit dans un fichier et le scinde en jetons pour un langage.Comment signaler EOF sur un fichier que le programme ouvre
Je dois lire l'ensemble du programme, supprimer les commentaires et compresser les espaces. Ensuite, placez le programme résultant char par char dans un tampon avec une taille maximale de 1024 caractères. Donc, quand nous vidons, nous allons remplir le tampon ou quoi d'autre.
Pour ouvrir le fichier que j'ai cet écrit:
// Open source file.
source_file.open (filename);
if (source_file.fail()) {
// Failed to open source file.
cerr << "Can't open source file " << *filename << endl;
buffer_fatal_error();
Pour remplir le tampon, je suis désireux d'utiliser une boucle while et itérer comme
int i = 0;
// Iterate through the whole file
while(source_file.at(i) != EOF)
{
// If not a tab or newline add to buffer
if (source_file.at(i) != "\n" || source_file.at(i) != "\t")
{
bufferList.add(source_file.at(i));
}
i++;
}
Y aurait-il un moyen de signaler EOF comme ça pour le fichier que j'ouvre?
Ceci est plus ou moins un aperçu général de ce qu'il faut faire. Je devrai trouver comment recharger le tampon une fois vide ou utiliser un double tampon. J'ai aussi besoin de comprendre comment enlever un commentaire qui commencerait par #
. Par exemple # This is a comment
. Mon scanner verrait #
et supprimerait tout ce qui suit jusqu'à ce qu'il obtienne le prochain caractère de nouvelle ligne.
signifie EOF que vous cherchez juste pour une valeur nulle à la fin du fichier –
Essayez d'utiliser 'std :: vector' pour le tampon et 'istream :: read()' pour lire les données dans la mémoire tampon. –
@ThomasMatthews va 'istream :: read()' enlever les espaces? – GenericUser01