Skip to content

Commit

Permalink
Outras correções #17
Browse files Browse the repository at this point in the history
Ainda falta revisar as imagens
  • Loading branch information
edusantana committed Jul 1, 2019
1 parent df60e4c commit fbd454f
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions livro/capitulos/3-sintaxe.asc
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ O objetivo da análise sintática é determinar a estrutura sintática do
código-fonte que está sendo compilado. Para isso, a análise sintática
utiliza o fluxo de _tokens_ produzido pela análise léxica.

No capítulo anterior mencionamos uma analogia entre compilação de um programa
No capítulo anterior, mencionamos uma analogia entre compilação de um programa
e leitura de um texto. Vimos que a análise léxica pode ser entendida como o
agrupamento de letras individuais em palavras. Já a análise sintática é
similar ao agrupamento de palavras para formar frases. Quando lemos, nosso
Expand All @@ -26,19 +26,19 @@ quem é o objeto (quem sofre a ação), etc. A análise sintática em um compila
faz o mesmo tipo de tarefa, mas determinando a estrutura do código-fonte
que está sendo compilado.

Neste capítulo vamos entender em mais detalhes a função do analisador sintático
Neste capítulo, vamos entender em mais detalhes a função do analisador sintático
e como ele funciona. Assim como usamos o formalismo das expressões regulares
para guiar a criação do analisador léxico, veremos o uso das _Gramáticas Livres
de Contexto_ para guiar a criação de analisadores sintáticos. Também veremos
como usar o gerador bison como uma ferramenta para ajudar na criação do
analisador sintático (assim como usamos o flex para a análise léxica).

=== Estrutura sintática
=== Estrutura Sintática

A estrutura sintática de um programa relaciona cada parte do programa com suas
sub-partes componentes. Por exemplo, um comando +if+ completo tem três partes
que o compõem: uma condição de teste, um comando para executar caso a condição
seja verdadeira, e um comando para excutar caso a condição seja falsa. Quando
seja verdadeira, e um comando para executar caso a condição seja falsa. Quando
o compilador identifica um +if+ em um programa, é importante que ele possa
acessar esses componentes para poder gerar código executável para o +if+. Por
isso, não basta apenas agrupar os caracteres em __tokens__, é preciso também
Expand Down Expand Up @@ -85,9 +85,9 @@ Em uma árvore de expressão, os operadores são nós internos (nós que possuem
filhos) e os valores básicos são folhas da árvore.

Um exemplo é a expressão `2 + 3`, cuja árvore sintática é mostrada na
Figura <<exparv1>>a. O operador é `+` e os operandos são `2` e `3`.
<<exparv1>>a. O operador é `+` e os operandos são `2` e `3`.
Uma expressão mais complexa é `(2 + 3) * 7`, cuja árvore é mostrada
na Figura <<exparv1>>b. O operando direito da multiplicação é o
na <<exparv1>>b. O operando direito da multiplicação é o
número `7`, mas o operando esquerdo é a sub-expressão `2 + 3`. Note
que como a estrutura da expressão fica evidenciada pela estrutura
da árvore, não é necessário usar parênteses na árvore para
Expand Down Expand Up @@ -166,7 +166,7 @@ deve manter controle sobre que partes da entrada já foram lidas e a partir
de onde começa o próximo __token__. Essa relação é ilustrada na <<lexsin2>>,
onde +proxtoken()+ é a função do analisador léxico que deve ser chamada para
obter o próximo __token__; o analisador sintático chama essa função sempre
que necessário, obtem o próximo __token__, e continua com a análise.
que necessário, obtém o próximo __token__, e continua com a análise.

[[lexsin2]]
.Relação entre analisadores léxico e sintático, na prática.
Expand Down Expand Up @@ -466,7 +466,7 @@ a estrutura sintática da expressão seria a mesma.
Podemos estabelecer algumas ordens padronizadas, por exemplo em uma
_derivação mais à esquerda_, quando há uma escolha de qual símbolo
variável substituir, sempre escolhemos o símbolo mais à esquerda
(como no exemplo anterior). Da mesma forma podemos falar de uma
(como no exemplo anterior). Da mesma forma, podemos falar de uma
_derivação mais à direita_.

Mas existe uma forma melhor de visualizar uma derivação, uma forma
Expand Down Expand Up @@ -649,7 +649,7 @@ linguagem de programação (no nosso caso, um arquivo na linguagem C). Esse
analisador recebe um fluxo de _tokens_ na entrada e gera uma árvore sintática
na saída. A <<geradorsin>> mostra um diagrama de blocos que representa o uso
de um gerador de analisadores sintáticos, como descrito. No nosso caso, a
ferramenta de geração é o bison, versão do projeto GNU para o utilitário
ferramenta de geração é o bison, versão do projeto GNU para o programa
yacc do Unix.

[[geradorsin]]
Expand Down

0 comments on commit fbd454f

Please sign in to comment.