any help at all will be greatly appreciated
#include <iostream>
#include <iomanip>
using namespace std;
typedef enum {ident, number, lparen, rparen, times, slash, plus,minus, eql, neq, lss, leq, gtr, geq,
callsym, beginsym, semicolon,endsym, ifsym, whilesym, becomes, thensym,
dosym, constsym, comma,varsym, procsym, period, oddsym} Symbol;
Symbol sym;
void getsym(void);
void error(const char msg[]);
void expression(void);
int accept(Symbol s)
{
if (sym == s)
{
getsym();
return 1;
}
return 0;
}
int expect(Symbol s)
{
if (accept(s))
{
return 1;
}
error("expect: unexpected symbol");
return 0;
}
void factor(void)
{
if (accept(ident))
{
//;
}
else if (accept(number))
{
//;
}
else if (accept(lparen))
{
expression();
expect(rparen);
}
else
{
error("factor: syntax error");
getsym();
}
}
void term(void)
{
factor();
while (sym == times || sym == slash)
{
getsym();
factor();
}
}
void expression(void)
{
if (sym == plus || sym == minus)
{
getsym();
}
term();
while (sym == plus || sym == minus)
{
getsym();
term();
}
}
void condition(void)
{
if (accept(oddsym))
{
expression();
}
else
{
expression();
if (sym == eql || sym == neq || sym == lss || sym == leq || sym == gtr || sym == geq)
{
getsym();
expression();
} else {
error("condition: invalid operator");
getsym();
}
}
}
void statement(void)
{
if (accept(ident))
{
expect(becomes);
expression();
}
else if (accept(callsym))
{
expect(ident);
}
else if (accept(beginsym))
{
do
{
statement();
}
while (accept(semicolon));
expect(endsym);
}
else if (accept(ifsym))
{
condition();
expect(thensym);
statement();
}
else if (accept(whilesym))
{
condition();
expect(dosym);
statement();
}
else
{
error("statement: syntax error");
getsym();
}
}
void block(void) {
if (accept(constsym))
{
do
{
expect(ident);
expect(eql);
expect(number);
} while (accept(comma));
expect(semicolon);
}
if (accept(varsym))
{
do
{
expect(ident);
} while (accept(comma));
expect(semicolon);
}
while (accept(procsym))
{
expect(ident);
expect(semicolon);
block();
expect(semicolon);
}
statement();
}
void main()
{
getsym();
block();
expect(period);
return;
}

New Topic/Question
Reply



MultiQuote





|