decidir se a gramática é LR(0) ou não
-
21-12-2019 - |
Pergunta
Eu sou novo no assunto de compilação e acaba de começar um exercício de Baixo para cima análise.
Eu ter ficado no seguinte problema.
construir um LR(0) ao analisar a tabela seguinte gramática:
1) E –> E + T
2) E –> T
3) T –> (E)
4) T –> id
I0 :
E' –> .E
E –> .E + T
E –> .T
T –> .(E)
T –> .id
E o próximo estado no DFA seria :
I1:
E' -> E.
E -> E. + T
a partir do que aprendi até agora não é esta uma S-R conflito?porque o analisador não saberia se para reduzir ou deslocar como não tem look-ahead variável?portanto, este não deve ser LR(0) a gramática?
mas o PDF que eu estou lendo de ter criado o LR(0) da tabela.Então, há um erro em PDF ou tenho ido mal algum em que o entendimento do conceito?
Solução
Este é de fato um turno de trabalho e reduzir os conflitos.Esta gramática não é LR(0).Você também pode ver isso porque não prefixo-livre;a gramática contém várias seqüências de caracteres que são prefixos de um ao outro, para que ele não pode ser LR(0).
O que disse, você ainda pode construir todos os LR(0) configurating conjuntos e fazer o LR(0) autômato.Só não vai ser determinista devido a tecla shift/reduzir os conflitos.É possível, portanto, que você está certo e o folheto é de direito.
Espero que isso ajude!
Outras dicas
Você aumentada a gramática com E' -> E
.Normalmente, você vai aumentar com uma produção como E' -> E $
, onde $ é um (terminal) símbolo que não o contrário ocorre na gramática, e denota fim-de-entrada.
Então I1 seria, na verdade,
E' -> E. $
E -> E. + T
e não há um conflito.(E eu acredito que a gramática é LR(0).)