Escolar Documentos
Profissional Documentos
Cultura Documentos
Essa seo e responsvel por produzir um compilador real, para que funcione com
algumas lingues, denominando um conjunto Kiss para TINY, no desenvolvimento do
processo ser desenvolvido uma linguem quanto o compilador em uma abordagem de
top-down. Neste processo vai haver uma certa quantidade de nmeros de decises
para serem todas, cada uma influenciando a BNF.
Para comear a linguem que o autor teve em mente foi feita para compartilhar boas
caracterizas de Pascal, C e Ada. Sempre que aprimorado uma estrutura de linguem
ser delimitada por palavras chave ou smbolos. Uma das regras fundamentais
manter o compilador produzindo cdigo real e executvel, mesmo que ele no faa
muita coisa no comeo, pelo menos ele vai fazer corretamente. Pode ser feito alguns
testes de erro como omitir alguns valores, que acontece. Sempre que o compilador
inicia as entradas ilegais.
As Declaraes so o prximo passo que obviamente e decidir uma declarao. Foram
permitidos apenas declaraes globais como em C. Como s h um tipo de varivel,
no j necessidade de declarar o tipo, para a verso KISS pode ser adicionado uma
declarao do tipo prog. Cada varivel deve ocorrer num comando VAR separado.
Com isso tem a possibilidade de ter qualquer nmero de declaraes de dados, cada
uma comeando com um v de VAR.
A Declarao de smbolos em um compilador real iria diretivas assembly para alocar
ele na memria, com um cdigo extra, algo fcil de fazer na rotina, basta efetuar
uma modificao.
Nos indicadores no possvel inicializar os itens dados na declarao, para isso so
utilizadas duas verses de getneum. A primeira, retorna um valor em caracter de um
nico digito. A outra aceita valores inteiros multidigitos. Qualquer uma funcionara para
isso basta alterar a declarao no printf, com isso ser possvel inicializar diversas
variais com valor negativos com vrios dgitos.
A Tabela de smbolos, o compilador no faz nada para mercar uma vatiavel quando
declaramos, ele aloca espao para diversas variveis com com o mesmo nome.
Quando comeamos a referenciar variveis ele pernoitara que referencia mento
algumas que no existam, portando no possuindo uma tabela de smbolos para
armazenar certo tipos de dados, dever ser adicionados algumas declaraes ao iniciar
o programa.
Na parte de Analise Lxica tem de converter o programa para que ele trate de chaves e
palavras com mais de um caractere alm da quebra de linha e espaes em branco.
Para isso vai ser utilizado uma tcnica analise distribuda, a implementao nessa
etapa sera um pouco diferente por conta da forma que era tratar as quebras de linha,
para isso simplesmente sera permitidos os espaos, para poder ento entrar com um
programa que mais compreensvel. Em seguida sera tratado as quebras de linha. Que
na verdade um processo em dois passo. Se tudo estiver correto, estaremos prontos
para tratar dos tokens. Inicialmente deveremos adicionar declaraes adicionais, para
que finalmente ao fazer as alteraes para usar token ao invs de look como
caracter teste e chamar o scan nos lugares apropriados, isso envolve remover as
chamadas match, ocasionalmente trocando chamadas de match por chamadas a
matchstring e trocando chamadas a "newline" por chamadas a "scan". O fatoe que
com algumas pequenas excees temos um compilador usvel. Ainda que algumas
partes podem ser melhoradas.
Aps temos um linguem completa e funcionando poremos tratar da entrada e da
sada, a conveno dos dias, e prefervel a abordagem em E/S mesmo que no
tenhamos que fazer isso. Como de costume ser preciso mais rotinas de gerao de
cdigo, que por sinal so mais fceis, por que todo que temos que fazer chamar
rotinas de bibliotecas para fazer o trabalho.
12 Miscelneas
Essa etapa relata sobre incurses laterais que no parecem se encaixa em outro lugar.
Sobre a tratativa de ponto e vrgula e comentrios, o ponto e virgula tem sido parte de
quase toda linguem moderna. Alguns erros comuns de compilao ocorreram por ele
estar mal posicionado ou omitido de qualquer outra coisa, levou tempo para
acostumasse a utiliza-lo pois no sabia sua necessidade, no decorrer do
desenvolvimento do Kiss, vou questionado CADA na tentiva de evitar a maioria dos
problemas comuns que ocorrem nelas, por isso foram adicionado o ponto e vrgula nas
primeiras posies da lista.
O embelezamento sinttico, foram adicionados a linguagem no por serem necessrio
mas para ajudar que o programa parea correto para o programador, Um bom
exemplo de embelezamento o prprio ponto e vrgula.
O Tratamento do ponto e vrgula, foi definido duas utilizaes para ele ele pode ser
considerado um SEPARADOR por exemplos, das duas sintaxes, a do Pascal parece ser a
mais racional, pois muitos programadores tratam como se tivesse uma varivel null
em seguida. Portando esse escolha acabou sendo melhor.
Concluindo temos a habilidade de lidar com comentrios e ponto-e-vrgula, como
tambm outros tipos de "embelezamento sinttico". Por algumas raoes como ele ser
um TERMINADOR e no um separador, ele ser OPCINAL, comentrio delimitados e
aninhados.
13 Procedimento
14 Tipos
Como mencionando nos captulos anteriores, esta etapa retrata sobre a maneira de
lidar com os tipos de dados diferente e falando dos tipos simples e predefinidos. No
ser tratado dos valores. Aps a escolha entre a qualidade de cdigo e evitar a
complexidade, e como de costume eu procuro optar pela abordagem mais simples. O
plano, de fato, ter TRS compiladores: Um para a verso de um caractere de TINY
(para usar nas experincias), um para TINY completo, e outro para KISS. Neste ponto
eu isolei as diferenas entre TINY e KISS, que so as seguintes: TINY ter suporte a
apenas dois tipos de dados: o caractere e o inteiro de 16-bits. Eu posso tentar fazer
algo com strings tambm, j que sem elas um compilador no seria de grande
utilidade. KISS vai suportar todos os tipos simples usuais, incluindo vetores e at
mesmo nmeros de ponto flutuante. - TINY s ter duas construes de controle, o IF
e o WHILE. KISS vai suportar um conjunto bem mais rico de construes, incluindo uma
que no discutimos ainda... o comando CASE. KISS ter suporte a mdulos compilados
separadamente.
O ideal um desenvolvimento de um programa teste que no faz nada a no ser
inicializar, para que em seguida possa exibir a tabela, para que possamos ter a certeza
que esto em sintonia. Por outro lado, as converses explicitas podem ser dolorosas
por exemplo se for adicionado 1 a um caractere, ao aplicar o operao com uma
mscara, j um serie de converses que deveram ser feitas. Caso algo sai errado so
teremos uma mensagem Tipos no so compatveis mais pode acontecer de o
compilador no dizer exatamente quais so os tipos compatveis, apenas setar a linha
com erro.
Por Razes simples ele no devera suportar aritmtica com e sem sinal, por que isso
iria dar uma certa complexidade converses de alguns tipos.
As operaes lgicas devem ser entendidas como inteiros sem sinal, portanto as
converses sem sinal so necessrias de qualquer maneira.
O conceito chave a ideia de uma entrada com um carter "lookahead. Todas as rotinas
examinam este caractere, sem alter-lo, para decidir o que devem fazer em seguida, ser
traduzido o conceito em nossa organizao por mdulos. A primeira unidade entra o
cabealho e o arquivo de implementao que define as funes. Caso no faa a incluso do
cabealho ter um erro de compilao tambm preciso juntar os mdulos depois da
compilao separada, para obter o programa executvel. E preciso lembrar que como foi feito
antes, o mdulo de entra e sempre foi considerado como uma simplificao de um mdulo
real. Em um compilador de produo, a entrada ser proveniente de uma arquivo ao invs do
teclado. E certamente isto vai incluir um buffer para melhorar a eficincia de entradas do
disco. A melhor parte dos mdulos separados, como na prpria orientao a objetos em si,
que podemos modificar o cdigo em uma unidade para que ele seja to simples ou to
sofisticado. J que esta j faz parte da nossa verso multi-caracter, convm copiar todos os
arquivos para um diretrio diferente (eu escolhi o nome MULTI), alterando "scanner1.h" e
"scanner1.c" para "scanner.h" e "scanner.c". Copie o cdigo da unidade anterior OBSERVANDO
a mudana dos nomes das unidades e adicione as rotinas abaixo. No esquea de alterar a
definio de seus prottipos no cabealho.
Apesar da relativa simplicidade dos dois analisadores, foi preciso pensar muito para chegar
neles, e muitas decises foram tomadas. Eu gostaria de compartilhar algumas destas idias
com voc para que voc possa tomar suas prprias decises, apropriadas para a sua aplicao.
Primeiro, note que as duas verses de "getName" convertem os caracteres de entrada para
letras maisculas. Obviamente, houve uma deciso feita aqui, e um dos casos em que a
sintaxe da linguagem acaba envolvendo o analisador lxico tambm. A linguagem C sensvel
a diferenas de letras masculas e minsculas. Para uma linguagem como esta, obviamente no
podemos converter todos os caracteres para maiscula. O projeto que estou usando assume
uma linguagem como Pascal, onde masculas e minsculas no tem diferena. Para tais
linguagens, mais fcil fazer esta converso no analisador lxico, para que no tenhamos que
nos preocupar mais tarde com comparao de strings.
Sem alterao no cdigo principal possvel verifica que o programa est processando
variveis e fatores constantes. Neste ponto, nossa estrutura est quase completa; j temos
mdulos para fazer todo o trabalho, com o cdigo suficiente.