Tengo las siguientes expresiones regulares:
M -> (M)
M -> n
estas dos me pueden generar cadenas como: ((((n)))) ó n
Tengo que diseñar una clase que se llame class Analizador Sintactico, para poder generar cualquier cadena que estas dos expresiones me permitan, ahorita ya hice una especie de pseudocodigo y creo que esta bien. Pero el problema es que yo sé que el analizador sintactico se asegura de que se tenga el mismo número de parentesis de abertura que de cierre, pero no estoy seguro de como lo hace
Código
class Sintactico{ Lexico lexico = new Lexico(); int parentesis = 0; void M(){ if(lexicoSimbolo == 'n') { if(parentesis != 0) checarParentesis(); else comprobar(); } else if(lexicoSimbolo == '(') { parentesis++; M(); } else error(); } void checarParentesis(){ int i = 1; while(i <= parentesis) { if(lexico.siguienteSimbolo() == ')' ) i++; else error(); } } }
que modificaciones le harian a este pseudocodigo para que sea más eficiente???
de antemano gracias