Answers/Solutions to Exercises in Chapter 5, Exercise 13

E13: Rewrite the recursive descent parser used in this chapter so that s and sp are global variables.

S13:

#include <iostream.h>

extern "C" {
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
}
#define dot 1
#define id  2
#define error 3

int A(char*);
int B(char*);
int NextToken(char*);

int spp=0;
char s[]="...a...";

// function main --------------------------
int main() 
{
   if (A(s))
     cout << "syntax correct\n";
   else
     cout << "syntax error\n"; 
   return 0;
}//end main

// function A ------------------------------
int A(char* s)  
{
   if (!B(s))
     return 0;
   if (NextToken(s) != id)
     return 0;
   if (!B(s))
     return 0;
   return 1;
}//end A

// function B ------------------------------
int B(char* s)
{
   int spp1 = spp;

   if (NextToken(s) != dot) {
     spp = spp1;
     return 1;
   }
   if (!B(s)) {
     spp = spp1;
     return 1;
   }
   return 1;
}//end B


// function NextToken ------------------------
int NextToken(char* s)
{
   if (s[spp]=='.') {
     spp++;
     return dot;
   }else if ('a'<=s[spp] && s[spp]<='c') {
     while('a'<=s[spp] && s[spp]<='c') spp++;
     return id;
   }else 
     return error;
}//end NextToken

Back to Answers/Solutions Index                          Back to Answers/Solutions for Chapter 5 Index