Problema com analisador

Pessoal criei um simples analisador com a finalidade de verificar a existencia de comentarios multi linha, abaixo o codigo:

public class CharScanner {

	private char[] c;

	public CharScanner(char[] c) {
		this.c = c;
	}

	public void isML_COMMENT() {
		for(int i=0; i < c.length; i++){
			if (c[i] == '/') {
				i++;
				if (c[i] == '*') {
					i++;
					StringBuffer buf = new StringBuffer();
					while (c[i] != '*' && i < c.length-1) {
						buf.append(c[i]);
						i++;
					}
					if (c[i] == '*') {
						i++;
						if (c[i] == '/') {
							System.out.println(buf.toString()+"\n");
						} else if (c[i] != '/') {
							System.out.println("\nUnexpected char 

O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.

Se alguem puder me apontar onde esta o erro, agradeço. 
/

O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.

Se alguem puder me apontar onde esta o erro, agradeço. 
 in line: "
									+ i);
						}
					} else if (c[i] != '*') {
						System.out.println("\nUnexpected char 

O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.

Se alguem puder me apontar onde esta o erro, agradeço. 
*

O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.

Se alguem puder me apontar onde esta o erro, agradeço. 
 in line: " + i);
					}
				}
			}
		}
	}

	public static void main(String[] args) {
		String cadeia = " /* J2SE */\n/* J2EE\n J2ME */ ";
		CharScanner scanner = new CharScanner(cadeia.toCharArray());
		scanner.isML_COMMENT();
	}

}

O problema esta na string em que eu coloco os comentarios, quando ela possui espaços em branco em suas extremidades, o codigo funciona corretamente, mas quando não há espaços ele lança um erro (ArrayIndexOutOfBoundsException), não estou conseguindo entender porque esta acontecendo isso.

Se alguem puder me apontar onde esta o erro, agradeço.

Oi,
Você tem um i++ no lugar errado,
acho que é logo no primeiro if…
olha como eu fiz para ele analizar um comentario… é seu mesmo código mais modificado…

[code]public class CharScanner {

private char[] c;

public CharScanner(char[] c) {
	this.c = c;
}

public void isML_COMMENT() {
	for(int i=0; i < c.length; i++) {
		if (c[i] == '/') { 				
			if (c[i+1] == '*') {
				i++;
				
				//
				// Carrega a posicao.
				//
				StringBuffer buf = new StringBuffer();
				buf.append(c[i]);

				//
				// Soma mais 1.
				//
				i++;
			
				while (i < c.length) {
					//
					// Se a posicao existe um asterisco.
					//	
					if (c[i] == '*') {
						//
						// Carrega a posicao
						//
						buf.append(c[i]);

						//
						// Soma mais 1.
						//
						i++;
						
					if (c[i] == '/'){
						//
						// Carrega a posicao
						//
						buf.append(c[i]);

						//
						// Soma mais 1.
						//
						i++;					
						
						//
						// Para o while.	
						//
						break;
					}
					else{
						//
						// Carrega a posicao
						//
						buf.append(c[i]);

						//
						// Soma mais 1.
						//
						i++;
					}
				}
				else{
					
					//
					// Carrega a posicao
					//
					buf.append(c[i]);

					//
					// Soma mais 1.
					//
					i++;

					}
				}
				if (c[i] == '*') {
					i++;
					if (c[i] == '/') {
						System.out.println(buf.toString()+"\n");
					} else if (c[i] != '/') {
						System.out.println("\nUnexpected char 

Obs: Não testei, só coloquei a minha logica de analizar…

Tchauzin!/

Obs: Não testei, só coloquei a minha logica de analizar…

Tchauzin! in line: "
+ i);
}
} else if (c[i] != ‘*’) {
System.out.println("\nUnexpected char

Obs: Não testei, só coloquei a minha logica de analizar…

Tchauzin!*

Obs: Não testei, só coloquei a minha logica de analizar…

Tchauzin! in line: " + i);
}
}
}
}
}

public static void main(String[] args) {
	String cadeia = " /* J2SE */\n/* J2EE\n J2ME */ ";
	CharScanner scanner = new CharScanner(cadeia.toCharArray());
	scanner.isML_COMMENT();
}

}
[/code]

Obs: Não testei, só coloquei a minha logica de analizar…

Tchauzin!

Ola lina, antes de tudo, obrigado pela sua ajuda, mas seu codigo nao funcionou, quando executo-o ele não reconhece o caractere ‘*’ e lança uma exception ArrayIndexOutOfBounds.

Obrigado pela ajuda.

Boa noite,
como eu disse, eu fiz muito rapido… e nem testei o código…
eu tenho um analizador pronto aqui…
se quiser dar uma olhada eu posso lhe passar,

amanha cedo vou ver se dou uma olhada nisso…

Tchauzin!

Se isso for um algo que vc quer pra resolver um problema especifico eu recomendo usar expressores regulares, teu codigo fica mais leet mas compacto.

Mas se isso fizer parte de um analisador sintatico pra um compilador recomendo voce dar uma lida neste livro.

fmeyer, no caso eu estou criando um analisador sintatico mesmo, vou dar uma lida nas referencias que voce me passou, obrigado.

lina se puder me mandar o analisador, agradeceria…