Diferenças entre edições de "Análise sintática (computação)"
Análise sintática (computação) (editar)
Revisão das 22h29min de 2 de dezembro de 2015
, 22h29min de 2 de dezembro de 2015alterei a parte sobre o analisador sintático
m (Desfeita(s) uma ou mais edições de 200.20.228.15, com Reversão e avisos.) |
(alterei a parte sobre o analisador sintático) Etiquetas: Editor Visual Remoção considerável de conteúdo |
||
== Analisador sintático ==
O analisador se trata de um software que realiza a função de carregar os dados de entrada e constrói com uma estrutura de dados com eles. Essa estrutura de dados pode se tratar de uma árvore de análise, árvore abstrata de sintaxe ou outras estruturas que dão ideia de hierarquia, par que resulte em uma representação estrutural da entrada que foi feita a análise. A análise pode proceder vários outros passos que são executados antes da própria análise, ou estes passos podem ser executados em um único passo, onde eles estarão combinados. Muitas vezes o processo realizado pelo analisador sintático é procedido pelo processo de análise léxica, já que esta análise gera como resultado uma tabela dos tokens dos dados de entrada analisados. Os analisadores podem ser programados manualmente, ou podem ser gerados automaticamente por um gerador de analisador.
A entrada
O dos analisadores sintáticos varia de acordo com a entrada que ele recebe, ou seja, da linguagem de programação que ele irá analisar. Para linguagens de dados o analisador é utilizado para facilitar a leitura de um programa, já para linguagens de programação o analisador faz parte de um compilador, que analisa o código para criar uma forma de representação interna. As linguagens de programação possuem uma gramática determinística, ou seja, que não possui ambiguidade, com isso é implementado o analisador sintático referente a está gramática. A análise para o compilador pode ser feita em uma ou múltiplas passagens pelo código.
▲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.
Existem desvantagem em relação ao compilador de uma passagem, mas estas podem ser dribladas com a utilização de fix-ups, onde durante a passagem o fix-up realiza a função de voltar no código quando a análise de um segmento está incompleta, ao invés de continuar a passagem pelo código. Um exemplo de fix-up é o uso do comando GOTO, onde o destino desse comando é desconhecido até que seu segmento no programa seja concluído.
Gramáticas livres do contexto são limitadas, já que podem expressar todos os requisitos de um idioma e sua memória é limitada. Então essa gramática não consegue lembrar a presença de uma construção longa da entrada. E gramáticas mais poderosas que suprem essa limitação, não podem ser analisadas de forma eficiente. Logo é uma boa estratégia que a gramática livre do contexto aceite um conjunto de construções maiores da linguagem, aceitando construções inválidas, e posteriormente as construções indesejadas serão filtradas na análise semântica. Tudo isso para se obter um analisador mais descontraído para uma gramática livre do contexto.
Por exemplo, em Python o seguinte código é uma sintaxe válida:
y =
O código a seguir, no entanto, é uma sintaxe válida em termos da gramática livre de contexto, produzindo uma árvore de sintaxe com a mesma estrutura que o anterior, mas é sintaticamente inválido em termos da gramática sensível ao contexto, o que requer que as variáveis sejam inicializadas antes uso:
x = 20 print y
Ao invés de ser analisada na fase de análise, esta construção é capturada, verificando os valores na árvore de sintaxe, portanto, como parte da análise semântica: sintaxe sensível ao contexto é, na prática, muitas vezes mais facilmente analisada como semântica.
== Lookahead ==
|