São necessários os seguintes pré-requisitos para a execução deste projeto:
- Java 11 ou superior.
- Maven 3.6.3 ou superior.
Para executar o projeto através do terminal, digite o seguinte comando no diretorio raiz do projeto:
mvn clean install
Em seguida acesse a pasta target
e lá deverá conter um arquivo
lexical-analyzer-1.0-SNAPSHOT-jar-with-dependencies.jar
que corresponde
ao executável do projeto.
Para iniciar o jar basta executar o seguinte comando:
java -jar lexical-analyzer-1.0-SNAPSHOT-jar-with-dependencies.jar
Leia a sessão entrada.
"Depois de um ano conturbado por conta da pandemia os tutores do MI - Processadores e Linguagem de Programação estão voltando “com tudo” e querem saber se os alunos também estão animados. Para isso estão lançando uma série de desafios para testarem os conhecimentos de seus pupilos.
O primeiro desafio é desenvolver um analisador léxico para uma linguagem que será apresentada em etapas. Para esta etapa foi disponibilizada uma tabela contendo a estrutura léxica da linguagem."
Descrição | Expressões |
---|---|
Palavras resevadas | var const typedef struct extends procedure function start return if else then while read print int real boolean string true false global local |
Indentificadores | letra ( letra | dígito | _ )* |
Números | Dígito+(.Dígito+)? |
Dígito | [0-9] |
Letra | [a-z] | [A-Z] |
Operadores aritiméticos | + - * / ++ -- |
Operadores relacionais | == != > >= < <= = |
Operadores lógicos | && || ! |
Delimitadores de comentário | // Isto é um comentário de linha /* Isto é um comentário de bloco */ |
Delimitadores | ; , ( ) { } [ ] . |
Cadeia de caracteres | "( letra | dígito | símbolo | \" )* " |
Símbolo | ASCII de 32 a 126 (exceto ASCII 34) |
A entrada para este analisador é um conjunto de arquivos texto com os nomes entradaX.txt, onde X é um valor numérico que identifica cada um dos arquivos de entrada.
Esses arquivos devem estar obrigatóriamente em uma pasta
input
que por sua vez deve estar no mesmo diretório
onde o jar
foi executado.
Será gerado um conjunto de arquivos de saída (um para cada arquivo de entrada), denominados saidaX.txt, onde X é um valor numérico, referente a cada arquivo de entrada, com a resposta do analisador léxico.
Tokens possuem tipos e esses tipos são representados pela seguinte tabela de siglas:
Sigla | Descrição | Regex | Teste aqui |
---|---|---|---|
PRE |
Palavra Reservada | Link ao lado | ➡️ |
IDE |
Identificador | [a-zA-Z](\w|_)* |
➡️ |
NRO |
Número | \d+(\.\d+)? |
➡️ |
DEL |
Delimitador | [;,\(\)\{\}\[\]\.] |
➡️ |
REL |
Operador Relacional | ([=><]=?)|!= |
➡️ |
LOG |
Operador Lógico | (&&||||!(?!=)) |
➡️ |
ART |
Operador Aritmético | (\*|/)|(\+\+?|--?) |
➡️ |
CAD |
Cadeia de Caracteres | (\"(.*?(?<!\\))\") |
➡️ |
LCM |
Comentário de linha | //.* |
➡️ |
BCM |
Comentário de bloco | - |
Os tokens abaixo definem os possíveis erros léxicos que o analisador é capaz de encontrar durante a análise.
Sigla | Descrição | Regex | Teste aqui |
---|---|---|---|
SIB |
Simbolo Inválido | - | |
CMF |
Cadeia Mal Formada | - | |
NMF |
Número Mal Formado | \d+\.(?=[^\d]) |
➡️ |
CoMF |
Comentário Mal Formado | - | |
OpMF |
Operador Mal Formado | (?<!(&||))[&|](?!(&||)) |
➡️ |
⬅️ Problema anterior | ............................... ⬆️ Voltar ao topo ⬆️ ............................... | Próximo problema ➡️ |
---|