ik moet voor school een 42-compiler maken en ik begrijp het wel gedeeltelijk
alleen nu ik ervoor zorgen dat hij als hij een bestand(invoerfile) leest
de expressiesoorten(+ . - . * , /) herkent en berekent.
dus bijvoorbeeld 1+2*5-4 en daar moet 7 uitkomen en niet 11...
dit heb ik tot nu toe...
#include <iostream>
#include <fstream>
using namespace std;
int main ( ){
int aantalKarakters;
int enterCount;
ifstream invoer;
ofstream uitvoer;
char kar;
char prevkar;
char prevprevkar;
char expressieSoort;
int getal = 0;
int enterWaarde = 0;
char oper1;
char oper2;
int expres;
//int eindresultaat;
int resultaat;
//int factor;
invoer.open ("invoer.txt",ios::in);
if ( ! invoer ) { // of: if ( invoer.fail ( ) )
cout << "File niet geopend" << endl;
return 1;
} // if
uitvoer.open ("uitvoer.txt",ios:
ut);
aantalKarakters = 0;
enterCount = 0;
expres = 0;
kar = invoer.get ( );
while ( ! invoer.eof ( ) ) {
//if (( kar > '9' || kar < '0') && ( kar =! expressieSoort))
uitvoer.put (kar);
if ( kar <= '9' && kar >= '0' )
getal = 10*getal+kar-'0';
if (( kar > '9' || kar < '0' ) && ( prevkar <= '9' && prevkar >= '0' )){
cout << getal;
getal = 0;
enterWaarde = 1;
}
if ( prevprevkar == 'P' && prevkar == 'L' && kar == 'U' ){
oper1 = expressieSoort = '+';
cout << expressieSoort;
}
else if ( prevprevkar == 'M' && prevkar == 'I' && kar == 'N' ){
oper1 = expressieSoort = '-';
cout << expressieSoort;
}
else if ( prevprevkar == 'M' && prevkar == 'U' && kar == 'L' ){
oper2 = expressieSoort = '*';
cout << expressieSoort;
}
else if ( prevprevkar == 'D' && prevkar == 'I' && kar == 'V' ){
oper2 = expressieSoort = '/';
cout << expressieSoort;
}
if(expressieSoort == '+')
{
resultaat = getal + getal;
cout << resultaat;
}
else if(expressieSoort == '-')
{
resultaat = getal - getal;
}
else if(expressieSoort == '*')
{
resultaat = getal * getal;
}
else if(expressieSoort == '/')
{
resultaat = getal / getal;
}
if ( kar == '\n' ){
enterCount++;
if ( enterWaarde == 1 ){
cout << endl;
enterWaarde = 0;
expres = expres + 1;
}
}
prevprevkar = prevkar;
prevkar = kar;
kar = invoer.get ( );
aantalKarakters++; //if
} // while
invoer.close ( );
uitvoer.close ( );
cout << endl;
cout << "aantal Tekens zijn: " << aantalKarakters << endl;
cout << "aantal geschreven karakters zijn: " << endl;
cout << "aantal regelovergangen zijn: " << enterCount << endl;
cout << "aantal expressies: " << expres << endl;
return 0;
} // main
hoop dat iemand me hierbij kan helpen...
alvast bedankt,
davy55
alleen nu ik ervoor zorgen dat hij als hij een bestand(invoerfile) leest
de expressiesoorten(+ . - . * , /) herkent en berekent.
dus bijvoorbeeld 1+2*5-4 en daar moet 7 uitkomen en niet 11...
dit heb ik tot nu toe...
#include <iostream>
#include <fstream>
using namespace std;
int main ( ){
int aantalKarakters;
int enterCount;
ifstream invoer;
ofstream uitvoer;
char kar;
char prevkar;
char prevprevkar;
char expressieSoort;
int getal = 0;
int enterWaarde = 0;
char oper1;
char oper2;
int expres;
//int eindresultaat;
int resultaat;
//int factor;
invoer.open ("invoer.txt",ios::in);
if ( ! invoer ) { // of: if ( invoer.fail ( ) )
cout << "File niet geopend" << endl;
return 1;
} // if
uitvoer.open ("uitvoer.txt",ios:

aantalKarakters = 0;
enterCount = 0;
expres = 0;
kar = invoer.get ( );
while ( ! invoer.eof ( ) ) {
//if (( kar > '9' || kar < '0') && ( kar =! expressieSoort))
uitvoer.put (kar);
if ( kar <= '9' && kar >= '0' )
getal = 10*getal+kar-'0';
if (( kar > '9' || kar < '0' ) && ( prevkar <= '9' && prevkar >= '0' )){
cout << getal;
getal = 0;
enterWaarde = 1;
}
if ( prevprevkar == 'P' && prevkar == 'L' && kar == 'U' ){
oper1 = expressieSoort = '+';
cout << expressieSoort;
}
else if ( prevprevkar == 'M' && prevkar == 'I' && kar == 'N' ){
oper1 = expressieSoort = '-';
cout << expressieSoort;
}
else if ( prevprevkar == 'M' && prevkar == 'U' && kar == 'L' ){
oper2 = expressieSoort = '*';
cout << expressieSoort;
}
else if ( prevprevkar == 'D' && prevkar == 'I' && kar == 'V' ){
oper2 = expressieSoort = '/';
cout << expressieSoort;
}
if(expressieSoort == '+')
{
resultaat = getal + getal;
cout << resultaat;
}
else if(expressieSoort == '-')
{
resultaat = getal - getal;
}
else if(expressieSoort == '*')
{
resultaat = getal * getal;
}
else if(expressieSoort == '/')
{
resultaat = getal / getal;
}
if ( kar == '\n' ){
enterCount++;
if ( enterWaarde == 1 ){
cout << endl;
enterWaarde = 0;
expres = expres + 1;
}
}
prevprevkar = prevkar;
prevkar = kar;
kar = invoer.get ( );
aantalKarakters++; //if
} // while
invoer.close ( );
uitvoer.close ( );
cout << endl;
cout << "aantal Tekens zijn: " << aantalKarakters << endl;
cout << "aantal geschreven karakters zijn: " << endl;
cout << "aantal regelovergangen zijn: " << enterCount << endl;
cout << "aantal expressies: " << expres << endl;
return 0;
} // main
hoop dat iemand me hierbij kan helpen...
alvast bedankt,
davy55