Este problema é um análisador sintático que faz uso deste analisador léxico para identificar os padrão estabelecidos por essas regex e utiliza essa grámatica para definir a ordem sintática dos tokens.
Para executar o projeto através do terminal, digite o seguinte comando no diretório raiz do projeto:
mvn clean install
Em seguida, acesse a pasta target
e lá deverá conter um arquivo
syntax-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 syntax-analyzer-1.0-SNAPSHOT-jar-with-dependencies.jar
Deseja executar o projeto pelo netbeans?
Para executar esse software é necessário clonar esse repositório. Após isso, já no netbeans acesse aos menus: `files` > `open project` > selecione o projeto(no diretório onde foi salvo) > Abra o projeto > "Construa" o mesmo.
Por padrão o este software oculta no arquivo de saída os tokens obtidos pelos
analisador léxico.
Porém é possível inserir a flag -l
como no comando abaixo para indicar que
deseja visualizar os tokens.
java -jar syntax-analyzer-1.0-SNAPSHOT-jar-with-dependencies.jar -l
⚠️ Vale resaltar que o software só aceita a flag-l
e ela DEVE, OBRIGATORIAMENTE ser a PRIMEIRA flag. Caso contário os tokens não serão exibidos.
Veja mais detalhes sobre o arquivo de saída
Este analisador é capaz de ler multiplos arquivos de texto, contanto que respeite as seguintes regras:
- Está em uma pasta chamada
input
que deve está contida no mesmo diretório dojar
; - Todos os arquivos devem ser nomeados com o préfixo
entrada
seguido de um número; - Todos os arquivos serem
.txt
;
var{
int i = 10, j = 10;
}
procedure start {
print("HELLO WORLD!");
}
Será gerado um conjunto de arquivos de saída, denomidado saidaX.txt, onde X é um valor numérico, referente ao arquivo de entrada que ele representa.
Utilizando o exemplo de entrada utilizado na sessão anterior obteremos a seguite
saida caso não seja utilizado a flag -l
:
`NÃO FORAM ENCONTRADOS ERROS SINTÁTICOS!`.
Ao remover último }
do exemplo apresentado anteriormente obteremos o seguinte
resultado caso não seja utilizado a flag -l
:
`O arquivo terminou inesperadamente! O analisador esperava um: "}"`
A abordagem de tratamento de erros utilzadas por esse problema foi o modo pânico com tokens de sincronização para definir os momentos em que o analisador deve parar de descartar os tokens inválidos e voltar ao fluxo normal de consumo de produções.
O conjunto de tokens de sincronização varia de acordo com a produção que está sendo consumida no momento.
Mas podemos observar que os token sincronizadores da produção global statments
são
os {
, procedure
, function
, var
, const
e typedef
esses tokens foram selecionados
porque tinham um a taxa de descarte de tokens baixa e são os iniciais das produções
que compõe a produção global statments
.