O documento descreve conceitos fundamentais de linguagens formais, como:
1) Linguagens naturais e linguagens formais possuem alfabetos, strings e gramáticas distintas;
2) Uma linguagem formal é definida por um alfabeto finito de símbolos e um conjunto de strings válidas geradas por gramáticas;
3) Gramáticas definem as regras para gerar strings válidas através de produções envolvendo símbolos terminais e não-terminais.
O documento discute algoritmos de ordenação. Apresenta os algoritmos Bubble sort, Selection sort e Insertion sort, explicando seus passos e complexidades. Também aborda o método "dividir para conquistar" e apresenta exemplos como o algoritmo de exponenciação e o Merge sort.
Matemática Discreta - Introdução à DisciplinaRanilson Paiva
Este documento apresenta os objetivos, metodologia, avaliação e conteúdo programático de um curso de Matemática Discreta. Os objetivos incluem introduzir sistemas formais, desenvolver habilidades de resolução de problemas e compreender estruturas discretas. A avaliação consiste em provas, listas de exercícios e um possível projeto. O conteúdo inclui conjuntos, relações, funções, teoria dos números e grafos.
Inteligência Artificial - Aula2 - Busca em GrafosRafael Pinto
O documento discute problemas e algoritmos de busca em inteligência artificial. Aborda o que são problemas e algoritmos de busca, definindo características de um problema de busca e tipos de algoritmos como busca em profundidade, largura e informada. Explica conceitos como estado inicial, ações possíveis, modelo de transição e objetivo para definir formalmente um problema de busca.
Este documento apresenta os conceitos de minimização de autômatos finitos determinísticos (AFD) em 3 frases:
1) Apresenta os pré-requisitos e o algoritmo de minimização de AFD que identifica estados equivalentes e os unifica para gerar o autômato finito mínimo com o menor número de estados possível;
2) Discutem exemplos para ilustrar a aplicação do algoritmo de minimização, incluindo a construção de uma tabela de estados e marcação dos estados equivalentes;
3) Encerra apresentando
O documento apresenta a linguagem SQL como linguagem padrão para manipulação de dados em sistemas de gestão de bases de dados. Aborda conceitos como pesquisas simples e complexas utilizando comandos como SELECT, WHERE, LIKE, BETWEEN, IN, DISTINCT, ORDER BY e cláusulas lógicas. O objetivo é introduzir os alunos à necessidade de acessar e extrair informação de bases de dados usando SQL.
Este documento apresenta conceitos básicos sobre linguagens formais e autômatos. Ele define alfabeto, palavra, linguagem formal e gramática. Explica que uma gramática especifica de forma finita linguagens potencialmente infinitas através de um conjunto finito de regras de produção que geram palavras de uma linguagem quando aplicadas sucessivamente.
1) O documento discute a linguagem de programação Python, incluindo seus tipos de dados, operadores, controle de fluxo, funções, módulos e orientação a objetos.
2) São apresentados exemplos de como usar variáveis, listas, dicionários, tuplas, conjuntos, laços, condicionais e funções na linguagem Python.
3) O documento também explica como importar e usar módulos padrão e módulos personalizados em Python.
O documento descreve como implementar uma fila usando uma lista simplesmente encadeada. Ele define estruturas de dados para os nós da lista e para a fila, e fornece funções para criar, inserir, remover, verificar se está vazia, imprimir e liberar a fila.
O documento discute algoritmos de ordenação. Apresenta os algoritmos Bubble sort, Selection sort e Insertion sort, explicando seus passos e complexidades. Também aborda o método "dividir para conquistar" e apresenta exemplos como o algoritmo de exponenciação e o Merge sort.
Matemática Discreta - Introdução à DisciplinaRanilson Paiva
Este documento apresenta os objetivos, metodologia, avaliação e conteúdo programático de um curso de Matemática Discreta. Os objetivos incluem introduzir sistemas formais, desenvolver habilidades de resolução de problemas e compreender estruturas discretas. A avaliação consiste em provas, listas de exercícios e um possível projeto. O conteúdo inclui conjuntos, relações, funções, teoria dos números e grafos.
Inteligência Artificial - Aula2 - Busca em GrafosRafael Pinto
O documento discute problemas e algoritmos de busca em inteligência artificial. Aborda o que são problemas e algoritmos de busca, definindo características de um problema de busca e tipos de algoritmos como busca em profundidade, largura e informada. Explica conceitos como estado inicial, ações possíveis, modelo de transição e objetivo para definir formalmente um problema de busca.
Este documento apresenta os conceitos de minimização de autômatos finitos determinísticos (AFD) em 3 frases:
1) Apresenta os pré-requisitos e o algoritmo de minimização de AFD que identifica estados equivalentes e os unifica para gerar o autômato finito mínimo com o menor número de estados possível;
2) Discutem exemplos para ilustrar a aplicação do algoritmo de minimização, incluindo a construção de uma tabela de estados e marcação dos estados equivalentes;
3) Encerra apresentando
O documento apresenta a linguagem SQL como linguagem padrão para manipulação de dados em sistemas de gestão de bases de dados. Aborda conceitos como pesquisas simples e complexas utilizando comandos como SELECT, WHERE, LIKE, BETWEEN, IN, DISTINCT, ORDER BY e cláusulas lógicas. O objetivo é introduzir os alunos à necessidade de acessar e extrair informação de bases de dados usando SQL.
Este documento apresenta conceitos básicos sobre linguagens formais e autômatos. Ele define alfabeto, palavra, linguagem formal e gramática. Explica que uma gramática especifica de forma finita linguagens potencialmente infinitas através de um conjunto finito de regras de produção que geram palavras de uma linguagem quando aplicadas sucessivamente.
1) O documento discute a linguagem de programação Python, incluindo seus tipos de dados, operadores, controle de fluxo, funções, módulos e orientação a objetos.
2) São apresentados exemplos de como usar variáveis, listas, dicionários, tuplas, conjuntos, laços, condicionais e funções na linguagem Python.
3) O documento também explica como importar e usar módulos padrão e módulos personalizados em Python.
O documento descreve como implementar uma fila usando uma lista simplesmente encadeada. Ele define estruturas de dados para os nós da lista e para a fila, e fornece funções para criar, inserir, remover, verificar se está vazia, imprimir e liberar a fila.
O documento explica o que são ponteiros em C e como declará-los e utilizá-los. Os ponteiros armazenam endereços de memória e podem apontar para variáveis, arrays e estruturas. O documento também mostra como alocar e liberar memória dinamicamente usando funções como malloc(), free() e realloc().
O documento apresenta uma introdução à tabela hash, estrutura de dados que permite acesso rápido a elementos através de uma função de hash que mapeia chaves para índices de um array. A tabela hash permite busca em tempo constante O(1) através da função de hash, ao contrário de buscas sequenciais em arrays normais. Apresenta também aplicações como busca em bancos de dados, criptografia e compilação.
O documento discute instruções de desvio e loops no MIPS. Resume:
1) Instruções de desvio como BEQ e BNE permitem saltos condicionais baseados no conteúdo de registradores; 2) Loops são implementados usando desvios de volta ao início; 3) Um compilador traduz estruturas de controle de fluxo como if/else e while para instruções de desvio do MIPS.
O documento descreve as árvores binárias, incluindo suas propriedades básicas, como grau, altura e tipos de árvores binárias. Também apresenta operações como busca, inserção e remoção em árvores binárias de busca.
Fundamentos dos Comandos no AutoCad para todas as versõesRodrigo Meireles
O documento é um manual do AutoCAD que contém instruções e tutoriais sobre como usar o software de design gráfico. O manual é dividido em capítulos que cobrem tópicos como configurações, comandos básicos e projeções. Ele fornece detalhes passo a passo sobre como executar várias tarefas no AutoCAD, incluindo dicas úteis, para ajudar os usuários a dominar o software.
O documento apresenta uma introdução sobre ponteiros em C, definindo-os como variáveis que armazenam endereços de memória e explicando como eles permitem a manipulação dinâmica de estruturas de dados. Os principais pontos apresentados são: (1) ponteiros permitem simular passagem por referência e criar estruturas dinâmicas; (2) ponteiros armazenam endereços de memória ao invés de valores; (3) os operadores & e * são usados para obter endereços e valores apontados.
O documento explica como declarar e usar funções em C, incluindo exemplos de funções para calcular média, soma e repetição. Também discute variáveis locais e globais, e os parâmetros argc e argv da função main.
The document describes how to insert nodes into a simply linked list in ascending order. It shows the process of inserting new nodes by:
1) Initializing auxiliary pointers to traverse the list
2) Allocating memory for the new node
3) Traversing the list with the auxiliary pointers until finding the correct insertion position based on the node value
4) Updating the next pointers either at the head of the list or between nodes to insert in the correct position
Diagrams are included to visualize each step of the insertion process.
Este documento apresenta conceitos fundamentais de sistemas digitais e eletrônica digital, incluindo:
1) A definição de sistemas digitais e suas vantagens em relação aos sistemas analógicos;
2) Os conceitos de lógica combinacional e seqüencial;
3) Exemplos de sistemas digitais e suas aplicações atuais e futuras.
Este documento apresenta uma apostila sobre programação em Python. Ele começa explicando o que é programação em Python e seu plano de ensino, incluindo objetivos, público-alvo, pré-requisitos, descrição, metodologia e cronograma. Em seguida, fornece uma visão geral da linguagem Python, incluindo suas características, histórico, organização e licença. Por fim, apresenta tópicos como tipos de dados, operadores, estruturas de controle, estruturas de dados, funções, módulos,
O documento discute funções e procedimentos em linguagens de programação. Apresenta como funções e procedimentos são abstrações que permitem parametrização de computações. Detalha as diferenças entre funções e procedimentos e como cada um é definido em linguagens como C, C++, Haskell e Ada. Inclui explicações sobre parâmetros formais versus reais, mecanismos de passagem de parâmetros e ordem de avaliação.
1) O documento discute as operações básicas da álgebra relacional e como elas são representadas no SQL, incluindo união, interseção, diferença, projeção, seleção, produto cartesiano e junção.
2) Exemplos dessas operações são fornecidos usando notação da álgebra relacional e sintaxe SQL.
3) Exercícios são fornecidos para aplicar essas operações usando consultas SQL em relações representando funcionários e dependentes.
Este documento fornece uma introdução à linguagem de programação Python. Ele discute a história e características da linguagem, incluindo tipos de dados, variáveis, operadores, estruturas de decisão e entrada/saída. A linguagem Python é descrita como dinâmica, de alto nível e fácil de aprender, tornando-a adequada para diversas aplicações.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre análise da complexidade de algoritmos.
O documento discute técnicas de gerenciamento de memória virtual, incluindo paginação sob demanda, substituição de páginas usando algoritmos como FIFO e LRU, e como a memória virtual permite que programas sejam executados parcialmente na memória principal.
O documento descreve circuitos lógicos combinacionais e sequenciais. Aborda definições, exemplos de circuitos como controle de cruzamento, codificadores e decodificadores, circuitos aritméticos como somador e subtrator, multiplexadores e demultiplexadores. Também apresenta flip-flops como RS, JK e JK mestre-escravo com suas tabelas-verdade e circuitos.
1. O documento apresenta uma coletânea de exercícios resolvidos relacionados com sinais e sistemas para alunos de engenharia informática.
2. Os exercícios estão organizados em capítulos sobre sinais discretos, representação no domínio do tempo para sistemas LTI discretos, transformada Z e sinais contínuos.
3. O documento fornece soluções detalhadas para exercícios retirados de livros de sinais e sistemas com o objetivo de apoiar o estudo dos al
O documento discute métodos de avaliação imobiliária e engenharia de avaliações. Apresenta o mercado de engenharia de avaliações no Brasil e as principais referências normativas, como a NBR 14653. Detalha atividades básicas de avaliação como coleta de documentação, vistoria do imóvel e análise de mercado. Explora métodos de avaliação como o comparativo, de custo, evolutivo e involutivo.
O documento descreve as principais portas lógicas e suas tabelas-verdade, incluindo portas básicas como AND, OR e NOT, e portas derivadas como NAND, NOR, XOR e XNOR. Também apresenta as famílias de circuitos integrados TTL e CMOS, destacando suas características e alguns circuitos comuns como o 4001, 4011 e 4012.
Este documento apresenta as normas técnicas para o desenho arquitetônico de acordo com a ABNT, definindo padrões para layout da folha, tipos de linhas, letras, números, escalas, símbolos e representação de elementos da arquitetura.
O documento discute como os seres humanos percebem o mundo de forma analógica através de seus cinco sentidos e como os computadores digitais convertem sinais analógicos em digitais para a entrada e saída de dados através de dispositivos como teclados, monitores e impressoras.
O documento apresenta de forma lúdica conceitos básicos de programação em Python, como tipos de dados numéricos, operações matemáticas, comentários no código e a utilização da interface IDLE.
O documento explica o que são ponteiros em C e como declará-los e utilizá-los. Os ponteiros armazenam endereços de memória e podem apontar para variáveis, arrays e estruturas. O documento também mostra como alocar e liberar memória dinamicamente usando funções como malloc(), free() e realloc().
O documento apresenta uma introdução à tabela hash, estrutura de dados que permite acesso rápido a elementos através de uma função de hash que mapeia chaves para índices de um array. A tabela hash permite busca em tempo constante O(1) através da função de hash, ao contrário de buscas sequenciais em arrays normais. Apresenta também aplicações como busca em bancos de dados, criptografia e compilação.
O documento discute instruções de desvio e loops no MIPS. Resume:
1) Instruções de desvio como BEQ e BNE permitem saltos condicionais baseados no conteúdo de registradores; 2) Loops são implementados usando desvios de volta ao início; 3) Um compilador traduz estruturas de controle de fluxo como if/else e while para instruções de desvio do MIPS.
O documento descreve as árvores binárias, incluindo suas propriedades básicas, como grau, altura e tipos de árvores binárias. Também apresenta operações como busca, inserção e remoção em árvores binárias de busca.
Fundamentos dos Comandos no AutoCad para todas as versõesRodrigo Meireles
O documento é um manual do AutoCAD que contém instruções e tutoriais sobre como usar o software de design gráfico. O manual é dividido em capítulos que cobrem tópicos como configurações, comandos básicos e projeções. Ele fornece detalhes passo a passo sobre como executar várias tarefas no AutoCAD, incluindo dicas úteis, para ajudar os usuários a dominar o software.
O documento apresenta uma introdução sobre ponteiros em C, definindo-os como variáveis que armazenam endereços de memória e explicando como eles permitem a manipulação dinâmica de estruturas de dados. Os principais pontos apresentados são: (1) ponteiros permitem simular passagem por referência e criar estruturas dinâmicas; (2) ponteiros armazenam endereços de memória ao invés de valores; (3) os operadores & e * são usados para obter endereços e valores apontados.
O documento explica como declarar e usar funções em C, incluindo exemplos de funções para calcular média, soma e repetição. Também discute variáveis locais e globais, e os parâmetros argc e argv da função main.
The document describes how to insert nodes into a simply linked list in ascending order. It shows the process of inserting new nodes by:
1) Initializing auxiliary pointers to traverse the list
2) Allocating memory for the new node
3) Traversing the list with the auxiliary pointers until finding the correct insertion position based on the node value
4) Updating the next pointers either at the head of the list or between nodes to insert in the correct position
Diagrams are included to visualize each step of the insertion process.
Este documento apresenta conceitos fundamentais de sistemas digitais e eletrônica digital, incluindo:
1) A definição de sistemas digitais e suas vantagens em relação aos sistemas analógicos;
2) Os conceitos de lógica combinacional e seqüencial;
3) Exemplos de sistemas digitais e suas aplicações atuais e futuras.
Este documento apresenta uma apostila sobre programação em Python. Ele começa explicando o que é programação em Python e seu plano de ensino, incluindo objetivos, público-alvo, pré-requisitos, descrição, metodologia e cronograma. Em seguida, fornece uma visão geral da linguagem Python, incluindo suas características, histórico, organização e licença. Por fim, apresenta tópicos como tipos de dados, operadores, estruturas de controle, estruturas de dados, funções, módulos,
O documento discute funções e procedimentos em linguagens de programação. Apresenta como funções e procedimentos são abstrações que permitem parametrização de computações. Detalha as diferenças entre funções e procedimentos e como cada um é definido em linguagens como C, C++, Haskell e Ada. Inclui explicações sobre parâmetros formais versus reais, mecanismos de passagem de parâmetros e ordem de avaliação.
1) O documento discute as operações básicas da álgebra relacional e como elas são representadas no SQL, incluindo união, interseção, diferença, projeção, seleção, produto cartesiano e junção.
2) Exemplos dessas operações são fornecidos usando notação da álgebra relacional e sintaxe SQL.
3) Exercícios são fornecidos para aplicar essas operações usando consultas SQL em relações representando funcionários e dependentes.
Este documento fornece uma introdução à linguagem de programação Python. Ele discute a história e características da linguagem, incluindo tipos de dados, variáveis, operadores, estruturas de decisão e entrada/saída. A linguagem Python é descrita como dinâmica, de alto nível e fácil de aprender, tornando-a adequada para diversas aplicações.
Material de apoio das aulas de tutoria de Algoritmos e Estrutura de dados da Universidade Federal de Ouro Preto, Campus João Monlevade. O conteúdo abordado é sobre análise da complexidade de algoritmos.
O documento discute técnicas de gerenciamento de memória virtual, incluindo paginação sob demanda, substituição de páginas usando algoritmos como FIFO e LRU, e como a memória virtual permite que programas sejam executados parcialmente na memória principal.
O documento descreve circuitos lógicos combinacionais e sequenciais. Aborda definições, exemplos de circuitos como controle de cruzamento, codificadores e decodificadores, circuitos aritméticos como somador e subtrator, multiplexadores e demultiplexadores. Também apresenta flip-flops como RS, JK e JK mestre-escravo com suas tabelas-verdade e circuitos.
1. O documento apresenta uma coletânea de exercícios resolvidos relacionados com sinais e sistemas para alunos de engenharia informática.
2. Os exercícios estão organizados em capítulos sobre sinais discretos, representação no domínio do tempo para sistemas LTI discretos, transformada Z e sinais contínuos.
3. O documento fornece soluções detalhadas para exercícios retirados de livros de sinais e sistemas com o objetivo de apoiar o estudo dos al
O documento discute métodos de avaliação imobiliária e engenharia de avaliações. Apresenta o mercado de engenharia de avaliações no Brasil e as principais referências normativas, como a NBR 14653. Detalha atividades básicas de avaliação como coleta de documentação, vistoria do imóvel e análise de mercado. Explora métodos de avaliação como o comparativo, de custo, evolutivo e involutivo.
O documento descreve as principais portas lógicas e suas tabelas-verdade, incluindo portas básicas como AND, OR e NOT, e portas derivadas como NAND, NOR, XOR e XNOR. Também apresenta as famílias de circuitos integrados TTL e CMOS, destacando suas características e alguns circuitos comuns como o 4001, 4011 e 4012.
Este documento apresenta as normas técnicas para o desenho arquitetônico de acordo com a ABNT, definindo padrões para layout da folha, tipos de linhas, letras, números, escalas, símbolos e representação de elementos da arquitetura.
O documento discute como os seres humanos percebem o mundo de forma analógica através de seus cinco sentidos e como os computadores digitais convertem sinais analógicos em digitais para a entrada e saída de dados através de dispositivos como teclados, monitores e impressoras.
O documento apresenta de forma lúdica conceitos básicos de programação em Python, como tipos de dados numéricos, operações matemáticas, comentários no código e a utilização da interface IDLE.
O documento apresenta uma introdução ao Python através de uma conversa entre um professor e uma cobra, ensinando como baixar e instalar o interpretador Python e explorando suas funcionalidades básicas na interface IDLE.
This document provides a timeline of major programming languages from 1954 to 2004. It includes over 50 languages and was originally created by Éric Lévénez, then augmented by O'Reilly authors. The timeline shows the emergence and development of new languages over the past 50 years, with O'Reilly helping developers learn and stay up to date with changing technologies through their books and online resources.
O documento descreve os primeiros computadores eletrônicos, incluindo o ENIAC, EDVAC, EDSAC, MADAM e UNIVAC. O ENIAC foi o primeiro computador eletrônico digital programável e foi desenvolvido na Universidade da Pensilvânia entre 1942-1946. Ele continha 17.468 válvulas eletrônicas e foi usado para cálculos balísticos.
O documento discute a história dos microprocessadores, desde a invenção do transistor em 1947 até os processadores modernos. Aborda os primeiros inventores do transistor, como funciona um transistor de junção, o desenvolvimento dos chips de silício e o processo de fabricação dos processadores. Explica também a estrutura interna dos processadores, incluindo a unidade de controle, a unidade aritmética lógica e os registradores.
O documento discute programação estruturada, abordando fluxos de controle, diagramas de atividade e regras para estruturação de programas. É apresentada a simbologia para fluxos sequenciais, decisões e repetições, além de exemplos de exercícios para aplicação dos conceitos.
Este documento discute sintaxe e semântica de linguagens de programação. Ele introduz os conceitos de sintaxe, que define as estruturas válidas de uma linguagem, e semântica, que define o significado dessas estruturas. Também apresenta métodos formais como gramáticas livres de contexto e notação de Backus-Naur para descrever formalmente a sintaxe de uma linguagem.
O documento explica três pontos sobre o termo "ponto flutuante": 1) A origem do nome está relacionada à representação decimal dos números reais utilizando ponto como separador decimal em línguas anglo-saxônicas; 2) A representação normalizada de um número real em ponto flutuante utiliza três campos - sinal, fração e expoente; 3) Nos computadores digitais, as séries e expoentes reais são representados de forma finita de acordo com padrões como o IEEE 754.
O documento descreve as origens das máquinas de calcular, desde o ábaco chinês até as invenções de Pascal, Leibniz, Babbage e Ada Lovelace. Destaca-se a máquina analítica de Babbage, a primeira calculadora programável projetada para ser controlada por cartões perfurados, e Ada Lovelace, a primeira programadora de computadores.
O documento descreve a história dos primeiros computadores, incluindo o telégrafo de Morse, o computador de Charles Babbage, o tabulador de Herman Hollerith e os primeiros computadores eletrônicos como o Z3, o Atanasoff-Berry Computer e o Harvard Mark I.
O documento discute três tipos básicos de antonímia - binária, inversa e gradativa - e explica como a contradição pode ocorrer entre palavras antônimas ou sentenças através da negação, propriedades semânticas ou quantificadores. A antonímia nem sempre implica contradição quando palavras são usadas em diferentes contextos.
Este documento apresenta conceitos básicos da análise semântica, incluindo menção, uso, linguagem-objeto, metalinguagem, explícito, implícito, negação, ambiguidade e vagueza. O documento também discute a necessidade de aprofundar o estudo desses conceitos por meio de diferentes correntes semânticas.
O documento discute conceitos de linguagens de programação, incluindo interpretação pura, interpretação híbrida e ambientes de programação. Ele explica que a interpretação pura executa programas diretamente sem compilação, enquanto sistemas híbridos geram código intermediário para melhor desempenho. Também descreve ferramentas comuns em ambientes de programação como editores de texto e depuradores.
Este documento resume os principais pontos abordados no livro "Manual de Semântica" sobre o objeto de estudo da semântica. A semântica estuda o significado das palavras e sentenças, analisando propriedades como composicionalidade, implicação, ambiguidade e atos de fala. Aborda também a distinção entre referência e representação na construção do significado.
O documento discute sinonímia e paráfrase, explicando que sinonímia ocorre entre pares de palavras ou expressões que têm o mesmo sentido, mas não são idênticas. Paráfrase envolve transformações sintáticas ou baseadas no léxico que descrevem o mesmo estado de coisas de maneira equivalente. Não há sinonímia ou paráfrase perfeitas quando se considera o contexto completo.
linguagens regulares na ciencia da computação.pdfjonathan509395
O documento apresenta uma aula sobre linguagens regulares. Aborda definições prévias como alfabeto, cadeias e linguagens formais. Também discute expressões regulares como forma de definir linguagens regulares, mencionando operadores como união e concatenação. Por fim, apresenta o roteiro da aula, que inclui expressões regulares e suas aplicações em linguagens regulares.
Este documento fornece uma introdução às principais etapas e conceitos envolvidos no processo de compilação de linguagens, incluindo análise léxica, sintática e semântica. Também discute gramáticas formais, derivações, reconhecimento de sentenças válidas e classificação de Chomsky para gramáticas e linguagens.
1. O documento descreve gramáticas livres de contexto, que são um tipo de gerador de linguagem formal. 2. Uma gramática livre de contexto é definida como uma quádrupla composta por um alfabeto, conjunto de terminais, conjunto de regras e símbolo inicial. 3. Exemplos de aplicações incluem descrever estruturas de linguagens de programação e elaborar componentes de analisadores sintáticos de compiladores.
Este documento apresenta uma aula sobre linguagens e gramáticas. O documento discute conceitos como:
1) Definição de linguagem, alfabeto, palavra, prefixo, sufixo e subpalavra;
2) Operações em linguagens como concatenação e concatenação sucessiva;
3) Conceito de linguagem formal e exemplos de linguagens formais;
4) Introdução ao conceito de gramática formal e exemplos de gramáticas.
1. O documento discute conceitos básicos de linguagens formais, incluindo linguagens regulares, expressões regulares e gramáticas regulares.
2. Apresenta perguntas sobre propriedades de linguagens regulares definidas por expressões regulares e aceitas por gramáticas regulares.
3. Discutem aplicações de linguagens formais e propriedades importantes como fechamento e lema do bombeamento.
Este documento apresenta a primeira aula de um curso sobre Gramáticas, Autômatos e Compiladores. Ele introduz os principais conceitos como alfabeto, palavra, linguagem e gramática e fornece exemplos de gramáticas regulares.
O documento discute linguagens formais e autômatos. Aborda linguagens livres do contexto, incluindo gramáticas livres do contexto, árvores de derivação e autômatos com pilha para reconhecimento de linguagens livres do contexto.
Linguagens Formais e Autômatos: alfabetos, palavras e linguagensWellington Della Mura
O documento discute conceitos básicos de linguagens formais, incluindo símbolos, alfabetos, palavras, linguagens formais, concatenação e concatenação sucessiva. É apresentado por Wellington Della Mura da Universidade Estadual do Norte do Paraná.
O documento apresenta uma introdução à teoria das linguagens formais. Resume os principais conceitos como alfabeto, sentenças, linguagens, gramáticas e derivações. Apresenta também os objetivos da disciplina de linguagens formais, que são formalizar o conceito de linguagem, classificar linguagens com base nesta formalização, fornecer ferramentas para implementar compiladores e relacionar a hierarquia de linguagens com o conceito de computabilidade.
Slide completo sobre a Linguagem de Programação Lua.
Conteúdo:
- Definição.
- Mercado.
- Quem a utiliza.
- Características.
- Sintaxe da Linguagem.
- Códigos de Exemplos.
4. Linguagem formal
Um conjunto finito e não-vazio
cujos elementos são símbolos
Qualquer cadeia finita de símbolos
justapostos – inclusive a vazia,
Coleção de todas as strings
construídas a partir de
Qualquer subconjunto L de *
5. Em princípio não existem regras
para construir uma linguagem.
Entretanto, ao criar uma linguagem,
estamos cheios de segundas
intenções – e assim precisaremos de
regras para atingi-las!
Para = { 0, 1 }, temos
= { , 0, 1, 00, 01, 10, 11, 000,
001, ... }.
A partir daí poderemos construir
diversas linguagens, que serão
muito úteis, conforme veremos.
6. Atenção!
Um símbolo é
Termos
uma entidade
técnicos
atômica
Uma string é
só uma cadeia
de símbolos
Uma linguagem
formal é só um
conjunto de
strings
7. Exemplo
Coleção de símbolos para
descrever jogos de
baralho
{ ,,,, A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, [, ] }
12. Gramática
Componentes
de uma
gramática N – um conjunto de
símbolos não-terminais
T – um conjunto de N T
símbolos terminais
S – um símbolo especial: o
símbolo de partida
P – um conjunto de produções
13. Os não-terminais ...
As classes
gramaticais
Em inglês,
O conjunto N dos tokens
símbolos não-terminais
14. Os lexemas da Os terminais ...
linguagem
O conjunto T dos
símbolos terminais
Apesar dos não-terminais
serem usados na construção,
eles não aparecem na
sentença acabada
15. As produções ...
As regras
gramaticais
O conjunto P das
produções
17. Produções
naipe?
carta: um valor seguido de um naipe
mão : um conjunto de 3 cartas (p/ex.)
valor?
, 3A, 17, [J, K, A]
, 2, 7, A, [3, J, K]
Strings não
São strings admissíveis em
admissíveis em linguagens para
linguagens para jogos de baralho
jogos de baralho
18. As wff’s
Assim, a linguagem formal
é o conjunto de todas
as suas wff ’s Apenas um nome
mais enfático
para as strings
produzidas
19. Alfabeto de uma linguagem
Exemplo
para descrever datas no
calendário
{ /, jan, fev, ..., dez, 0, 1 2, 3, 4, 5, 6, 7, 8, 9 }
20. Produções
data: o dia, seguido do mês, seguido do ano;
separados pela barra
Dia? Mês? Ano?
6/jan/2009, 1/abr/1998, 14/jul/1872
Datas são wff’s (strings 46/jan/2009, abr/1/1998
admissíveis) no
calendário gregoriano Não são wff’s
26. O formalismo de Backus-Naur
J. W. Backus desenvolveu, especificamente para a ALGOL 58, um
método para descrever linguagens de programação, que veio a ser
conhecido como a forma normal de Backus.
Tal método foi revisado e expandido por Peter Naur para a
ALGOL 60; por sugestão de Donald Knuth, foi renomeado
como a forma normal de Backus-Naur
27. Noam Chomsky
Filadelfia, 07/12/1928
Professor do MIT
28. Exemplo
Símbolo
terminal
dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Separador de
Nome do alternativas
identificador da
classe
29. Exemplo – produção
dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
natural dígito | dígito natural
Observe que a
definição de natural é
recursiva
30. Regras de produção
Os elementos são escolhidos
de uma lista;
a ordem não importa
dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
natural dígito | dígito natural
Os elementos são escritos
sequencialmente
da esquerda para a direita
32. EBNF
O EBNF não é mais poderoso que o BNF;
apenas é mais facilitador – mais prático.
Nele são incluídas notações para repetição
e para elementos opcionais
No EBNF os símbolos terminais são
escritos entre aspas “ ”
e os não-terminais diretamente, sem os
33. A EBNF
Um elemento opcional é escrito
entre colchetes [ a ];
O elemento a pode ser incluído ou descartado
A repetição de um ou mais elementos
é descrita pela utilização de chaves:
• ( a )+ indica a repetição do a pelo menos uma vez;
• ( a )* indica a repetição do a zero ou mais vezes.
35. Apesar da notação usada ser praticamente a mesma, há uma grande
diferença entre o significado de definições léxicas e sintáticas: uma definição
léxica opera sobre os caracteres individuais do fluxo de entrada, ao passo
que uma definição sintática opera no fluxo de tokens gerado pela análise
léxica. Todas as utilizações da BNF no próximo capítulo, Análise léxica, são
definições léxicas; já nos capítulos subsequentes são definições sintáticas.
36. EBNF e diagramas sintáticos
Representação gráfica
Representação gráfica
A
A B
EBNF EBNF
AB [A]
Significado
Significado
A seguido de B A ou nada
37. EBNF
e diagramas
Representação gráfica sintáticos
A
B
EBNF
A|B
Significado
ou A ou B
38. EBNF e diagramas sintáticos
Representação gráfica Representação gráfica
A
A
EBNF EBNF
( A )* ( A )+
Significado Significado
Sequência de zero Sequência de um
ou mais A ’s ou mais A ’s
39. EBNF e diagramas sintáticos
Representação gráfica
Representação gráfica
a
a b
EBNF
a z
Significado
Símbolo EBNF
terminal a | b | ... | z
40. Exemplo Um número binário pode ser
constituído por apenas um
bit, como 0 ou 1, ou por
vários, como 110.
0
bit Para gerar 110:
1 • Você sai de número binário no
diagrama, passa por bit e
escolhe 0.
+ • Volta, passa novamente por bit
sinal e escolhe 1.
- • Torna a voltar, passa por bit
mais uma vez e escolhe 1.
sinal
número
bit
binário
Diagrama sintático
41. Python, EBNF e
diagramas de sintaxe
Mais adiante no curso, teremos a oportunidade
de trabalhar com a EBNF para definição da
sintaxe da Linguagem Python.
Todo o manual de referência da linguagem, em
The Python Language Reference
é construído utilizando a EBNF; confira em
Python v2.6.5 documentation
A seguir exibiremos alguns exemplos.
42. A definição de nome em Python
letra_min a
b
nome ::= letra_min ( letra_min | “_” )*
letra_min ::= “a”...”z”
z
nome letra_min
letra_min
_
44. O comando print
O comando print avalia uma expressão por vez e escreve o objeto resultante
na saída padrão (veja a seguir). Se um objeto não é uma string ele é
convertido antes numa string, usando as regras para conversão de strings.
Então ela é escrita (a resultante ou a original).
É colocado (escrito) um espaço antes que cada objeto seja (convertido e)
escrito, a menos que o sistema de saída acredite que foi posicionado no início
de uma linha.
Este é o caso quando:
1. ainda foi escrito nenhum caractere na saída padrão
2. o último caractere escrito na saída padrão é ‘ n’ , ou
3. a última operação de escrita na saída padrão não foi um comando print.
(Por essa razão, em alguns casos pode ser funcional escrever uma string
vazia para a saída).
46. O comando if
O comando if é usado para execução condicional.
Ele seleciona exatamente uma das sequências avaliando as
expressões uma a uma até achar uma que seja verdadeira (true –
veja a seção Operações booleanas para as definições de true e
false); então essa sequência é executada (e nenhuma outra parte
do comando if é executado ou avaliado). Se todas as expressões
são falsas, é executada a sequência associada à clausula else
(caso esteja presente).