Vamos ao q interessa, tenho um exercício na facu q é o seguinte:
Fazer um programa em Java q leia o codigo de outro arquivo em Java, e mostre na tela todos os identificadores.
Ex.:
//TestestringKOGAN;intx=10;
Resposta: KOGAN, x.
Eu pensei em criar uma tabela e colocar nela todas as palavras reservadas do Java e tudo q não fossem identificadores (comentários, {}, argumentos entre ''xxx").
Para o que você quer, use java.io.StreamTokenizer e construa um java.util.TreeMap com as strings cujo tipo é StreamTokenizer.TT_WORD. A seguir, remova desse TreeMap as strings que representam as palavras-chave da linguagem (“if”, “while” etc.)
É muito fácil, basta ler a documentação dessas classes.
Atenção: não é StringTokenizer, é StreamTokenizer, e leia a documentação antes de sair fazendo. (Procure algum exemplo em www.javaalmanac.com também).
T
thingol
Outra forma é ler a especificação da linguagem (mais conhecida por JLS), e criar um analisador léxico usando o JLex ( http://www.cs.princeton.edu/~appel/modern/java/JLex/ ) ou o JFlex ( http://jflex.de/ )
Se eu fosse seu professor e você estivesse fazendo alguma matéria de compiladores eu IRIA EXIGIR isso.
Uma pegadinha na hora de escrever a especificação para o JLex ou o JFlex é a parte de comentários com múltiplas linhas.
K
KOGAN
Matou a charada, eh a 1a aula de lab. da materia de introducao a compiladores.
Minha ideia era usar o StringTokenizer e eliminar o que nao fosse identificador consultando uma tabela.
Vou dar uma estudada nas suas dicas, vlw.
T
thingol
Que mania, os professores de Java deviam ser proibidos de ensinarem a usar o StringTokenizer. Além de ser “deprecated” ele faz algumas coisas que você não espera (por exemplo, o que ocorre quando você tem literais string em seu código, como “Hello, World”, quando você usa o StringTokenizer?)
É [color=red]Stream[/color]Tokenizer, olhe o fonte dele em src.zip para ver que ele implementa um analisador léxico “na unha”.
K
KOGAN
não entendi onde é pra ver o fonte, scr.zip??? onde eu vejo isso.