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

//S → (L) | a
//L → S L'
//L'-→ ,SL' | ε

char buffer[80], lookahead;
int i=0;


void reconhecedor(char);
void erro();
void gets(char *,int);
void L();
void L_();
void S();


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

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

void gets(char *s, int size){

    fgets(s, size, stdin);
    s[strlen(s)-1]='\0';
}

int main(){ //testar para a,a,a,a
    printf("\n Cadeia: ");
    gets(buffer, 80);
    lookahead = buffer[i++];
    S(); //S → (L) | a
    if (lookahead == '\0')
        printf("\nAnálise Sintática completa com sucesso");
    else
        printf("\nEra esperado fim da cadeia");

    getchar();
}

void S(){
    //S → (L) | a
    if (lookahead=='('){
        reconhecedor('(');
        L();
        reconhecedor(')');
    }
    else if (lookahead == 'a')
            reconhecedor('a');
         else erro();
}

void L(){ //L → S L'
    S();
    L_();
}

void L_() { //L'-→ ,SL' | ε
    if(lookahead==','){
        reconhecedor(',');
        S();
        L_();
    }
}
