Diferenças entre edições de "Análise sintática (computação)"

34 bytes adicionados ,  19h28min de 16 de maio de 2018
sem resumo de edição
{{Ver desambig|este=o contexto em computação / linguística|o conceito gramatical|Sintaxe}}[[Imagem:Parsing-example.png|thumb|direita|250px|Exemplo da '''análise sintática''' de uma [[expressão matemática]]. O resultado é uma [[árvore (estrutura de dados)|árvore]] da expressão]]
Em [[ciência da computação]] e [[linguística]], '''análise sintática''' (também conhecida pelo termo em [[Língua inglesa|inglês]] '''''parsing''''') é o processo de analisar uma sequência de entrada (lida de um [[arquivo de computador]] ou do [[teclado (computador)|teclado]], por exemplo) para determinar sua estrutura gramatical segundo uma determinada [[gramática formal]]. Essa análise faz parte de um [[compilador]], junto com a [[análise léxica|análise lexical]] e [[análise semântica]].
 
A análise sintática transforma um texto na entrada em uma [[estrutura de dados]], em geral uma [[Árvore (estrutura de dados)|árvore]], o que é conveniente para processamento posterior e captura a hierarquia implícita desta entrada. Através da análise léxicalexical é obtido um grupo de [[token]]s, para que o analisador sintático use um conjunto de regras para construir uma árvore sintática da estrutura.
 
Em termos práticos, por exemplo, pode também ser usada para decompor ''um texto'' em unidades estruturais para serem organizadas dentro de um bloco.
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, para 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 lexical, 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 de dados que é analisada pelo analisador é normalmente um código de uma linguagem de programação, mas podem ser também textos em linguagem natural, e nesse caso não é construída uma árvore de análise, mas só são extraídas algumas partes do texto. As funções dos analisadores variam desde analisar comandos simples de um código a programas muito complexos. Uma forma importante de realizar a análise é usando expressões regulares, onde uma expressão regular define uma linguagem regular e um mecanismo de expressão regular gerando automaticamente um analisador para a linguagem. Em alguns casos as expressões regulares são usadas antes da própria análise sintática, como etapa da análise léxicalexical cuja saída será utilizada pelo analisador sintático.
 
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.
O caso comum de análise de uma linguagem de programação possui dois níveis de gramática: lexicais e sintáticas.
 
A primeira etapa é a geração de tokens ou análise léxicalexical, pelo qual o fluxo de caracteres de entrada é dividido em símbolos significativos definidos por uma gramática de expressões regulares.
 
A próxima etapa é ou a análise sintática, que é a verificação de que os tokens formam uma expressão permitida. Isso geralmente é feito com referência a uma gramática livre de contexto que define de forma recursiva componentes que podem fazer-se uma expressão e a ordem em que devem aparecer. No entanto, nem todas as regras que definem linguagens de programação podem ser expressas somente por gramáticas livres de contexto.
* [[Interpretador]]es
* [[Compilador]]es
** [[Análise léxica|análise lexical]]
** [[Análise semântica]]
 
Utilizador anónimo