Uma ferramenta online para visualização de etapas de compilação para a linguagem fictícia Simple Pascal.
Esse repositório diz respeito ao back end.
Desenvolver uma aplicação fullstack para a disciplina de Compiladores. O usuário deve poder digitar código de Simple Pascal e receber uma visualização dos resultados de etapas da compilação, como a análise léxica, sintática e semântica.
O projeto também é uma oportunidade de aplicar conhecimentos e estudos de desenvolvimento web, no geral. No caso do back end, estruturar um servidor com Docker, arquitetura com base em DDD e typescript.
Primeiramente, é necessário ter Docker instalado na máquina de escolha.
Com isso realizado, e tendo feito o download / pull do repositório, podemos subir o contêiner. Para isso, verifique que o motor do Docker esteja rodando e, no caminho do repositório, use o comando:
docker compose up
Isso vai configurar o ambiente e rodar o contêiner.
Após isso ter sido feito, a cada vez que se quiser rodar novamente o contêiner, pode-se executar o mesmo comando.
Aguarde até que apareça uma mensagem que indique que o servidor está rodando.
Todas as respostas das requisições abaixo seguem o formato descrito em CompilationResponse.ts:
exportdefaultinterfacecompilationResponse{lexical: token[],syntactic?: tree,semantic?: any,intermediaryCode?: any,errors?: string[],warnings?: string[],console?: string[]}Em que:
lexical: possui uma lista de tokens.
Estrutura do token:
typetoken={lexema: string;classification?: string;line: number;};syntactic: possui uma árvore de símbolos.
Estrutura da árvore:
classtree{publicchildren: tree[]=[];constructor(publicvalue: treeValue){}addChild(node: tree){this.children.push(node);}}semantic: possui uma tabela.
Estrutura da tabela:
typetableData={Name: string;Classification: string;Type: string;Block: string;ArraySize: number;ArrayType: string;SpecialType: "array"|"record"|"standard";}classtable{constructor(){}data: tableData[]=[];addValue(newData: tableData){this.data.push(newData);}getArray(){returnthis.data;}}intermediaryCode: possui uma lista de comandos.
Estrutura da lista:
exporttypeIntermediaryCode=string[];Além disso, o corpo da requisição segue o formato:
{
"code": "codigo aqui"
}POST /LexicalAnalysis
Retorna uma resposta com os campos lexical, errors e warnings preenchidos.
POST /SyntacticAnalysis
Retorna uma resposta com os campos lexical, syntactic, errors e warnings preenchidos.
POST /SemanticAnalysis
Retorna uma resposta com os campos lexical, syntactic, semantic, errors e warnings preenchidos.
POST /IntermediaryCode
Retorna uma resposta com os campos lexical, syntactic, semantic, intermediaryCode, errors, warnings e console preenchidos.