Experimentar sobre a implementação de um componente do processo de compilação, a análise léxica, utilizando uma ferramenta para criação dos automatos finitos para realização da tarefa.
Para esse experimento, será implementado um analisador léxico para um subconjunto da linguagem de programação Pascal.
git
python
ply
behave
compiladores_2024_t1
lexer
com uma função lexer
que irá retornar um objeto que realizará as operações da análise léxica.ID
), por exemplo, nomes de funções e variáveis, devem começar com uma letra ou o carectere de “sublinhado” (_
), seguidos de um número qualquer de letras, números ou “sublinhado”.123
), com tipo LIT_INT
3.1425
) e números de ponto flutuante em notação científica (1.24e-14
), com tipo LIT_REAL
"
) ou apóstrofes('
), por exemplo, 'palavra'
e "A"
são cadeias de caracteres, com tipo LIT_STRING
. program (DIR_PROGRAM)
var (DIR_VAR)
procedure (DIR_PROC)
function (DIR_FUNC)
begin (DIR_BEGIN)
end (DIR_END)
type (DIR_TYPE)
of (DIR_OF)
const (DIR_CONST)
with (DIR_WITH)
if (STMT_IF)
then (STMT_THEN)
else (STMT_ELSE)
while (STMT_WHILE)
repeat (STMT_REPEAT)
for (STMT_FOR)
do (STMT_DO)
until (STMT_UNTIL)
to (STMT_TO)
downto (STMT_DOWNTO)
case (STMT_CASE)
array (TYPE_ARRAY)
set (TYPE_SET)
record (TYPE_RECORD)
file (TYPE_FILE)
integer (TYPE_INT)
real (TYPE_REAL)
character (TYPE_CHAR)
boolean (TYPE_BOOL)
string (TYPE_STRING)
read (FN_READ)
readln (FN_READLN)
write (FN_WRITE)
writeln (FN_WRITELN)
nil
(OP_NIL
):=
(OP_ATRIB
)+ -
(OP_SUM
) * / div mod
(OP_MUL
)= <> <= >= > <
(OP_REL
)and or not
(OP_LOGIC
)..
(OP_RANGE
)COMMENT
)
{ }
ou (* *)
//
(
(OP_OPAR
))
(OP_CPAR
)[
(OP_OBRA
)]
(OP_CBRA
),
(OP_COMMA
);
(OP_EOC
).
(OP_PERIOD
):
(OP_COLON
)behave
ou o utilitário tox
, que podem ser instalados em um ambiente virtual do Python.Um único aluno do grupo de alunos que trabalhou na execução do trabalho deverá criar um pull request contra o repositório original do trabalho. O título do pull request é livre, porém o corpo deve conter os nomes completos de todos os alunos do grupo.
Uma vez criado o pull request ele pode ser atualizado a qualquer momento, até a data limite de entrega.
Na data limite, o pull request receberá um label de AVALIADO
, um comentário com o resultado da avaliação, será fechado, e não poderá mais ser alterado.
No LEX
, todos os alunos do grupo devem inserir, até a data limite, o link para o pull request de entrega do trabalho.
A data máxima de entrega é dia 1 de maio de 2024.
src
pode ser modificado.