Você está na página 1de 7

Disciplina Compiladores

Professor: JORGE UMBERTO SCATOLIN MARQUES


Leme/SP 2017
Projeto
Crie um projeto, na linguagem de sua preferncia com o nome de Compilador;
Crie um mtodo principal que ser o ponto de entrada;
Crie um arquivo com a estrutura de uma classe em Java;
Ao final do Analisador Lxico, teremos as seguintes sequencias:
1.gramtica para saber a construo de uma Varivel
2.gramtica para saber a construo da Classe
3.gramtica para saber a construo do If
4.gramtica para saber a construo do For
5.gramtica para adicionar declaraes de varivel, classe e instrues em
uma lista

------------------------------------------------------------------------------------------

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JOptionPane;

import javax.swing.*;

public class AnalisaLex {


public void analisa_arq(String nome_arq){
try {
FileReader arq = new FileReader(nome_arq);
BufferedReader lerArq = new BufferedReader(arq);
AnalisaSintax sintax = new AnalisaSintax();

String linha = lerArq.readLine();


Tokens token = new Tokens();

while (linha != null) {

String[] tokens = linha.split(" ");

//analisando os tokens
for(int t=0; t<=tokens.length - 1; t++){

if(!tokens[t].trim().isEmpty()){
if(!token.buscaToken(tokens[t].trim()))

System.out.print("Token:
"+tokens[t]+" no encontrado \n");
}
}

// analisando a sintax
sintax.AnalisaLinha(tokens);
linha = lerArq.readLine();
}

arq.close();

} catch (IOException e) {
System.out.print("Erro na abertura do arquivo.\n" +
e.getMessage());
}
}

------------------------------------------------------------------------------------------

import java.util.ArrayList;

public class AnalisaSintax {


public void AnalisaLinha(String[] linha){

String tk_0 = "";


String tk_1 = "";
String tk_2 = "";
String tk_3 = "";

Tipos tp = new Tipos();


//Declarao da ArrayList
ArrayList<String> variaveis = new ArrayList<String>();

String nome = "";


int i = 0;

for(int t=0; t<=linha.length - 1; t++){


nome = linha[t].trim();
i = t;
if(nome.isEmpty() == false){

if(t==0 && tp.isAcesso(nome) == true){


tk_0 = "access";
}

if(t == 0 && nome.equals("if") == true){


tk_0 = "if";
}

// se for o segundo indice e for um tipo


if(t==1 && tp.isType(nome) == true){
tk_1 = "tipo";
}
if(t==1 && nome.equals("(") == true){
tk_1 = "tipo";
}

// se for o segundo indice e for um tipo


if(t==2 && tp.isNomeVar(nome) == true){
tk_2 = "nome";
}

if(t==3 && nome.equals(";")){


tk_3 = "fim";
}

if(t==3 && nome.equals(")") == true){


tk_1 = "tipo";
}

}
}

if(tk_0.equals("access") && tk_1.equals("tipo") &&


tk_2.equals("nome") && tk_3.equals("fim")){
System.out.println(linha[i-1] + " uma varivel");
variaveis.add(linha[i-1]);
tk_0 = ""; tk_1 = ""; tk_2 = ""; tk_3 = "";
}

if(tk_0.equals("if") && tk_1.equals("(") && tk_3.equals(")") ){


System.out.println(linha[i-1] + " um if");
tk_0 = ""; tk_1 = ""; tk_2 = ""; tk_3 = "";
}

// gramtica para saber a construo de uma Varivel

// comea com um tipo verifica se no nem na lista de tipos ou na de


tokens
// se no estiver, uma varivel;

// criar uma lista de variaveis declaradas.(qdo reconhecer como variavel,


// inserir em um vetor - arraylist
// public String variavel1;
// gramtica para saber a contruo da Classe
// gramtica para saber a construo do if

}
------------------------------------------------------------------------------------------

public class Compila {


public static void main(String[] args){
AnalisaLex analisa = new AnalisaLex();
analisa.analisa_arq("D:\\Desktop\\Editado -
Compilador2\\src\\Tokens.java");
}
}
------------------------------------------------------------------------------------------

import java.util.ArrayList;

public class Tipos {

ArrayList <String> tipos = new ArrayList();


ArrayList <String> access = new ArrayList();

Tipos(){
tipos.add("String");
tipos.add("int");
tipos.add("double");
tipos.add("float");
tipos.add("boolean");

access.add("public");
access.add("\tpublic");
access.add("private");
access.add("protected");

public boolean isType(String tipo){


boolean ret = false;

for(String tp : tipos){
if(tp.equals(tipo)){
ret = true;
break;
}
}
return ret;
}
public boolean isAcesso(String tipo){
boolean ret = false;
for(String tp : access){
if(tp.equals(tipo)){
ret = true;
break;
}
}
return ret;
}

public boolean isNomeVar(String tipo){

boolean var = true;

if(this.isAcesso(tipo))
var = false;

if(this.isType(tipo))
var = false;

return var;
}

------------------------------------------------------------------------------------------
import java.util.ArrayList;

public class Tokens {


private String[] lista;

public Tokens(){
lista = retorna_tokens();
}

private String[] retorna_tokens(){

String[] meus_tokens = new String[27];

meus_tokens[0] = "{";
meus_tokens[1] = "}";
meus_tokens[2] = ")";
meus_tokens[3] = "(";
meus_tokens[4] = ";";
meus_tokens[5] = "public";
meus_tokens[6] = "static";
meus_tokens[7] = "void";
meus_tokens[8] = "main";
meus_tokens[9] = "class";
meus_tokens[10] = "args";
meus_tokens[11] = "[";
meus_tokens[12] = "]";
meus_tokens[13] = "String";

meus_tokens[14] = "int";
meus_tokens[15] = "double";
meus_tokens[16] = "float";
meus_tokens[17] = "boolean";
meus_tokens[18] = "string";

meus_tokens[19] = "-";
meus_tokens[20] = "+";
meus_tokens[21] = "*";
meus_tokens[22] = "/";
meus_tokens[23] = ">";
meus_tokens[24] = ">=";
meus_tokens[25] = "<";
meus_tokens[26] = "<=";

return meus_tokens;
}

public boolean buscaToken(String token){


boolean achou = false;
String tok = null;
String carac = null;
for(int t=0; t<=lista.length-1;t++){
tok = token.replaceAll(" ","");
carac = lista[t];

if(!tok.trim().isEmpty()){
if(tok.equals(carac)){
achou = true;
break;
}
}
}

return achou;
}
}

Você também pode gostar