A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

1 Análise Léxica: Introdução, Tokens, Expressões Regulares, Tabela de Símbolos Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides.

Apresentações semelhantes


Apresentação em tema: "1 Análise Léxica: Introdução, Tokens, Expressões Regulares, Tabela de Símbolos Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides."— Transcrição da apresentação:

1 1 Análise Léxica: Introdução, Tokens, Expressões Regulares, Tabela de Símbolos Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

2 Contatos n Prof. Guilherme Alexandre Monteiro Reinaldo n Apelido: Alexandre Cordel n /gtalk: n Site: n Celular: (81)

3 3 Agenda n Características das Linguagens de Alto Nível n Tipos de Especificação n Especificando a Sintaxe – Tokens n Especificando a Sintaxe – Gramática

4 4 Introdução n Para criar uma linguagem de programação, é necessário Escolher as características desejadas Especificar a linguagem n A seguir: Características comuns nas linguagens de hoje Como especificar linguagens

5 Características das Linguagens de Alto Nível

6 6 Relembrando... n Da linguagem de máquina às linguagens de alto nível... n A tendência hoje é de criar linguagens de nível cada vez mais alto, ou seja, mais intuitivas  Mas como fazer isso? Que elementos tornam as linguagens de alto nível?

7 7 Características n Controle de fluxo mais rígido Laços (como o while) Comandos de decisão (como o if-else) Sem comandos “goto” Execução Sequencial n Expressões em notações próximas da matemática 2 + (temp * 10) / 3

8 8 Características n Tipos de dados e verificações de tipo Tipos numéricos (int, Integer, double, float), strings, char, booblean, arrays, registros e tipos abstratos dão ao programador maneiras intuitivas de manipular dados binários da memória Cada tipo oferece operações especializadas -Ex: adição (para inteiros) e acesso por índice (para arrays) Com isso, a linguagem pode impedir operações inadequadas -Ex: uma variável inteira não pode receber valor float

9 9 Características n Declarações As declarações preparam um nome (de variável, função/método, classe, etc.) para ser usado Geralmente já identificam o tipo, para facilitar o entendimento Regras de escopo vão indicar em que partes do código o nome (que foi declarado) é válido (variáveis globais ou locais)

10 10 Características n Desalocação automática de memória Quanto menos o programador precisar se preocupar com a gestão de hardware, como a desalocação de memória, melhor. Em C, as variáveis são desalocadas automaticamente, mas o usuário tem que desalocar manualmente endereços que ele alocar com a função malloc(). Em Java, toda posição de memória é desalocada automaticamente pelo Garbage Collector, gc().

11 11 Características n Abstração (em geral) Tirar do usuário controle de detalhes irrelevantes (ex: alocação de memória, tamanho do array), para facilitar Separar “o que” deve ser feito de “como” é feito -Ex: interfaces em Java n Uma boa regra é incorporar características de abstração sempre

12 12 Linguagem de Alto Nível n Outros elementos podem ser criados, mas os que vimos formam o estado atual da área Pode ser o ponto de partida para criar outras linguagens de alto nível n Após escolher o que se deseja em uma linguagem é preciso especificá-la...

13 Tipos de Especificação

14 14 O Que Especificar? n Uma linguagem apresenta duas partes que precisam ser especificadas: Sintaxe -Restrições de forma, ordem e escrita; Semântica -Restrições contextuais, de sentido lógico.

15 15 Sintaxe n Diz respeito aos formatos dos programas n Restringe quais símbolos podem ser usados em cada situação n Exemplos: Um declaração é um tipo seguindo de um nome e valor. Todo comando termina em “;” Todo “(“ precisa ter um “)” correspondente -int nota = 0 -if ( nota > 7 ) { print(“Aprovado!!!”); } else { print(“Reprovado!!!”); }

16 16 Semântica n Diz respeito ao significado do programa n Especifica qual deve ser o comportamento dele quando for compilado e executado n Exemplo para um comando while: Primeiro ele avalia a expressão de teste Se for positiva, executa o comando do corpo do while e volta para a primeira etapa Se for negativa, passa para o próximo comando

17 17 Restrições Contextuais n Tratam o que não pode ser especificado na sintaxe facilmente, pois depende do contexto Regras de escopo Regras de tipo n Também chamada “semântica estática” n Vamos considerá-la parte da semântica

18 18 Como Especificar? n Formalmente – Especificações formais São mais precisas Permitem um entendimento uniforme n Informalmente – Textos em linguagem natural Geralmente são muito ambíguas Diferentes leitores podem entender diferentemente

19 19 Na Prática n Sintaxe Especificada formalmente Formalismos vistos em Teoria da Computação n Semântica Especificações formais são muito pouco usadas Informalmente especificada

20 20 Na Disciplina n Seguiremos a prática comum: Sintaxe especificada formalmente Semântica especificada informalmente

21 21 Especificando a Sintaxe n Geralmente, feita em duas partes Tokens (ligada à 1ª etapa da compilação) Gramática (ligada à 2ª etapa da compilação)

22 Especificando a Sintaxe Parte 1

23 23 Análise Léxica n A primeira fase da compilação n Recebe os caracteres do programa e os converte em um fluxo de tokens n Tokens são unidades lógicas que representam um ou mais caracteres n Cada palavra-chave é um token: Ex. begin, then, if, int n Cada idetificador é um token: Ex. a, soma, num, var1 n Cada constante é um token: Ex. 123, 3.14, 1.2E3 n Cada sinal é um token: Ex. >, =, +, -, /, (

24 24 Análise Léxica n A análise léxica é, usualmente, invocada pelo parser cada vez que um novo token é necessário n É uma fase que processa caracter por caracter. (velocidade) n Possui 2 fases: Scanning: remove espaços e comentários Análise Léxica: agrupa os caracteres em tokens

25 25 Análise Léxica n Como funciona a primeira etapa de um compilador Lê o fluxo de caracteres do código fonte Agrupa-os em sequências significativas Classifica essas sequências

26 26 Análise Léxica n Exemplo de código fonte pos = initial + rate * 60; n Exemplo de saída

27 27 Adiantando... n Lexema: sequência de caracteres com significado interligado n Token: classificação dada ao lexema Geralmente retornado junto com o próprio lexema ou outro atributo, como um ponteiro n Padrão: é uma descrição da forma que os lexemas de um token podem tomar. Ex. sequência de caracteres que formam palavra-chave como um token.

28 28 Exemplos

29 29 Especificando Tokens n Geralmente são especificados com expressões regulares n Cada token é associado a uma expressão regular que representa seus lexemas válidos Padrão que representa várias palavras (dizemos que as palavras “casam” com o padrão)

30 30 Especificando Tokens n Expressões Regulares Formalismo utilizado para definir o conjunto de aceitação de uma linguagem Principais operadores utilizados pelas ERs ExpressãoReconhece εA cadeia de caractedes vazia “” “str”A string “str” A | BTodas as cadeias reconhecidas por A ou B A. BCadeias formadas pela concatenação das cadeias reconhecidas por A e B A+Reconhece cadeias formadas pela concatenação de um número finito de cadeias reconhecidas por A

31 31 Especificando Tokens n Operadores derivados ExpressãoEquivale a ( A )Agrupamento de operadores A*A+ | ε A?A | ε [A-Z]A | B |... | Y | Z A{N}A. A. A... } N vezes A{M,N}A. A. A... } entre M e N vezes ABA. B abcString “abc”

32 32 Especificadores n Especificam o conjunto de caracteres a casar em uma posição. n Um metacaractere é um caractere ou sequência de caracteres com significado especial em expressões regulares. Os metacaracteres podem ser categorizados conforme seu uso.

33 33 Quantificadores n Definem o número permitido repetições da expressão regular precedente.

34 34 Âncoras n Estabelecem posições de referência para o casamento do restante da regex. n Note que estes metacaracteres não casam com caracteres no texto, mas sim com posições antes, depois ou entre os caracteres.

35 35 Agrupamentos n Definem ou grupos ou alternativas.

36 36 Especificando Tokens n Exercícios Defina expressões para expressar: -Número IP: -Números naturais (e inteiros): -Números de telefone (com DDD opcional): -Horas: - s: -URLs: -Placa de Carro: -CEP:

37 37 Especificando Tokens n Exercícios Defina expressões para expressar: -Número IP: \d{3}.\d{3}.\d{3}.\d{3} -Números naturais (e inteiros): \d{n} ou [0-9]{n} -Números de telefone (com DDD opcional): \([0-9]{2}\).[0-9]{4}. [0-9]{4} -Horas: [012]\d:[0-5]\d - s: -Placa de Carro: [A-Z]{3}-\d{4} -CEP: \d{5}-\d{3} ou \d\d\d\d\d -URLs: - Com http - (http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)? - Sem http - ([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?

38 38 Especificando Tokens n Exercícios Testar as definições de ERs anteriores (em Java) Pattern Matcher

39 39 Especificando Tokens n Definições regulares Define nomes para expressões regulares Uma definição pode usar definições anteriores n Exemplo letra → [a-zA-Z] dígito → [0-9] letra_ → (letra|_) dois_dígt → [1-9][0-9]? data → dois_dígt/dois_dígt/dois_dígt

40 40 Especificando Tokens n Tokens são, geralmente, especificados na forma de definições definições regulares

41 41 Exemplo n Linguagem Expressao1 ABRE_PAR → ( FECHA_PAR → ) ATRIB → = ADD → + MULT → * DEF → def ID → [_a-z][_a-z0-9]* NUM_INT → [0-9][0-9]* PT_VG → ; WHITESPACE → [ \t\n\r]+

42 42 Especificando Tokens n A maioria das linguagens definem tokens para os seguintes elementos: Tokens para os operadores, em grupo ou separadamente Um só token para todos os identificadores (nomes) Tokens diferentes para cada palavra-chave Tokens diferentes para constantes numéricas de tipos diferentes e para as strings literais (int, double, float e char, String) Tokens para cada símbolo de pontuação (;)

43 43 Alguns Tokens n Tokens para operadores podem ser definidos individualmente ou agrupados Fica a critério do criador da linguagem n Exemplo 1 n Exemplo 2 ADD → + MUL → * DIV → / OP → ( +|*|/)

44 44 Alguns Tokens n Identificadores Nomes que podem ser atribuídos a variáveis, funções, classes, etc. Usa-se um único token para todos os casos

45 45 Alguns Tokens n Palavras-chave Parecem identificadores, mas têm significados especiais Exemplos de Java: “class”, “int”, “float”, “return” Melhor considerar como tokens diferentes

46 46 Tokens Especiais n Palavras reservadas São palavras-chaves que não podem ser usadas como identificadores -Neste caso, não é permitido usar palavras-chave para dar nome a entidades da linguagem (variáveis, etc.) Considerar todas as palavras-chaves como palavras reservadas é muito comum -Facilita a construção do compilador

47 47 Tokens Especiais n Exemplo de PL/I, onde palavras-chave não são palavras reservadas IF (THEN) THEN THEN = ELSE; ELSE ELSE = THEN;

48 48 Tokens Especiais n Espaços em branco Caracteres que devem ser ignorados -Na verdade, é um “não-token” Exemplo de definição A primeira etapa do compilador simplesmente não retorna token para esse padrão WHITESPACE → [ \t\n\r]+

49 Especificando a Sintaxe Parte 2

50 50 Adiantando... n Como funciona a segunda etapa de um compilador Lê a sequência de tokens Monta uma organização lógica deles na forma de árvore sintática

51 51 Árvore sintática n Exemplo de árvore sintática n Como definir formalmente essa estrutura? DECLARACAO PTO_VIRG TIPO ID INTCHAR

52 52 Especificando Sintaxe n Pensar na organização dos tokens em frases Uma declaração é um tipo seguido de um identificador seguido de ponto-e-vírgula Um tipo pode ser os tokens INT ou CHAR n “Regras de formação” declaração -> tipo ID ; tipo -> INT tipo -> CHAR

53 53 Especificando Sintaxe n Notação quando há mais de uma produção para o mesmo conceito: n Ou simplificando... expressao -> CTE_INT expressao -> ID expressao -> expressao + expressao expressao -> CTE_INT | ID | expressao + expressao

54 54 Especificando Sintaxe n São usadas gramáticas livres de contexto, que possuem quatro elementos: Símbolos terminais Símbolos não-terminais Símbolo inicial Produções

55 55 Especificando Sintaxe n Elementos das gramáticas livres de contexto: Símbolos terminais: -Símbolos assumidos como atômicos, indivisíveis -Assumiremos os tokens como terminais Símbolos não-terminais: -Auxiliares usados para organizar os tokens em “frases”

56 56 Especificando Sintaxe n Elementos das gramáticas livres de contexto: Símbolo inicial: -Não-terminal que será a raiz (topo) da árvore -Geralmente é um não-terminal chamado programa Produções: -São as regras de formação -Definem as “frases” de símbolos válidas

57 57 Especificando Sintaxe n Diferentes notações para as produções BNF (Backus-Naur Form) EBNF (Extended BNF)

58 58 BNF (Backus-Naur Form) n Não-terminais entre “ ” n Terminais entre aspas ou sem delimitadores n Usa “::=“ ao invés de “ → ” ::= BEGIN END ::= | ::=...

59 59 EBNF (Extended BNF) n Existem diversas variações... Numa boa especificação, devem vir anotações sobre quais as extensões assumidas n A característica mais comum é que não- terminais aparecem sem delimitador bloco = BEGIN comando* END comando =...

60 60 EBNF (Extended BNF) n Outras características típicas Chaves ou “*” significam repetições Colchetes ou “?” significam opcional (zero ou um) Oferecer expressões regulares, permitindo que os tokens sejam especificados como não-terminais Identificador = [a-zA-Z]+ Igual = “=“ Comando = Identificador Igual Expresssao

61 61 Exemplo n Linguagem Expressao1 Uma linguagem simples para criar expressões Apenas dois comandos: -Definir um nome para alguma expressão (constante) -Avaliar uma expressão

62 62 Exemplo n Linguagem Expressao1 ::= * ::= ; | ; ::= def ID = ::= + | * | ( ) | NUM | ID

63 63 Exemplo n Linguagem Expressao1 (com os tokens explícitos) ::= * ::= PT_VG | PT_VG ::= DEF ID EQ ::= ADD | MUL | ABRE_PAR FECHA_PAR | NUM | ID

64 64 Especificando Sintaxe n As gramáticas livres de contexto podem representar tudo que expressões regulares representam (e algo mais) n Por isso, às vezes, a definição completa da sintaxe da linguagem (incluindo tokens) é feita usando apenas uma gramática em EBNF.

65 65 Bibliografia n AHO, A., LAM, M. S., SETHI, R., ULLMAN, J. D., Compiladores: princípios, técnicas e ferramentas. Ed. Addison Wesley. 2a Edição, 2008 (Capítulo 2)

66 66 Análise Léxica: Introdução, Tokens, Expressões Regulares, Tabela de Símbolos Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife


Carregar ppt "1 Análise Léxica: Introdução, Tokens, Expressões Regulares, Tabela de Símbolos Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides."

Apresentações semelhantes


Anúncios Google