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