Abrir menu principal

Alterações

4 496 bytes adicionados ,  13h15min de 2 de dezembro de 2015
 
== Analisador sintático ==
O analisador sintático utiliza diversos conceitos da ciência da computação como por exemplo a estrutura de dados: árvore é um exemplo. Ao receber os dados do analisador léxico no caso do compilador ele verifica se a sintaxe está correta.
 
Um analisador sintático é um componente de software que leva os dados de entrada (freqüência de texto) e constrói uma estrutura de dados - muitas vezes uma espécie de árvore de análise, árvore abstrata de sintaxe ou outra estrutura hierárquica - dando uma representação estrutural da entrada, verificação de sintaxe correta no processo . A análise pode ser precedido ou seguido por outros passos, ou estes podem ser combinados num único passo. O analisador é muitas vezes precedida por um analisador lexical separada, o que cria tokens de a seqüência de caracteres de entrada; Alternativamente, estes podem ser combinados em scanners. Analisadores podem ser programados manualmente ou pode ser automática ou semi-automática gerada por um gerador de analisador. O analisador sintático modelado completamente para produzir uma saída formatada. Estas podem ser aplicadas a diferentes domínios, mas aparecem frequentemente em conjunto, tal como o par scanf / printf, ou as fases de um compilador de entrada e de saída.
 
A entrada para um analisador de texto é muitas vezes de alguma linguagem de computador, mas pode também ser um texto em linguagem natural ou dados textuais menos estruturado, caso em que geralmente apenas certas partes do texto são extraídos, em vez de uma árvore de análise a ser construída. O analisador sintático variam de funções muito simples, como scanf, a programas complexos, tais como a interface de um compilador Delphi ou o analisador de XML de um webservice. Uma classe importante de análise simples é feito usando expressões regulares, em que uma expressão regular define uma linguagem regular e um mecanismo de expressão regular gerando automaticamente um analisador para que a linguagem, permitindo correspondência de padrão e extração de texto. Em outro contexto as expressões regulares são usadas antes da análise, como a etapa do léxico cuja saída é então utilizado pelo analisador.
 
O uso de analisadores varia de acordo com a entrada. No caso de linguagens de dados, um analisador é frequentemente encontrada como a facilidade de leitura do ficheiro de um programa, tal como a leitura de texto HTML ou XML; estes exemplos são linguagens de marcação. No caso de linguagens de programação, um analisador é um componente de um compilador ou intérprete, que analisa o código-fonte de uma linguagem de programação de computador para criar alguma forma de representação interna; o analisador é um passo fundamental no frontend compilador. As linguagens de programação tendem a ser especificado em termos de uma gramática livre de contexto determinista porque analisadores rápidos e eficientes podem ser escritos para eles. Para compiladores, a própria análise pode ser feito em uma passagem ou passagens múltiplas - ver compilador de uma passagem e compilador multi-pass.
 
As desvantagens implícitas de um compilador de uma passagem pode ser largamente superados adicionando fix-ups, em que está prevista para fix-ups durante a passagem para a frente, e os fix-ups são aplicados para trás quando o segmento actual programa tem sido reconhecido como tendo sido completada. Um exemplo em que um tal mecanismo fix-up seria útil seria uma declaração GOTO para a frente, onde o destino da GOTO é desconhecido até o segmento de programa seja concluído. Neste caso, a aplicação da correcção-se-ia ser atrasada até que o alvo da GOTO foi reconhecido. Obviamente, um GOTO para trás não exige uma correção-up.
 
Gramáticas livres de contexto são limitados na medida em que pode expressar todos os requisitos de um idioma. Informalmente, a razão é que a memória de um tal linguagem é limitada. A gramática não consegue lembrar a presença de uma construção mais de uma arbitrariamente longo de entrada; isto é necessário para um idioma em que, por exemplo, um nome deve ser declarado antes que pode ser referenciada. Gramáticas mais poderosas que podem expressar esta limitação, no entanto, não pode ser analisado de forma eficiente. Assim, é uma estratégia comum para criar um analisador descontraído para uma gramática livre de contexto que aceita um superconjunto das construções de linguagem desejados (isto é, ele aceita algumas construções inválidas); mais tarde, as construções indesejados podem ser filtrados na etapa de análise semântica (análise contextual).
 
Por exemplo, em Python o seguinte código é uma sintaxe válida:
y = 10 print y
{{Referências|Compiladores - Princípios , Técnicas e Ferramentas ( Aho, Alfred V.; Jeffrey; Sethi, Ravi; Lam, Monica S. = Compiladores - Princípios , Técnicas e Ferramentas Aho, Alfred V.; Jeffrey; Sethi, Ravi; Lam, Monica S.}}
 
Utilizador anónimo