Este é um repositório relacionado a práticas acadêmicas.
Esta aplicação não resolve gramáticas sensíveis ao contexto
Implementação da derivação de uma gramática a ser especificada eliminando os símbolos não terminais com a utilização de algoritmos de pilha. Neste cenário, os vetores do JavaScript com auxílio dos métodos push()
e shift()
.
Símbolos não terminais são representados por letras maiúsculas.
Exemplos válidos de gramáticas:
- S = aaA | bbA | C
- A = aaB | ab
- B = ab | abB
- C = aaS |c
Os símbolos não terminais estão destacados na gramática.
Baseado na gramática abaixo como exemplo:
S = aAA
A = ab
Partindo do token S
, a única derivação possível resulta em aabab
.
- aAA (analisando o não terminal A)
- Nesta etapa temos o resultado parcial: a
- Visita token A em busca de sentenças e sorteia uma (neste caso só temos uma)
- Substitui o não terminal A pela sentença sorteada:
ab
- Nesta etapa temos o resultado parcial:
aab
- Nesta etapa temos o resultado parcial:
- Visita o não terminal A
- Substitui pela sentença sorteada
ab
- Nesta etapa temos o resultado parcial:
aabab
- Nesta etapa temos o resultado parcial:
- Não existem mais não terminais. Atingimos o resultado.