funcao → 'funzione' NOME '(' (declaracaoFuncao)? ')' bloco? 'fermare'
declaracaoFuncao → tipo ID | tipo ID ',' declaracaoFuncao
bloco → linha bloco | linha
linha → escrever | ler | declaracao ';' | ifelse | while | for | atribuicao ';' | chamadaFunc
chamadaFunc → NOME '(' argumentos? ')' ';'
argumentos → exprChamadaFunc (',' exprChamadaFunc)*
exprChamadaFunc → ID | NUM | TEXTO | chamadaFunc
escrever → 'carattere' '<<' (TEXTO | '$' ID) ('.' ('$' ID | TEXTO))* ';'
ler → 'leggere' 'xD' TEXTO ID? ';'ler → 'leggere' 'xD' TEXTO ID? ';'
declaracao → tipo ID operadorAtribuicao expressao
ifelse → 'se' condicao '{' bloco '}' ('altrimenti' '{' bloco '}')?
while → 'mentre' condicao bloco | 'fare' '{' bloco '}' 'mentre' condicao ';'
for → 'per' '(' declaracao ';' condicao ';' atribuicao ';' ')' bloco
atribuicao → ID opAtribuicao expressao
expressao → fator (opMat fator)?
fator → ID | NUM | TEXTO | '(' expressao ')' | NUMDECIMAL
condicao → fator opRelacional fator (('o' | 'e') condicao)* | '(' condicao ')'
tipo → 'intero' | 'galleggiante' | 'stringa' | 'booleano'
opRelacional → '>' | '<' | '==' | '!=' | '>=' | '<='
opAtribuicao → '=' | '+=' | '-=' | '*=' | '/=' | '%='
opMat → '+' | '-' | '*' | '/' | '%'
ID → '_' (a-z | A-Z)+
NOME → (a-z | A-Z)+
NUM → (0-9)+
NUMDECIMAL → (0-9)+ '.' (0-9)+
TEXTO → '"' (0-9 | a-z | A-Z | ' ' )+ '"'
stringa _s = \"Hello, World!\";" +
"carattere << $_s;intero _x = 10;" +
"se _x == 10 {leggere xD \"Escreva seu nome\" _leitura;_x=1;}" +
"fare {_x = _x + 1;} mentre _x < 15;" +
"per (intero _i = 0; _i < 10; _i += 1;) {_x = _x * 2;}
```
Este projeto implementa um compilador como um servidor web que recebe código para compilação via requisições HTTP.
- Java 11 ou superior
- Maven
- Postman (ou qualquer cliente HTTP) para testar as requisições
- Clone o repositório
- Na pasta do projeto, execute:
mvn spring-boot:run- O servidor iniciará na porta 8080
GET http://localhost:8080/api/compiler/health
Resposta esperada:
{
"status": "Server Rodando"
}POST http://localhost:8080/api/compiler/compile
Corpo da requisição (JSON):
{
"code": "stringa _s = \"Hello, World!\"; carattere << $_s;"
}Resposta de sucesso:
{
"Compilado com Sucesso": true,
"Resultado": "código compilado...",
"tokens": [...]
}Resposta de erro:
{
"Compilado com Sucesso": false,
"erro": "mensagem de erro",
"Código Inválido": "código que causou o erro"
}- Abra o Postman
- Crie uma nova requisição POST para
http://localhost:8080/api/compiler/compile - Configure o corpo da requisição:
- Selecione "raw"
- Escolha "JSON" no dropdown
- Cole o JSON com o código a ser compilado
- Envie a requisição