Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Em outras palavras, para que uma instrução seja “entendida” pelo computador,
é necessário que sejam escritas em linguagem de máquina, ou seja, códigos
binários formados por sequências de 0 e 1.
Isso quer dizer que para aprender a programar, preciso aprender sobre
codificação binária? Bem, esta é uma decisão sua, mas para te tranquilizar, a
resposta é NÃO!
Paradigma de programação
Entende-se como paradigma uma forma de fazer algo. Ou seja, paradigma de
programação é o nome que se dá a maneira como se programa, a orientação
que seus códigos irão ter, a grosso modo, é a forma utilizada para resolver
um problema computacional. Linguagens podem suportar mais de um
paradigma (linguagens multiparadigma), este a ser escolhido conforme o
problema a ser resolvido.
● Paradigma Declarativo
Programação declarativa é um paradigma de programação baseado em
programação funcional, programação lógica ou programação restritiva. Tal
termo é utilizado para discernir tais linguagens em relação à linguagens de
programação imperativa.
Linguagem de máquina
É uma linguagem “crua”, ou seja não muda seu estado natural. Essa linguagem é
formada de string de números, definindo a realização das operações em um
computador, sendo realizado uma tarefa de cada vez.
Linguagem Assembly
Essa linguagem consiste de abreviações de expressões em inglês que são
operações elementares, onde se originou a base da linguagem Assembly. Os
assemblers como conhecidos são programas tradutores que convertem os
primeiros programas de linguagem assembly em linguagem de máquina a
velocidade do computador. Embora o código seja mais claro para seres
humanos, ele é incompreensível para computadores até ser traduzido em
linguagem de máquina.
Por exemplo a linguagem C foi criada por Dennis Ritchie, na Bell Laboratories,
em 1972, nos Estados Unidos. Esse nome foi dado porque muitos de seus
recursos e características são derivados da linguagem B BCPL (Basic CPL). O B foi
desenvolvido por Ken Thompsom, também na Bell Laboratories, em 1969, e
contou com a ajuda de Dennis Ritchie. Na verdade o B é uma simplificação da
linguagem BCPL (Basic CPL). A BCPL foi criada em 1966, também na Inglaterra,
por Martin Richards, e foi desenvolvida a partir da linguagem CPL (Combined
Programming Language ou Linguagem de Programação Combinada), criada no
laboratório de matemática de uma universidade da Inglaterra.
Inicialmente o C foi criado para desenvolver o sistema operacional UNIX, que até
à época havia sido escrito em Assembly, que é uma linguagem de baixo nível e
uma das primeiras linguagens de programação a serem criadas.
Há ainda as que são mais indicadas para desenvolver aplicativos desktop, outras
desenvolvem melhor os aplicativos de nuvem, outras celular, outras front end, e
por aí vai.
COMPILADOR
Análise léxica:
é o processo de analisar a entrada de linhas de caracteres (tal como o
código-fonte de um programa de computador) e produzir uma sequência de
símbolos chamado "símbolos léxicos" (lexical tokens), ou somente
"símbolos" (tokens), que podem ser manipulados mais facilmente por um
parser (leitor de saída).
AULA 2. Conceitos de Análise Sintática e Análise Sintática
Descendente
1. Análise Sintática
● Tem a função de combinar a lista de tokens
● Criação de uma estrutura chamada Árvore Sintática
Os identificadores (elementos que são criados pelo programador) é que vão dar
a dependência de contexto ou seja um nome que foi criado para uma variável
que vai ser usado posteriormente, ou nome de um método, de uma classe, de
uma função, etc.
Como iremos transformar isso de uma outra maneira, esse papel acaba sendo
exercido pela tabela de símbolos. Então vamos receber os tokens e tentar
montar essa estrutura de árvore, por que esta é completamente livre de
contexto.
Dado uma gramática qualquer iremos definir quais são os terminais, quais são as
regras de derivação ou de produção e a partir disso (terminais e não terminais)
conseguiremos definir a linguagem como sendo todas as cadeias (W) do alfabeto
da linguagem, de tal maneira que a partir de um não terminal inicial de um
ponto de partida conseguiremos gerar essa cadeia usando as regras (de
derivação, regras de produção) que estão definidos naquele conjunto P sociação
Atividade semana 6 - Linguagens e Compiladores
D→D;D
M→e { INCOMPLETO }
T → real { INCOMPLETO }
x: real;
y: int;
proc P1;
A: real;
proc P2;
B: int;
C: ^real;
...
proc P3;
E: int;
...
end P3;
...
end P2;
...
end P1;
Pergunta 1 2 pts
Para que as tabelas de símbolos estejam corretas, quais ações devem ser
tomadas no esquema para a opção “T → real”? Qual código deve completar a
linha correspondente?
❏ T.tipo = real; T.tam := 16
❏ T.tipo = inteiro; T.tam := 8
❏ T.tipo = ponteiro(real); T.tam := 4
❏ T.tipo = ponteiro(real); T.tam := 8
❏ T.tipo = real; T.tam := 8
Pergunta 2 2 pts
Qual código completaria o esquema de tradução para gerar uma tabela de
símbolos corretamente a partir de um procedimento?
❏ t = geraTab( top( tabPtr ) ); push( 0, desloc )
❏ t = geraTab( nil ); push( t, tabPtr )
❏ t = geraTab( nil ); push( 0, desloc )
❏ t = geraTab( top( tabPtr ) ); push( t, tabPtr ); push( 0, desloc )
❏ t = geraTab( nil ); push( t, tabPtr ); push( 0, desloc )
Pergunta 3 2 pts
Se o código em questão definisse outro procedimento P4 a partir de P3, quem
seria o ancestral de P4 e qual referência deveria ser colocada na tabela de
símbolos? Considere a figura das tabelas de símbolos da questão anterior e a
complete para responder a essa questão.
❏ O ancestral de P4 é P3, com isso a referência de ancestralidade na
tabela (e na figura) é P3.
❏ O ancestral de P3 é P2, com isso a referência de ancestralidade na tabela
(e na figura) é P2.
❏ O ancestral de P3 é P4, com isso a referência de ancestralidade na tabela
(e na figura) é P4.
❏ O ancestral de P4 é P2, com isso a referência de ancestralidade na tabela
(e na figura) é P2.
❏ O ancestral de P4 é P1, com isso a referência de ancestralidade na tabela
(e na figura) é P1.
Pergunta 4 2 pts
Por que a variável “E” de P3 foi alocada na posição 40?
❏ Porque essa é uma variável inteira e deve ficar separada de 10 posições de
uma variável do tipo array para evitar colisões.
❏ Porque as variáveis são alocadas em posições múltiplas de 10 e é a quarta
variável.
❏ Porque cada variável é alocada na posição subsequente à variável
anterior, contando-se a partir do programa principal.
❏ Porque o tamanho de ponteiro é 4, e há 10 ponteiros.
❏ Porque a variável é a segunda na lista de variáveis e a variável anterior é
alocada em 0, portanto, basta adicionar o tamanho dessa variável (array
de cinco reais), ou seja 40 (5*8).
Pergunta 5 2 pts
Considerando a estrutura das tabelas de símbolos, o código fonte passado
permite ao procedimento P3 visualizar variáveis de P1? Como?