#include <stdio.h>
Char Curr;
Char ll1[1000];
int n=-1;
void Top ();
void Top1 ();
void Top2 ();
void Top ();
void Top1 ();
void error ();
void Scaner ();
void Main ()
{char ch;
int i=0;
printf ("Please enter the Curr syntax to parse: (end with #) \ n");
do{
scanf ("%c", &ch);
Ll1[i] = ch;
i++;
}while (ch! = ' # ');
Scaner ();
TOP1 ();
if (Curr = = ' # ')
printf ("Success! \ n ");
else{
printf ("Grammatical Error!! \ n ");
Error ();
}
}
void Scaner () {///for reading the next character of the source function
n++;
if (ll1[n] = = ") {
n++;
}else{
Curr = Ll1[n];
}
}
void Top () {
TOP2 ();
Top ();
}
void Top1 () {
Top ();
Top1 ();
}
void Top2 () {
if (Curr = = ' (') {
Scaner ();
TOP1 ();
if (Curr = = ') ') {
Scaner ();
}
Else
{
Error ();
}
Else
{
Judging whether it's a function or a number
while (1) {
if (Curr >= ' a ' && curr<= ' z ' | | curr >= ' a ' && curr <= ' z ' | | curr >= ' 0 ' && curr &L t;= ' 9 ') {
Scaner ();
}
Else
{
Break
}
}
}
}
void Top () {
if (Curr = = ' * ') {
Scaner ();
TOP2 ();
Top ();
}else if (Curr = = '/') {
Scaner ();
TOP2 ();
Top ();
}else if (ll1[n+1] = = ' # ' | | LL1[N+1] = = ' + ' | | LL1[N+1] = = '/' | | LL1[N+1] = = ' * ' | | LL1[N+1] = = '-') {
if (ll1[n]! = ' (' && ll1[n]! = ') ')
Error ();
}
}
void Top1 () {
if (Curr = = ' + ') {
Scaner ();
Top ();
Top1 ();
}
else if (Curr = = '-') {
Scaner ();
Top ();
Top1 ();
}else if (ll1[n+1] = = ' # ' | | LL1[N+1] = = ' + ' | | LL1[N+1] = = '/' | | LL1[N+1] = = ' * ' | | LL1[N+1] = = '-') {
if (ll1[n]! = ' (' && ll1[n]! = ') ')
Error ();
}
}
void error () {
printf ("syntax is wrong after%d%c!") \ n ", N,curr);
}
12 23 Recursive syntax analysis