Introdução5.1
Para construirmos um compilador, precisamos primeiro estabelecer uma base sólida e confiável. Escolhemos a linguagem C para essa jornada por ser frequentemente considerada a "língua mãe" da infraestrutura de sistemas. Ela nos oferece o controle de baixo nível necessário para manipular bytes, acessar a memória diretamente e gerenciar arquivos, tudo isso sem perder a elegância e a organização de uma linguagem estruturada.
Se você sente que precisa reforçar seus conhecimentos ou deseja aprender a linguagem do zero antes de avançarmos, recomendamos fortemente que consulte o material da disciplina TEP II. Uma revisão cuidadosa sobre ponteiros e alocação dinâmica de memória será especialmente útil, visto que lidaremos constantemente com estruturas de dados complexas para representar o código fonte em memória.
Nesta etapa inicial, nosso foco será construir o alicerce do projeto. Antes de escrevermos a primeira linha do laboratório, precisamos configurar nosso ambiente de programação e definir como esse código será compilado, organizado e executado.
Máquina Virtual5.2
No Ambiente Virtual de Aprendizagem (AVA) da disciplina, você deve baixar o arquivo da máquina virtual Linux fornecido. Caso esteja utilizando os computadores do laboratório da Faesa, verifique se já existe um arquivo ou máquina virtual identificada como Alpine - Faesa.

É importante que você note que trabalharemos com o conceito de duas máquinas virtuais distintas ao longo da disciplina. A primeira é a máquina virtual de desenvolvimento que estamos configurando agora, que é o sistema operacional onde você escreverá e compilará seu código. A segunda será a máquina virtual alvo, que desenvolveremos como parte do projeto para executar o código compilado pela nossa linguagem. Essa segunda máquina funcionará de maneira análoga à JVM (Java Virtual Machine), processando a linguagem intermediária que geraremos.
Ao abrir o Oracle VirtualBox Manager, você deve importar o arquivo fornecido. Vá em File $\rightarrow$ Import Appliance e, clicando no ícone de pasta com uma seta verde, selecione o arquivo Alpine - Faesa.ova. Clique em Finish para concluir a importação. Com isso, uma nova máquina deverá aparecer no menu lateral. Dê dois cliques sobre ela para iniciá-la.
A máquina inicializará em uma tela preta de terminal. Não se assuste com essa interface minimalista, pois isso foi feito propositalmente para manter o arquivo leve e compacto, permitindo que você o baixe e utilize em casa sem grandes dificuldades. A tela inicial deve se parecer com a imagem abaixo:

Normalmente, a janela abre com um tamanho reduzido que pode esconder a última linha de entrada. Para corrigir isso, vá em View na barra superior e altere para Scaled Mode. Agora você deve ser capaz de visualizar o prompt alpine login:, que aguarda o seu nome de usuário. Digite root e pressione Enter. Em seguida, o sistema pedirá a senha. Digite 123 e pressione Enter novamente. Note que, por medidas de segurança, os caracteres da senha não aparecem na tela enquanto você digita, mas o sistema está capturando sua entrada. Após esse processo, você verá que o login foi realizado com sucesso.
Apesar de ser possível escrever código diretamente nesse terminal, essa não é a forma mais produtiva de trabalhar. Por isso, configuraremos o Visual Studio Code para utilizar o ambiente da máquina virtual remotamente, permitindo que você escreva o código em uma interface gráfica moderna e confortável. No terminal da máquina virtual, digite o comando ip a e pressione Enter. Você verá informações de rede semelhantes às da imagem a seguir.

Observe o endereço IP destacado na saída do comando e anote-o. Agora, abra o Visual Studio Code e instale a extensão chamada Remote - SSH, desenvolvida pela Microsoft, caso ela ainda não esteja instalada. Após a instalação, um ícone de monitor com duas setas deve aparecer na barra lateral esquerda do VS Code, conforme mostrado abaixo:
![]()
Ao colocar o mouse sobre o título SSH na barra lateral, aparecerão ícones de engrenagem e de adição (+). Clique no ícone de adição (+) e uma caixa de texto surgirá no topo da janela. Digite root@IP, substituindo IP pelo número que você anotou do terminal (por exemplo, [email protected]), e pressione Enter.

Caso apareça um menu pedindo para selecionar um arquivo de configuração SSH, selecione a primeira opção sugerida. Após isso, o endereço da máquina adicionada aparecerá na lista abaixo do título SSH. Passe o mouse sobre esse item e clique na seta que surge para conectar. O VS Code solicitará a senha; digite 123 (a mesma usada para o login). Se um menu aparecer pedindo para confirmar o "fingerprint" da conexão, selecione "Linux" se perguntado sobre o sistema operacional e depois escolha "Continue" ou digite "yes".
Pronto! Se você observar o canto inferior esquerdo do VS Code e vir o número IP da conexão, significa que você está dentro da máquina virtual. Agora você pode usar o editor para criar pastas e programar diretamente no ambiente Linux.
Clique em Open Folder na barra lateral e pressione Enter, certificando-se de que o caminho no campo de entrada seja apenas /root/. Agora você pode criar sua própria pasta de trabalho, por exemplo, com o nome compilador. Caso queira salvar seu progresso ao final da aula, você poderá baixar essa pasta inteira (ou apenas um arquivo) clicando com o botão direito sobre e selecionando Download....

Lembre-se de que os arquivos podem ser perdidos se os computadores do laboratório forem reiniciados ou formatados. Caso não esteja utilizando seu computador pessoal, crie o hábito de sempre baixar a pasta do projeto ao final da aula e salvá-la em um local seguro, como um pendrive ou na nuvem.
Compilação5.3
Nessa máquina virtual temos disponível o compilador da linguagem C. Portanto, para compilar um arquivo da linguagem (terminado em .c ou ainda com arquivos de cabeçalho .h) podemos utilizar o seguinte comando.
gcc NOME_ARQUIVO.C -o NOME_DO_BINARIO
E, por fim, para rodarmos nosso código devemos apenas entrar no terminal após termos gerado o binário:
./NOME_DO_BINARIO
Próximos passos5.4
No próximo documento, Laboratório I: Topologia e Enquadramento, iremos começar a escrever propriamente dito o código do nosso laboratório, onde iremos ver como os dados são enviados na rede física, simulando um processo de bit flip para compreendermos como erros são tratados na rede.0