# data[].attributes.body
O professor apresentou a ementa da disciplina que aborda os paradigmas da programação, linguagens formais, a hierarquia de Chomsky, os autômatos, as expressões regulares, a computabilidade e a análise de algoritmos. Além disso, ele também falou sobre as noções matemáticas de conjuntos, suas notações e representações, que são um fundamento para entender primeiramente noções teóricas da computação.

# data[].attributes.attachment_link.title
Paradigmas de programação - Coggle Diagram

# data[].attributes.body
O docente apresentou linguagens formais, com conceitos básicos de computação. Ele explicou os paradigmas de programação, conjuntos e operações de relação de conjuntos, alfabetos e cadeias, símbolos e as noções fundamentais de sintaxe e semântica na expressão de linguagens computacionais. Ele também abordou algumas definições técnicas, obre elementos como relações, conjuntos, operações entre conjuntos e características de alfabetos e cadeias.

# data[].attributes.attachment_link.title
Operações sobre conjuntos - Coggle Diagram

# data[].attributes.body
Essa aula foi uma continuação do conteúdo dado na aula passada. O professor discutiu a definição de linguagens como conjuntos de cadeias finitas, assim como suas propriedades e operações. Ele abordou a sintaxe e semântica de uma linguagem, apresentou representações como gramáticas e reconhecedores e conjuntos de cadeias. Em um conceito mais amplo, o docente deu uma visão do estudo de como linguagens computacionais são estruturadas e abstraídas para análise e engenharia; como um guia de linguagens formais e seus métodos de análise e comparações.

# data[].attributes.attachment_link.title
Métodos para representação finita de linguagens - Coggle Diagram

# data[].attributes.attachment_link.description
Métodos para representação finita de linguagens

# data[].attributes.body
A aula foi uma correção de uma atividade passada na última aula. Por meio disso eu pude corrigir algumas peguntas que acabei respondendo errado e pude tirar as minhas dúvidas. Essa atividade me ajudou com exemplos de como representar linguagens usando notação por compreensão e propriedade.

# data[].attributes.body
A aula foi sobre gramáticas, línguas regulares e sistemas de estados finitos em computadores. O professor descreveu a estrutura da forma das gramáticas: inclui vocabulário, tipos de símbolos, terminais e não-terminais. Ele também analisou o autômato finito determinístico e define seus estados, mudanças de estado gráficas e talvez novas; as características de configuração e execução de cadeias de entrada e a diferença entre protocolos sequências, concorrentes e não-determinísticos. Por fim, explicou a importância desses conceitos em modelagem computacional.

# data[].attributes.body
O professor discutiu os critérios de avaliação das Linguagens de Programação, baseado nos estudos de Robert W. Sebesta. A partir da avaliação dos critérios sugeridos por Sebesta para as Linguagens de Programação: legibilidade, facilidade de escrita e confiabilidade, torna-se possível avaliá-los a partir desta três medidas gerais equivalentes. Laços de tempo e espaço: legibilidade e simplicidade. Laços de lógica: facilidade de escrita e expressividade. Sujeito a falhas: confiabilidade em verificação de tipos e tratamento de exceções. Os programadores são orientados a partir destes critérios para optar pela linguagem ideal que será capaz de otimizar a resolução de um problema de software.

# data[].attributes.attachment_link.title
Critérios de avaliação das Linguagens de Programação - Coggle Diagram

# data[].attributes.attachment_link.description
Critérios de avaliação das Linguagens de Programação

# data[].attributes.body
A aula apresentou os autômatos de estados finitos, analisadores léxicos e análise sintática compiladores. Descreveu também a linguagens regulares, percorrendo caracteres de palavras e expressões regulares e assistiu na validação de padrões, bem como, a linguagem livre de contexto e o parsing. Finalmente, discutiu como converter autômatos em gramáticas regulares e o desenvolvimento de parsers recursivos descendentes, ilustrando como são utilizados em compiladores para entender estruturas de sintaxe.

# data[].attributes.attachment_link.title
As cinco características que representam o autômato - Coggle Diagram

# data[].attributes.attachment_link.description
As cinco características que representam o autômato

# data[].attributes.body
A aula focou no paradigma funcional que descreve programas como coleções de funções puras, ou seja, funções que não têm efeito colateral ou modificam o estado. Haskell é uma linguagem que segue essa filosofia usando tipos de dados definidos e funções que transformam entradas em saídas sem alterar variáveis. Este paradigma é matemático e focado na composição de funções, imutabilidade e código sem surpresas, e difere radicalmente dos antigos paradigmas imperativos.

# data[].attributes.attachment_link.title
Tipos de Dados da Linguagem Haskell - Coggle Diagram

# data[].attributes.body
Aula foi sobre Concorrência em linguagens é a maneira de utilizar processadores e núcleos modernos. A competição é entre: física, ou seja, processadores distintos, e lógica, quando a execução é intercalada. Os processos possuem recursos próprios, e as threads compartilham, o que explora a execução a partir do mesmo. Semáforos e monitores auxiliam a sincronização e exclusão mútua, e dispatching, a comunicação. No entanto, o paralelismo é feito por algoritmos que estão adaptados à arquitetura do sistema, independentemente de ser compartilhada ou distribuída, o que permite a execução de tarefas simultaneamente.

# data[].attributes.body
A aula foi sobre Exceções em Linguagens de Programação que são erros que podem ocorrer durante a execução de um programa. Aborda situações de erro desconhecidas. Por exemplo, inserção errada de dados ou acesso a recursos remotos. Essa abordagem de tratamento de erros permite substituir as verificação manuais em códigos antigos. O objetivo é manter a consistência do sistema, capturando os problemas e processando-os de maneira controlada e eficiente.

# data[].attributes.body
O professor explicou sobre tipos de dados genéricos que são recursos de programação que permitem a criação de classes, interfaces e métodos parametrizados. Eles permitem desenvolver algoritmos que não dependem do tipo de dado, tornando o código mais seguro e facilitando a reutilização de módulos. Eles são representados pelos caracteres “<>” na programação Java, e verificam se apenas objetos do tipo especificado são aceitos. Os types evitam conversões explícitas e elimina erros de tipo, simplificando o processo de desenvolvimento para diferentes tipos de dados.

# data[].attributes.attachment_link.description
Tipos Genéricos (Vantagens, Java, Definição)

# data[].attributes.body
O tema da aula foi Vinculação e Escopo. A Vinculação refere-se à associação de tipos de dados em programação. O Relacionamento pode ocorrer em tempo de compilação,carregamento ou execução. A vinculação estática é definida anteriormente por declaração explícita ou implícita e dinâmica é determinada durante a execução. O escopo discute a visibilidade das variáveis dentro do código e pode ser global, estática e dinâmica. O ambiente de referência é apenas o conjunto de nomes visíveis em uma instrução e é dependente do tipo de nível sequencial.

# data[].attributes.attachment_link.description
Vinculação (Momentos, Tipos (Estatística)), Escopo (Tipos (Global, Estatístico, Dinâmico))

# data[].attributes.body
O tema da aula foi Implementação Subrotinas. Em programação, uma estrutura LIFO chamada pilha de execução é usada principalmente para armazenar informações de sub-rotinas ativas. Mantém pontos ativos de retorno e de execução de bloco de comandos. Um registro de ativação, que é definido dinâmica durante a execução, fornece informações do estado e variáveis locais de cada sub-rotina. Ela ajuda a melhorar e controlar a execução de um programa com os seus subprograms.​​​​ índices.

# data[].attributes.attachment_link.description
Pilha de execução (Registro de ativação, Função, Estrutura)

# data[].attributes.body
A aula foi sobre os autômatos de pilha que são reconhecedores de linguagem que utilizam uma pilha para memória auxiliar. Diferentemente dos automatos finitos, a pilha pode armazenar as informações sem limites, e opera seguindo o protocolo LIFO último a entrar, primeiro a sair. São divididos em determinísticos e não determinísticos. Reconhecem linguagens livres de contexto, processando cadeias de caracteres mais complexas do que os utilizados pelos autômatos finitos, e é essencial na análise sintática e processamento das linguagens de computador.

# data[].attributes.attachment_link.description
Autômatos de pilha (Tipo: determinístico e não determinístico, Memória com pilha, Reconhece linguagens complexas)

# data[].attributes.body
A aula foi sobre a máquina de Turing, idealizada por Alan Turing em 1936 refere-se a um modelo computacional ideal que antecedeu o advento dos computadores digitais. A máquina de Turing consiste numa fita infinita, numa unidade de controle e num programa, simulando processos computacionais, em geral. A máquina exerce funções de leitura, escrita e movimento sobre a fita, processando símbolos conforme as regras predefinidas. Sendo um modelo do dispositivo computacional universal, capaz de solucionar questões computáveis, a máquina de Turing é necessária para a compreensão das bases teóricas da computação contemporânea.

# data[].attributes.attachment_link.description
Máquina de Turing - Coggle Diagram: Máquina de Turing (Componente principal, Função)