A Golang compiler implemented using JFlex + Cup.
-
escopo comum
- Realizar checagem de tipos e contextos:
- Abstrações (nome, quantidade e tipos de parâmetros de entrada e tipo de retorno);
- Declaração;
- Uso de Variáveis;
- Comandos de atribuição;
- Expressões aritméticas;
- literais (inteiros, string, booleanos).
- Realizar checagem de tipos e contextos:
-
escopo A
- Funções
- Expressões relacionais
- Comandos condicionais: if-else
-
escopo comum
- Realizar checagem de tipos e contextos:
- Tipos existentes (considerando String, float, int, bool);
- Abstrações (nome, quantidade e tipos de parâmetros de entrada e tipo de retorno);
- Declaração;
- Uso de Variáveis;
- Comandos de atribuição;
- Expressões aritméticas;
- literais (inteiros, string, booleanos).
- Realizar checagem de tipos e contextos:
-
escopo A
- Funções
- Expressões relacionais
- Comandos condicionais: if-else
Precisamos utilizar 3 símbolos diferentes não existentes na linguagem GO para remover ambiguidades em casos recursivos relacionados a Expression, os símbolos são: INTERROGATION (?), DOUBLE_INTERROGATION (??) e HASH (#).
Utilizados nos seguintes casos:
-
Quando X -> B | Expression. E FIRST(B) incluso em FIRST(Expression).Esse caso é resolvido utilizando HASH antes de B ou de maneira similar. Quando X -> Expression (Y | ) Expression, transformamos em X -> Expression (Y | HASH) Expression. 7 regras foram modificados para esse caso.
-
Quando é possível ir para uma regra X onde FIRST(X) contém "( alfa" e também Expression. Esse caso é corrigido trocando a regra "( alfa " por INTERROGATION alfa. Utilizada apenas para 1 regra: Conversion.
-
Para resolver conflitos com CURLY_L, CompositeLit foi retirado da gramática. (Em conflitos com Expression e Block utilizamos ?? antes da definição do Block. 3 regras alteradas: For, If e Switch.)
- Java 1.8.X
- jflex 1.6.1
- Eclipse 4.X
- Download flex + cup
- Follow the installation steps
- Create a new Java project on Eclipse
- Add jflex to the project:
Build Path -> Configure Build Path -> Add external JARs -> choose: jflex/lib/java-cup-11a.jar and jflex/lib/jflex-1.6.1.jar
run core/src/lexical/Generator.java
run core/src/syntax/Generator.java
run core/src/semantic/TestSemantic.java
run core/src/semantic/TestCodeGenerator.java