https://github.com/infinitemarcus/compilador-java
Compilador em Java para compilar uma linguagem fictícia K para C
https://github.com/infinitemarcus/compilador-java
Last synced: 10 months ago
JSON representation
Compilador em Java para compilar uma linguagem fictícia K para C
- Host: GitHub
- URL: https://github.com/infinitemarcus/compilador-java
- Owner: InfiniteMarcus
- Created: 2020-10-06T17:20:19.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-07-18T19:58:09.000Z (almost 5 years ago)
- Last Synced: 2025-03-13T13:44:01.662Z (over 1 year ago)
- Language: Java
- Homepage:
- Size: 117 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Projeto final - Compiladores
## Sobre este pojeto
Este projeto foi desenvolvido durante a disciplina de Compiladores, no curso de Ciência da Computação da UFSCar - Sorocaba. Foram implementadas as etapas de análise sintática, léxica e semântica da compilação de uma linguagem de programação fictícia chamada K para a linguagem C. Todo o código-fonte do projeto foi escrito em Java.
## Especificações
### Linguagem K
Diante do fato deste projeto ter sido feito em uma disciplina ofertada em ambiente acadêmico, não é possível fornecer detalhes específicos da linguagem de programação utilizada como código de entrada do compilador. Esta linguagem é ficcional, criada para fins didáticos, baseando-se em linguagens comumente tipadas estaticamente e de paradigma estrutural.
No entanto, aqui há uma lista de recursos comuns a outras linguagens de programação e que são suportados por esta linguagem:
* Comandos condicionais (`if ... then`, `else`, `endif`)
* Comandos de repetição (`while ... endw`)
* Declaração e atribuição de variáveis
* Tipagem estática de funções, variáveis e parâmetros (`int`, `string` e `boolean`)
* Operadores matemáticos e lógicos básicos (`+`, `-`, `==`, `<=`, `||`, `&&`, etc)
* Declaração e chamada de funções (com e sem parâmetros e/ou retorno)
* Comentários de uma linha e multibloco (`//` e `/* ... */`)
* Necessidade de declaração de função principal sem parâmetros (`def main`)
* Existência de funções pré-definidas de entrada/saída de dados
* Entre outros
Alguns exemplos de códigos escritos em K se encontram em `examples/inputs`, neste repositório.
### Execução do projeto
A execução do compilador utiliza dois arquivos: um de entrada, com o código-fonte em K a ser compilado, e um de saída, com o código-fonte em C ou as mensagens de erro de compilação. Caso o arquivo de saída esteja em falta, o próprio programa o criará.
Para passar os arquivos para o programa, basta utilizar os argumentos de execução padrão do Java (`String [] Args`) na ordem anteriormente citada.
### Processo de compilação
Durante a compilação, o programa buscará e salvará quaisquer tipos de erros sintáticos, léxicos ou semânticos, baseando-se na gramática original da linguagem K. Estes erros serão, então, escritos no arquivo de saída do programa. Caso nenhum erro tenha sido encontrado, o programa gerará o código-fonte em C correspondente ao código-fonte original.
## Exemplos
* Código com erros sintáticos
Arquivo de entrada:
```
def main{
```
Saída do compilador:
```
teste.in:2: statement inválido
def main{
teste.in:2: } esperado
def main{
```
* Código com erros sintáticos (corrigido)
Arquivo de entrada:
```
def main{}
```
Saída do compilador
```
#include
void main(){
}
```
Mais exemplos podem ser encontrados na pasta `examples` deste repositório.
## Autores
* [José Vitor Novaes Santos](https://github.com/devNatron)
* [Marcus Vinicius Natrielli Garcia](https://github.com/Infinitemarcus)
* [Victor Fernandes de Oliveira Brayner](https://github.com/victorfob)