Закритий

C++ parser

Цей проект було доручено wangbeizou за $50 USD.

Отримайте безкоштовно цінові пропозиції на схожі проекти
Роботодавець працює
Бюджет проекту
$40 USD
Усього заявок
2
Описання проекту

#include "p2lex.h"

#include <string>

#include <istream>

#include <fstream>

using namespace std;

/////////

//// this class can be used to represent the parse result

//// the various different items that the parser might recognize can be

//// subclasses of ParseTree

class ParseTree {

private:

ParseTree *leftChild;

ParseTree *rightChild;

int whichLine;

public:

ParseTree(ParseTree *left = 0, ParseTree *right = 0) : leftChild(left),rightChild(right) {

whichLine = linenum;

}

int onWhichLine() { return whichLine; }

};

//// for example, an integer...

class Integer : public ParseTree {

private:

Token iTok;

public:

Integer(const Token& iTok) : ParseTree(), iTok(iTok) {}

int getInteger() { return stoi( [url removed, login to view]() ); }

};

int linenum = 0;

int globalErrorCount = 0;

/// error handler

void error(string msg)

{

cout << linenum << ": " << msg << endl;

++globalErrorCount;

}

/// function prototypes

ParseTree *Program(istream *in);

ParseTree *StmtList(istream *in);

ParseTree *Stmt(istream *in);

ParseTree *Expr(istream *in);

ParseTree *Term(istream *in);

ParseTree *Primary(istream *in);

ParseTree *String(istream *in);

ParseTree *Program(istream *in)

{

ParseTree *result = StmtList(in);

// make sure there are no more tokens...

if( getToken(in).getTok() != DONE )

return 0;

return result;

}

ParseTree *StmtList(istream *in)

{

return 0;

}

ParseTree *Stmt(istream *in)

{

Token t;

t = getToken(in);

if( [url removed, login to view]() == PRINT ) {

// process PRINT

}

else if( [url removed, login to view]() == SET ) {

// process SET

}

else

error("Invalid statement");

return 0;

}

ParseTree *Expr(istream *in)

{

return 0;

}

ParseTree *Term(istream *in)

{

return 0;

}

ParseTree *Primary(istream *in)

{

Token t = getToken(in);

if( [url removed, login to view]() == ID ) {

}

else if( [url removed, login to view]() == INT ) {

return new Integer(t);

}

else if( [url removed, login to view]() == STR ) {

}

else if( [url removed, login to view]() == LPAREN ) {

ParseTree *ex = Expr(in);

if( ex == 0 )

return 0;

t = getToken(in);

if( [url removed, login to view]() != RPAREN ) {

error("expected right parens");

return 0;

}

return ex;

}

return 0;

}

ParseTree *String(istream *in)

{

return 0;

}

main()

{

ParseTree *prog = Program(&cin);

if( prog == 0 || globalErrorCount != 0 ) {

cout << "Parse failed, exiting" << endl;

return 0;

}

cout << "Success. Congrats!" << endl;

return 0;

}

Хочете заробити?

  • Визначте бюджет та часові рамки
  • Виділіть Вашу пропозицію
  • Отримайте оплату за Вашу роботу

Найняти фрілансерів, які також подавали заявки в цей проект

    • Forbes
    • The New York Times
    • Time
    • Wall Street Journal
    • Times Online