Gerador de Código de um Automato

5 respostas
dimmykarson

Olá, antes de mais nada eu vos digo: Eu conheço o google :smiley:

Estou com um problema para implementar uma funcionalidade em um sistema de compiladores.

O problema é:
Analisar uma expressão regular
Testar uma palavra na expressão regular.

Isso está feito e é deverás simples, só que preciso gerar um código java, capaz de gerar um autômato para a expressão dada.
Não é simplesmente gerar o automato, e sim o código que pode gerar esse automato.

Alguém pode dar uma luz?
Abraço.

5 Respostas

victorwss

java.util.regex.Pattern.compile(String) não serve não?

Se a resposta for não, e você tiver que explicitamente gerar o autômato, tente trabalhar com grafos.

dimmykarson

a resposta é não.

Não sei como trabalhar com grafos em Java. Na realizadade o que eu quero é um gerador de código cujo código é um um gerador de automato.

O que vc citou é para compilar a String e para que eu possa testar a palavra.

T

Você pode olhar o código de java.util.regex.Pattern, método compile. Olhe os fontes do JDK.

victorwss

Você quer um "gerador de geradores de autômatos" ou apenas um "gerador de autômatos"?

Deixa eu ver, o usuário entra com a regex e você gera o autômato, é isso?

Se for, pode começar com isso:
public class Estado {
    private final boolean estadoFinal;
    private final Map<Character, Estado> transicoes = new HashMap<Character, Estado>();

    public Estado(boolean estadoFinal) {
        this.estadoFinal = estadoFinal;
    }

    public void adicionarTransicao(char c, Estado proximo) {
        transicoes.put(c, proximo);
    }

    public Estado proximoEstado(char c) {
        return transicoes.get(c);
    }

    public boolean isFinal() {
        return estadoFinal;
    }
}
Assim, o seu problema se reduz apenas a criar os estados e adicionar as transições. Depois de criado o autômato, o reconhecimento vai ser moleza.
dimmykarson

Obrigado, luz que me deram foi essencial!

[RESOLVIDO ] :slight_smile:

Criado 30 de setembro de 2008
Ultima resposta 24 de jun. de 2009
Respostas 5
Participantes 3