Reconhecendo Lexemas

Frank Coelho de Alcantara - 2020      

Um pouco de liberdade

Usaremos máquinas de estado finito determinísticas e vamos mostrar apenas as transições que realmente levam para outros estados.

modelo de uma máquina de estados finitos para reconhecer not, new e while

COOPER, K. D.; TORCZON, L. Engineering a Compiler. 2º. ed. London, UK: Elsevier, 2012.

Com um pouco álgebra

$MEF=\{S, \Sigma, \delta, s_0, A\}$

$MEF=\{\{s_0, s_1, s_2, s_3, s_4, s_5, s_6, s_7, s_8, s_9, s_{10}\}, \\ \{e, h, i, l, n, o, t, w\};\\ \{\delta_{(s_0,n)}=s_1, \delta_{(s_0,w)}=s_6, \\ \delta_{(s_1,e)}=s_2, \delta_{(s_1,o)}=s_4, \\ \delta_{(s_2,w)}=s_3, \\ \delta_{(s_4,t)}=s_5, \\ \delta_{(s_6,h)}=s_7, \\ \delta_{(s_7,i)}=s_8, \\ \delta_{(s_8,l)}=s_9, \\ \delta_{(s_9,e)}=s_{10}\}, s_0 = s_0, A=\{s_2, s_5, s_{10}\} \}$

modelo de uma máquina de estados finitos para reconhecer not, new e while

E apontamos todos os símbolos que não interessam para um estado de erro $s_e$ de tal forma que: $\delta_{(s_i,\{x|x \notin \Sigma\})}=s_e$

COOPER, K. D.; TORCZON, L. Engineering a Compiler. 2º. ed. London, UK: Elsevier, 2012.

Transformando em Código

Sem código, não há progresso. Usando o site repl.it crie um código, na sua linguagem de programação preferida, que seja capaz de implementar a máquina de estados finitos que definimos para not, new e while.

Lembre-se que não é qualquer código, para reconhecer not, new e while é um código que implemente a $MEF$ que definimos. Ou seja, todos os estados e transições devem estar presentes e identificados no seu código.

Quando terminar, poste o seu código Aqui!

Desafio 1

Crie uma MEF e o código para identificar nomes de variáveis em C segundo a seguinte regra:

  1. Um identificador pode conter apenas letras (maiúsculas e minúsculas), dígitos e o sublinhado (underscore);
  2. Um identificador pode começar com uma letra, ou com um underscore;
  3. Não existe limite para o comprimento de um nome em C, mas vamos limitar em 31 caracteres.

Para simplificar a tabela ao lado contém a lista de lexemas reservados do C..

Quando terminar, poste o link para o seu código Aqui!

Lexemas Reservados
auto double int struct
break else long switch
case enum register typedef
char extern return union
continue for signed void
do if static while
default goto sizeof volatile
const float short unsigned

Material de apoio

Você pode baixar o material de apoio clicando aqui