de base de l'analyseur lexical qui lit un fichier texte en entrée et écrit tous les “jetons” pour un fichier de sortie ligne par ligne

     writing a very basic lexical analyzer in standard
    C++ (std usage is allowed) that reads a text file
    as input and writes all the "tokens" to an output
    file line by line
     All items that are separated by white space are
    tokens
     White space includes
     Space(s)
     Newlines
     Tabs

    Input file having this

        if (x > 50)
        x=0

    Output file should be like this

        if

        (

        x

        >

        50

        )

        x

        =

        0



Edit 3

Ok, donc im presque là, j'ai fait un fichier d'entrée qui prend tout ce qui y est écrit et puis tokenizes et montre sur l'écran. un fichier de sortie est généré bt quand il montre cette sortie de Sortie de jetons 0033F8C8 je pense que sa l'adresse du tableau. maintenant, tout ce que je dois faire est de stocker le résultat soit affiché sur l'écran doit aller dans le fichier texte de sortie et sur l'écran, il doit imprimer voir votre fichier de sortie de vos données sont segmentées.

code edit 3

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <fstream>
using std::ifstream;
#include <cstring>
using namespace std;
const int MAX_CHARS_PER_LINE = 512;
const int MAX_TOKENS_PER_LINE = 20;
const char* const DELIMITER = " ";
int main()
{
//create a file-reading object
ifstream infile;
infile.open("input.txt"); //open a file
if (!infile.good())
return 1; //exit if file not found
ofstream outfile;
outfile.open("output.txt");
if (!outfile)
{
cout << "error opening fiLe";
}
//read each line of the file
while (!infile.eof())
{
//read an entire line into memory
char buf[MAX_CHARS_PER_LINE];
infile.getline(buf, MAX_CHARS_PER_LINE);
//parse the line into blank-delimited tokens
int n = 0; //a for-loop index
//array to store memory addresses of the tokens in buf
const char* token[MAX_TOKENS_PER_LINE] = {}; //initialize to 0
//parse the line
token[0] = strtok(buf, DELIMITER); //first token
if (token[0]) //zero if line is blank
{
for (n = 1; n < MAX_TOKENS_PER_LINE; n++)
{
token[n] = strtok(0, DELIMITER); //subsequent tokens
if (!token[n]) break; //no more tokens
}
}
//process (print) the tokens
for (int i = 0; i < n; i++) //n = #of tokens
cout << "Token[" << i << "] = " << token[i] << endl;
cout << endl;
outfile<< "Output tokens" <<token;
infile.close();
outfile.close();
}
system("pause");
return 0;
}
  • Ajouter un peu de code, de sorte que nous pouvons vous aider lorsque vous êtes coincé.
  • utilisation strtok ou regular expression
  • strtok est mal, il modifie le C chaîne de Style qui lui est passé.
  • Merci beaucoup @ThomasMatthews ; tout ce que j'écris dans le fichier d'entrée simplifie par la conversion en jetons, en dehors de dire qu'il soit il s'agit d'un opérateur ou d'un identificateur ou quoi que ce soit d'autre. je veux lier un fichier à ouvrir, convertir les espaces en tabulations et des espaces en jetons, puis enregistrez la nouvelle sortie dans l'autre fichier texte
  • Si vous pensez que ma réponse est utile, veuillez cliquer sur la case à cocher.
  • Voulez-vous écrire le programme ou vous voulez quelqu'un pour l'écrire?
  • pourriez-vous s'il vous plaît regardez mon edit 3 et le nouveau code que j'ai fait!

InformationsquelleAutor arslaanmalik | 2014-11-11