Fuelang é uma linguagem de programação simples e intuitiva desenvolvida para fins educacionais para a materia de Compiladores. Ela oferece suporte a operações básicas, estruturas de controle e entrada/saída de dados.
integer
: Números inteiros e decimaistext
: Strings delimitadas por aspas duplas
+
: Adição-
: Subtração*
: Multiplicação/
: Divisão
&&
: AND lógico||
: OR lógico!
: NOT lógico==
: Igualdade!=
: Diferença<
: Menor que>
: Maior que<=
: Menor ou igual>=
: Maior ou igual
if <condição> then {
// código
} else {
// código
}
while <condição> do {
// código
}
get(variavel)
: Lê um valor do usuárioput(expressao)
: Exibe um valor na tela
integer numero = 42;
text mensagem = "Olá, mundo!";
integer n = 0;
put("Digite o número de linhas: ");
get(n);
if n <= 0 then {
put("Erro: número deve ser maior que zero!");
} else {
integer linha = 1;
while linha <= n do {
integer coluna = 1;
while coluna <= linha do {
put("*");
coluna = coluna + 1;
}
put("\n");
linha = linha + 1;
}
}
integer a = 0;
integer b = 0;
integer c = 0;
put("Digite os três lados do triângulo:");
get(a);
get(b);
get(c);
if (a <= 0) || (b <= 0) || (c <= 0) then {
put("Erro: os lados devem ser positivos!");
} else {
if (a + b <= c) || (b + c <= a) || (a + c <= b) then {
put("Não forma um triângulo!");
} else {
if (a == b) && (b == c) then {
put("Triângulo Equilátero");
} else {
if (a == b) || (b == c) || (a == c) then {
put("Triângulo Isósceles");
} else {
put("Triângulo Escaleno");
}
}
}
}
- Java JDK 8 ou superior
- ANTLR 4.13.1
Fuelang/
├── grammar/ # Arquivos da gramática e analisadores
├── lib/ # Bibliotecas (ANTLR)
├── test/
│ └── examples/ # Exemplos de programas .fuel
└── analyze.bat # Script principal
-
Análise Completa
analyze.bat caminho/do/arquivo.fuel
Este comando realiza:
- Análise léxica (tokens)
- Análise sintática (AST)
- Geração do arquivo DOT para visualização
- Exibição da árvore no visualizador gráfico
-
Apenas Tokens
analyze.bat caminho/do/arquivo.fuel -t
Mostra apenas os tokens gerados pelo analisador léxico.
-
Apenas Visualizador
analyze.bat caminho/do/arquivo.fuel -g
Abre apenas o visualizador gráfico da AST.
-
Apenas DOT
analyze.bat caminho/do/arquivo.fuel -d
Gera apenas o arquivo DOT da AST.
-
Erros Léxicos
ERRO LÉXICO [Linha X, Coluna Y]: Símbolo 'Z' inválido
-
Erros Sintáticos
ERRO SINTÁTICO [Linha X, Coluna Y]: Esperado 'Z', encontrado 'W'
-
Erros Semânticos Tipos de erros semânticos detectados:
-
Declaração Duplicada: Tentativa de declarar uma variável que já existe no mesmo escopo
ERRO SEMÂNTICO [Linha X, Coluna Y]: Variável 'nome' já foi declarada na linha Z
-
Variável Não Declarada: Uso de variável que não foi declarada
ERRO SEMÂNTICO [Linha X, Coluna Y]: Variável 'nome' não foi declarada
-
Incompatibilidade de Tipos: Tentativa de atribuir valor de um tipo a uma variável de outro tipo
ERRO SEMÂNTICO [Linha X, Coluna Y]: Tipo incompatível: não é possível atribuir valor do tipo A a uma variável do tipo B
-
Operações Aritméticas Inválidas: Uso de tipos não numéricos em operações aritméticas
ERRO SEMÂNTICO [Linha X, Coluna Y]: Operações aritméticas requerem operandos inteiros
-
Comparações Inválidas: Tentativa de comparar valores de tipos diferentes
ERRO SEMÂNTICO [Linha X, Coluna Y]: Tipos incompatíveis na comparação: A e B
-
Expressões Inválidas: Uso de expressões com estrutura ou tipos inválidos
ERRO SEMÂNTICO [Linha X, Coluna Y]: Expressão inválida
O projeto usa ANTLR4 para geração do analisador léxico e sintático. A gramática está definida em grammar/Fuelang.g4
.
java -cp "lib\antlr-4.13.1-complete.jar" org.antlr.v4.Tool -package grammar grammar\Fuelang.g4
javac -cp "lib\antlr-4.13.1-complete.jar" grammar\*.java
- Rafael Melchior de Oliveira
- Arthur Octavio Oliveira Confessor