Estou lendo "Uma Introdução às Línguas Formais e Autômatos", escrito por Peter Linz e, depois de ler os cinco primeiros capítulos, enfrento o problema com gramáticas simples e regulares (especialmente lineares à direita), muito parecidas entre si.
Que relação existe entre estes? Qual é a diferença? Você pode criar autômatos finitos (não determinísticos) para gramáticas simples (obviamente sem usar uma pilha)?
Respostas:
Uma gramática simples (gramática s) é aquela em que toda produção é da formaA → aB1 1B2. . .Bn Onde uma é um terminal e tudo BEu, i ≥ 0 são não terminais e existe apenas uma produção com qualquer par ⟨ Um , uma ⟩ .
Claramente, todo idioma s (produzido por uma gramática s) é inequívoco e facilmente analisado, pois cada símbolo terminal da esquerda para a direita e não terminal determina exclusivamente a produção a ser aplicada. Por exemplo, se a sequência fora b c , então o par ⟨ S, Um ⟩ determina exclusivamente a primeira produção da análise e assim por diante para cada terminal e o não terminal à sua direita imediata. Assim, um idioma definido por uma gramática s pode ser analisado um símbolo de cada vez, sem lookahead, resultando em tempo de análise linear; de fato, tempo| x | .
As gramáticas S não são muito importantes por si só, uma vez que a maioria das línguas reais excede seu poder. Mas eles são um trampolim para outras gramáticas analisadas em tempo linear, comoL L ( k ) gramáticas em que há um limite k no lookahead necessário para determinar uma produção durante a análise. Com efeito, uma gramática s é umL L ( 0 ) gramática.
A conexão com os autômatos é que um s-langauge pode ser analisado com um autômato de empilhamento com um único estado, que apenas olha o símbolo de entrada e o símbolo de pilha superior para determinar uma sequência de símbolos de pilha a serem empurrados. Mas desde a gramática s ...
... gera não regular{umaEu#umaEu: i ≥ 0 } Em geral, as linguagens s não podem ser reconhecidas por autômatos de estados finitos, determinísticos ou não determinísticos.
fonte