Projeto desenvolvido com ANTLR e Java para a criação de um compilador para uma linguagem de programação própria, criado como parte da avaliação A3 da disciplina Teoria da Computação e Compiladores da faculdade UniCuritiba.
-
Baixe a última versão do Java.
-
Baixe a versão 1.0 do projeto: Compilador com ANTLR e Java - Release 1.0.
-
Descompacte a pasta baixada, que possui:
Compilador-com-ANTLR-e-Java.jar→ arquivo executável do projetotestes/→ pasta com os códigos de teste, que devem possuir a extensão.medjed. Os arquivos podem ser editados ou criados facilmente em qualquer editor de texto.
- Abra o terminal na pasta descompactada e execute:
java -jar Compilador-com-ANTLR-e-Java.jar testes/nome-do-arquivo-que-ira-compilar.medjed
A linguagem criada é case-sensitive e segue sintaxe semelhante ao do C++. Os arquivos para compilação devem possuir a extensão .medjed. A documentação completa possui todas as explicações sobre a sintaxe da linguagem criada.
A linguagem possui:
- Comentários
- Declaração de variáveis
- Atribuições
- Impressão (
cout) - Leitura (
cin) - Condicionais
if/else - Repetições
whileefor(apenas analisadas semanticamente)
Limitações atuais:
whileefornão são executados pelo interpretador, somente analisados semanticamente.- Condicionais
if/elsepodem falhar se dependem de valores lidos viacin.
Para um melhor entendimento da linguagem, leia a documentação completa.
BeginPlay()
{
int X, VariavelInt, A;
int Y = 50;
float Z = 50.0, VariavelFloat;
string MinhaString = "Esse é um exemplo de STRING";
bool VariavelBool = true;
VariavelInt = 50, A = 20;
cout << VariavelInt << " - " << A << " = " << VariavelInt - A;
cout << "\n\nO valor de: X + Y é: " << X + Y << "\n"; // Isso irá gerar um valor inesperado, pois a variável X não foi inicializada
cout << "O valor de Y + Z é: " << Y + Z << "\n"; // Isso irá mostrar o valor '100' e não '100.0', pois como as casas decimais do resultado são '0' ele irá converter para INTEIRO
cout << "\n" << MinhaString;
cout << "\nE esse um exemplo de booleano: " << VariavelBool;
X = 10;
if(X > 50)
{
cout << "\n\nO valor de X agora é '" << X << "', que é maior que 50";
}
else
{
cout << "\n\nO valor de X agora é '" << X << "', que é menor que 50";
}
cout << "\n\nDigite um valor inteiro: ";
cin >> X;
cout << "\n50 + 90 * 40 / 2 = " << 50 + 90 * 40 / 2; // O resultado deve ser 1850
cout << "\n(50 + 90) * 40 / 2 = " << (50 + 90) * 40 / 2; // O resultado deve ser 2800
cout << "\n(50 + (90 * 40)) / 2 = " << (50 + (90 * 40)) / 2; // O resultado deve ser 1825
}As repetições WHILE e FOR também podem ser usadas, apesar de serem somente analisadas semanticamente e não interpretadas.
BeginPlay()
{
int X = 1;
while(X <= 10)
{
cout << X << "\n";
X++; // PODE SER TAMBÉM X = X + 1;
}
for(int i = 0; i < 20; i++)
{
cout << i << "\n";
}
}