#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buffer[80], lookahead; //lookahead é o símbolo da cadeia a ser lido
int i=0, t=0;

void reconhecedor (char);
void erro();
void S();
void L();
void L_();

void reconhecedor(char t){
	if (lookahead ==t) lookahead = buffer[i++];
	else erro(); }

void erro(){
	printf("\n Erro sintático");
	exit(1); }

int main(){
	printf("\nCadeia: ");
	fgets(buffer,80,stdin); //leitura da cadeia
	buffer[strlen(buffer)-1]='\0';
	lookahead=buffer[i++]; //toma o primeiro token
	S();
	if (lookahead =='\0') printf("\nAnálise Sintática completa com sucesso");
	else printf("\nEra esperado fim de cadeia");
	 }

void S() {
	if (lookahead =='(') {   // S –> ( L )
		reconhecedor ('(');  //reconhece ‘(‘
		L();
		reconhecedor(')'); } //espera reconhecer ‘)
	else if (lookahead =='a')  reconhecedor('a');      //S –> a
	       else erro(); }

void L(){    //S –> SL’
	S();
	L_();}

void L_() {
	if (lookahead ==',') {  //L’ –> ,SL’
		reconhecedor (',');
		S();
		L_(); }}
