Program för genomförande av icke rekursiva prediktiva parser?

Mål:
Tolka följande grammatik.


E --> E + T / T
T --> T * F / F
F --> ( E ) / id


Program:
#include
#include
#include
#include
void fela (const char * s)
{
perror(s);
Exit(0);
}
int factor()
{
int val, i.
char ch [0];
scanf("%s",CH);
Switch(CH[0])
{
mål '(':
Val=expr();
scanf("%s",CH);
IF(CH[0]!=")")
fela ("saknas avslutande parentes i faktorn.");
bryta;
standard :{
för (jag = 0; jag<>
{
om ((ch [i] > '0') && (ch [i]<>
fortsätta;
annat
fela ("olagliga teckensekvens i stället för faktor.");
}
Val=atoi(CH);
}
}
returnera val;
}
int term()
{
int val;
char ch [10].
Val=Factor();
While(1)
{
scanf("%s",CH);
IF(CH[0]=="*")
{
Val=val*Factor();
}
annat
bryta;
}
ungetc(CH[0],stdin);
returnera val;
}
int expr()
{
int val;
char ch [10].
Val=term();
While(1)
{
scanf("%s",CH);
IF(CH[0]=="+")
Val=val+term();
annat
bryta;
}
ungetc(CH[0],stdin);
returnera val;
}
Main)
{
printf ("\nEnter uttrycket:");
printf ("\n resultatet: % d\n",expr());
}

Utdata:
NN@linuxmint ~ $ gcc rec.c
NN@linuxmint ~ $. /a.out
Ange ett uttryck: 5 * (3 + 1)
;
Resultat: 20
NN@linuxmint ~ $