Você está na página 1de 4

ANÁLISE LEXICA

Resumindo este tipo de análise numa tabela:

Se tiveremos algo em código Java, como por exemplo:

x = y + 100;

Vamos obter uma atribuição do tipo:

CONCEITOS BASICOS IMPORTANTES PARA A


COMPREENSÃO DO RESTO
Um conjunto é definido por: compreensão ou extensão/enumeração

·0 Extensão:

É um conjunto no qual os elementos são enumerados um a um. Exemplo:


N = {1, 2, 3, 4, 5...}

·1 Compreensão

É um conjunto que se representa da seguinte forma: { x | p(x) } (a "|"


tambem pode ser escrita com ":", e significa tal que) Exemplo: N = {n | n ꞓ N}

"DICIONÁRIO":

Simbolo/letra, se texto é um caracter = Elemento de um conjunto/alfabeto.

Alfabeto = Conjunto finito de simbolos não vazios. Exemplo: N = {n | n ꞓ N e


n<6} = {1, 2, 3, 4, 5}

Palavra/Cadeia (string) = O conjunto que se forma a partir dos simbolos/letras de


um determinado alfabeto. Exemplo: Tendo o alfabeto de cima temos palavras como: U
= n1n2n3n4... (os n's não precisam de estar por order e podem repetir-se) U =
5432112345 (por exemplo)

Palavra vazia = Ꜫ (não pode pertencer ao alfabeto, porque um alfabeto é um


conjunto não vazio)

Subpalavra = Se temos uma palavra U (exemplo de cima U = 5432112345) e


pegamos numa parte dela obtemos uma subpalavra. Exemplo: u = 54321.

Prefixo = É uma subpalavra retirada do inicio da palavra. Exemplo: u = 543

Sufixo = É uma subpalavra retirada do fim da palavra. Exemplo: u = 345

Fecho (conjunto de palavras de um determinado alfabeto) = um fecho de um


alfabeto A designa-se por A*. Exemplo: A* = {Ꜫ, 1, 2, 3, 4, 5, 12, 13, 14, 15...} (parecido
ao conjunto de partes/ power set)

Linguagem = uma linguagem de um alfabeto A designa-se L é também um


conjunto finito ou infinito de palavras como o fecho, no entanto L é uma parte de A*.
Exemplo: (usando o de cima) L = {12, 15, 13, 14, 15} que pode tambem ser escrito
como: L = {u | u ꞓ A* e 11<u<16}

GRAMÁTICAS REGULARES:

Uma gramática através de um conjunto de regras serve para que todas as


cadeias/strings possam ser geradas.

G = (V, T, P, S)

V = variaveis

T = alfabeto da gramática
S = elemento de V, simbolo de partida/inicial

P = produções / regras de substituição da gramática

Exemplo: G = (V, T, P, S) V={S} T={a, b} P={S -> aSb e S -> λ}

Uma gramática regular é uma gramatica linear, onde as suas produçoes possuem
apenas 1 variavel no lado direito e 1 variavel no lado esquerdo, tendo ou não com elas
terminais

Estas linguagens podem ser definidas por um automato finito.

Tipos de gramáticas regulares:

-GLD (gramática linear direita): A -> wB ou A -> w (terminal variavel, ou apenas


terminal..se a variavel for vazia) Exemplo: G1 = ({S}, {a, b}, S, P1) P1={S -> abS e S -> a}

-GLE (gramática linear esquerda): A -> Bw ou A-> w (variavel terminal ou apenas


terminal) Exemplo: G2 = ({S}, {a, b}, S, P2) P2={S -> Sba e S -> a}

-GLUD (funciona como a GLD, mas o terminal w tem |w|<= 1 (comprimento


menor ou igual a 1)

-GLUE (funciona como a GLE, mas o terminal w tem |w|<= 1 (comprimento


menor ou igual a 1)

Resolução:

A nossa restrição é "não conter dois 0's seguidos" pelo que temos de
usar uma variavel que controle isso, então se fizermos:

S -> 0A (A vai ser a varivel que controla a repetição, mas para isso
também temos de a definir e ter em conta todas as situações)

S -> A

A -> 1A (significa recursão de varios 1's)


A -> 10A (significa recursão de varios 10's)

(unicas situações)

A -> λ (serve para "fechar" a gramática)

AUTOMATOS FINITOS E EXPRESSÕES REGULARES

Automato determinista finito DFA

Você também pode gostar