Linguagem de Prog. e Programas

Slides:



Advertisements
Apresentações semelhantes
FAPE - Curso de Ciência da Computação
Advertisements

Tópicos em Compiladores
gerador de código intermediário
1.3.2 – Linguagem Assembly Um programa em linguagem de máquina sofre de total falta de clareza O programa é uma sequência de linhas numeradas Cada linha.
Introdução à Ciência da Computação Linguagens de Programação.
Compiladores Claudio Benossi
II – Análise léxica DEI Papel do analisador léxico.
II – Análise léxica DEI lex: linguagem de especificação para analisadores léxicos Implementação de simuladores de autómatos finitos Bibliografia aconselhada:
I - Noções dum compilador
Compiladores I Cristiano Damiani Vasconcellos
Linguagem de Montagem Visão geral.
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Prof. Yandre Maldonado e Gomes da Costa
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Análise Léxica (Parte 2)
3 AUTÓMATOS FINITOS.
Software Básico Silvio Fernandes
Ling. Formais e Autômatos Autômatos finitos
Introdução a Programação Renata Freire
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
YACC.
Lex e Yacc.
Análise Sintática Ascendente
Autômatos Finitos Determinísticos
Construção de Compiladores
Tradutores de Linguagens
PROGRAMAÇÃO I UNIDADE 1.
Análise léxica e sintática
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Informática Teórica Engenharia da Computação
Compiladores, Aula Nº 5 João M. P. Cardoso
Gramáticas Livres de Contexto
PCI- Introdução à Computação
Informática Teórica Engenharia da Computação
Ling. Formais e Autômatos AFN-ε
Compiladores Prof. Claudio Benossi.
Análise Léxica Primeira fase de um compilador
Autómatos de Pilha. UM NOVO MODELO PARA OS AUTÓMATOS FINITOS As linguagens regulares são aceites por autómatos finitos. E as linguagens não regulares?
Análise Léxica.
Analise sintática aula-07-analise-sintática.pdf.
Geração de Código aula-12-geração-de-código.pdf.
ALGORITMOS Intensivo Janeiro e Fevereiro de 2011
Analise Semântica aula-10-analise-semântica.pdf.
Projeto de Linguagens de Programação
Máquinas de Turing.
Faculdade Pernambucana - FAPE Setembro/2007
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
COMPILADORES 04 Prof. Marcos.
Fundamentos de linguagens de programação
Geradores de analisadores léxicos
Programação de Computadores - 1
Computabilidade e Linguagens Formais
Engenharia/Ciência da Computação
Sintaxe de uma Linguagem
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
SISTEMAS DE INFORMAÇÃO
Linguagem de Programação I PARTE i
Paradigmas das Linguagens de Programação - História
Aula 6 1 Análise Lexical Compiladores, Aula Nº 6 João M. P. Cardoso.
Compiladores Análise Léxica
Compilador Software que traduz o texto (linguagem fonte) que representa um programa para código máquina(linguagem alvo) capaz de ser executado pelo.
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.
LÓGICA DE PROGRAMAÇÃO Curso: Técnico em Informática Professor: Ronaldo Disciplina: Lógica de Programação.
COMPILADORES 03 Prof. Marcos.
Disciplina: LINGUAGENS FORMAIS, AUTÔMATOS E COMPUTABILIDADE
Transcrição da apresentação:

Linguagem de Prog. e Programas Em qualquer ling. de programação, é necessário conhecer: estruturas de dados permitidas como mexer com partes do programa, sem alterar todo o resto; os elementos de controle que identificam as estruturas, tais como: loop etc; como implementar subrotinas.

Linguagens e o Compilador Lf = ling. fonte; Lm= ling. máquina; L0 = Ling. objeto.

Linguagens e o Compilador No compilador: 3 linguagens: - linguagem fonte; - linguagem objeto; - linguagem na qual o compilador foi escrito. - escrito para a linguagem x; - escrito na linguagem z - código objeto na linguagem y

Linguagens e o Compilador

Linguagens e o Compilador Em geral, Lf é uma linguagem de alto nível como ALGOL, COBOL, PASCAL, etc. Lo não é necessariamente uma linguagem de máquina, podendo ser uma Linguagem de Montagem ("Assembler") La. Nesse caso, é necessário ter-se mais uma fase de tradução de La para a linguagem de máquina Lm do computador a ser utilizado para processar o programa objeto:

Est. Hierárquica de uma L.P.

Análise Léxica Analisador Léxico: 1ª fase de um compilador lê os caracteres de entrada e produz uma sequência de símbolos léxicos válidos (tokens) pode ser implementado como uma subrotina do parser ou uma co-rotina do parser; executa tarefas secundárias, como: remover comentários; remover espaços em branco controlar posição dos elementos, visando mensagens de erros ao programador

Análise Léxica Tokens: Elementos dados: elementos básicos de qualquer ling. de programação: numéricos: inteiros, reais, complexos etc lógicos: true, false caracteres: “C”, “a”, “casa” ponteiros Identificadores / nomes: variáveis dos procedimentos, associadas a um dado nome: Nome valor atributo

Análise Léxica Tokens: Estruturas de dados arrays record listas pilhas Operadores aritméticos: Unários: pré-fixados pós-fixados Binários

Reconhecimento de Tokens Diagramas de Transição: - passo intermediário; - apresentam ações executadas pelo Analisador Léxico; - controla as informações a respeito de caracteres que são examinados, com a leitura do arquivo fonte. Elementos dos Diagramas: - estados: posições no diagrama; - lados: setas que conectam os estados; - rótulos: indicam os caracteres de entrada que podem aparecer após atingir-se um dado estado; Obs: Chamamos o diagrama de determinístico quando o mesmo símbolo não figura como rótulo de lados diferentes que deixem um mesmo estado.

Diagramas de Transição Supondo a que um número real possa ser dado por: <sinal><parte_inteira>.<parte_fracionária>E<expoente>

Diagramas de Transição Para reconhecimento de identificadores:

Autômatos Finitos Os símbolos que deverão ser reconhecidos na análise léxica são representáveis por expressões regulares (ou equivalentemente por gramáticas regulares). Há uma correspondência unívoca entre expressões (ou gramáticas) regulares e autômatos finitos. Autômatos Finitos: máquinas que podem ser utilizadas para reconhecer strings de uma dada linguagem. Autômatos Finitos são compostos por:  um conjunto de estados, alguns dos quais são denominados estados finais. À medida que caracteres da string de entrada são lidos, o controle da máquina passa de um estado a outro;  um conjunto de regras de transição entre os estados.

Autômatos Finitos Formalmente, um autômato é descrito por cinco características: - um conjunto finito de estados; - um alfabeto de entrada finito; - um conjunto de transições; - um estado inicial; - um conjunto de estados finais. Quando, partindo de um estado inicial, varrendo a sentença dada (de acordo com as regras de transições), consegue-se atingir um estado final, a sentença dada é parte da linguagem.

Autômatos Finitos Forma Gráfica de Representação de um Autômato Finito:

Autômatos Finitos Forma Tabular de Representação do mesmo Autômato Finito: a b c A B B C B C B - C A - D D - - -

Autômatos Finitos não-determínisticos Um Autômato de Estados Finito não-deterministico é: - aquele em que pode ocorrer a transição vazia (aquela em que o autômato pode passar de um estado a outro sem que ocorra a entrada de um caracter do string); - aquele onde podem ocorrer indeterminações na ação, isto é, determinados estados podem ter mais do que uma transição possível para um dado caracter.

Autômatos Finitos não-determínisticos Exemplo: Reconhecimento da linguagem (a|b)*abb: Estado Símbolo de Entrada a b 0 {0,1} {0} 1 {2} 2 {3}