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