Implementação de um analisador Léxico e Sintático para C++ desenvolvido em Java, com JavaCC e Swing UI, por alunos da universidade UniNorte Laureate Universities com finalidade de compor a nota parcial da 3ª ARE, como projeto final, da disciplina de Computação Teórica/Compiladores, ministrada pelo Prof.º M.Sc. Camilo Souza.
Dedicamos o nome e ícone deste projeto a nossa ex professora e orientadora Prof.ª M.Sc. Francisca Sancha. Àquela que em nós sempre acreditou. Muito obrigado, professora.
-
Clone o repositório
$ git clone https://github.com/pauloigormoraes/SanchaCppParser.git $ cd SanchaCppParser/
-
Execute o SanchaCppParser:
$ java -jar SanchaCppParser.jar
-
Após abrir, você verá esta tela:
-
Você pode clicar no menu
Arquivo > Abrir
ouArquivo > Salvar
para abrir ou salvar, respectivamente, um arquivo.txt
contendo um código C++. Por padrão, você pode selecionar um dos arquivos emmodels/
como exemplo. -
Ao abrir um arquivo, você verá o código carregado com seus lexemas destacados com Syntax Highlighting:
-
Caso você não tenha um arquivo, você pode digitar seu próprio código.
-
Após ter seu código pronto, você pode fazer a Análise Léxica ou Sintática, através das opções
Ferramentas > Analisar lexemas
ouFerramentas > Analisar sintaxe
, respectivamente. -
Você pode mais alguns detalhes no menu
Sobre
<INICIAL> → <ATRIBUIÇÃO> | <REPETIÇÃO> | <CONDIÇÃO>
<ATRIBUIÇÃO> → <TIPO> <IDENTIFICADOR> "=" <ARITMETICO> ";" | <TIPO> <IDENTIFICADOR> ";" | <IDENTIFICADOR> "=" <ARITMETICO> ";" | <IDENTIFICADOR> "++" ";" | <IDENTIFICADOR> "--" ";" | <ATRIBUIRFUNÇÃO>
<IDENTIFICADOR> → ([a-z, A-Z])* ([0-9_])+
<NUMERO> → ([0-9])+
<NUMEROREAL> → ([0-9])+ | ([0-9])* . ([0-9])*
<TIPO> → "int" | "float" | "char" | "void"
<ARITMETICO> → <EXPRESSÃO> ("+" | "-" | "/" | "*") <EXPRESSÃO>
<EXPRESSÃO> → <NUMEROINTEIRO> | <NUMEROREAL>
<CONDIÇÃO> → "if" "(" <COMPARAÇÃO> ")" "{" <BLOCO> "}"
<REPETIÇÃO> → <PARA> | <FAÇAENQUANTO>
<PARA> → "for" "(" <ATRIBUIÇÃO> ";" <COMPARAÇÃO> ";" <ATRIBUIÇÃO> ")" "{" <BLOCO> "}"
<FUNÇÃO> → <TIPO> <IDENTIFICADOR> "(" ")" "{" <BLOCO> "}"
<FAÇAENQUANTO> → "do" "{" <BLOCO> "}" "while" "(" <CONDIÇÃO> ")"
<ATRIBUIRFUNÇÃO> → <IDENTIFICADOR> ( "<<" | ">>" ) "\"" <IDENTIFICADOR> "\"" ";"
<COMPARAÇÃO> → <ATCOND> ("==" | "!=" | ">" | "<" | ">=" | "<=") <ATCOND> | <ATCOND> | <ATCOND> ("==" | "!=" | ">" | "<" | ">=" | "<=") <ATCOND> (("&&" | "||" ) <ATCOND> ("==" | "!=" | ">" | "<" | ">=" | "<=") <ATCOND>)+
<ATCOND> → <IDENTIFICADOR> | <NUMERO> | "true" | "false"