Análise sintática (computação): diferenças entre revisões
Conteúdo apagado Conteúdo adicionado
m Foram revertidas as edições de 105.172.3.154 para a última revisão de 200.160.124.148, de 22h20min de 4 de maio de 2016 (UTC) |
m +correções semiautomáticas (v0.50/3.1.38); removendo seções vazias |
||
Linha 1:
[[Imagem:Parsing-example.png|thumb|
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]] e [[análise semântica]].
Linha 9:
== 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, 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 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.
Por exemplo, em Python o seguinte código é uma sintaxe válida:
Linha 28:
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éxica, 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.
Linha 48:
==== Analisador de precedência do operador ====
Este tipo de analisador Bottom-Up interpreta uma gramática operadora de procedência. É capaz de analisar todos [[:en:LR_parser|LR(1)]] gramáticas onde dois consecutivos não terminais nunca aparecem no lado direito de qualquer regra.
=== Geradores de analisadores sintáticos ===
Linha 71 ⟶ 61:
== Lookahead ==
Lookahead nada mais é do que analisar um token e ao mesmo tempo olhar um token a frente para poder decidir qual regra deve ser utilizada. Por exemplo, ao analisar o delimitador ‘/’, é necessário olhar a frente para poder saber se ele será um comentário de linha ou de bloco. Com ele, é possível ajudar o analisador a tomar a decisão correta em caso de conflitos e eliminar os estados duplicados aliviando a carga de uma pilha extra.
== Ver também ==
|