JnJ 0 Denunciar post Postado Outubro 28, 2013 Pessoal estou precisando criar um compilador java e meu código é o seguinte: import java.awt.List; import java.util.ArrayList; public class PLP { public static void main(String[] args) { //String expressao = " 2 * (2+44*55)"; String expressao = "2*222-1"; Character quebra; String lexeme = ""; int estado = 0; ArrayList<String> tokens = new ArrayList<String>(); ArrayList<String> valores = new ArrayList<String>(); //Criar um array de inteiro for (int i = 0; i < expressao.length(); i++) { int j=i+1; quebra = expressao.charAt(i); // Console.WriteLine(quebra); //correcao = expressao.charAt(j); switch (estado) { case 0: if (Character.isDigit(quebra)) { estado = 1; lexeme = lexeme + quebra; if(j == expressao.length()){ tokens.add("numero"); valores.add(lexeme); System.out.println(lexeme); } } else if (quebra.equals('+')) { tokens.add("Operador"); valores.add("+"); System.out.println(quebra); } else if (quebra.equals('-')) { tokens.add("Operador"); valores.add("-"); System.out.println(quebra); } else if (quebra.equals('*')) { tokens.add("Operador"); valores.add("*"); System.out.println(quebra); } else if (quebra.equals('(')) { tokens.add("Parentese"); valores.add("("); System.out.println(quebra); } else if (quebra.equals(')')) { tokens.add("Parentese"); valores.add(")"); System.out.println(quebra); } break; case 1: if (Character.isDigit(quebra)) { estado = 1; lexeme = lexeme + quebra; if(j == expressao.length()){ tokens.add("numero"); valores.add(lexeme); System.out.println(lexeme); } } else if (Character.isSpaceChar(quebra)) { tokens.add("numero"); valores.add(lexeme); System.out.println(lexeme); estado = 0; // valor = Integer.parseInt(Character.toString(quebra)); lexeme = ""; } else { tokens.add("numero"); valores.add(lexeme); System.out.println(lexeme); estado = 0; // valor = Integer.parseInt(Character.toString(quebra)); lexeme = ""; i--; } break; } } estado = 0; for (int i = 0; i < tokens.size(); i++) { System.out.println(tokens.get(i)); switch(estado) { case 0: if(tokens.get(i) == "numero") { estado = 1; } else if(tokens.get(i) == "Parentese") { estado = 2; } else estado = 99; break; case 1: if(tokens.get(i) == "Parentese") { estado = 0; } else if(tokens.get(i) == "Operador") { estado = 0; } else estado = 99; break; case 99: System.out.println("Erro!"); } } //int a = Integer.parseInt("10"); int k=0, result=0, operacao = 0; //int[] operacao = new int[valores.size()]; while(k < valores.size()) { if(valores.get(k) == "*") { operacao = Integer.parseInt(valores.get(k-1)); result = operacao * Integer.parseInt(valores.get(k+1)); valores.remove(valores.get(k-1)); valores.remove(valores.get(k)); valores.remove("*"); //valores.remove(valores.get(k+1)); valores.add(Integer.toString(result)); System.out.println("Valor: "+result); } else if(tokens.get(k) == "+") { operacao = Integer.parseInt(valores.get(k-1)); result = operacao + Integer.parseInt(valores.get(k+1)); valores.remove(valores.get(k-1)); valores.remove(valores.get(k)); valores.remove("+"); //valores.remove(valores.get(k+1)); valores.add(Integer.toString(result)); System.out.println("Valor: "+result); } else if(tokens.get(k) == "-") { operacao = Integer.parseInt(valores.get(k-1)); result = operacao - Integer.parseInt(valores.get(k+1)); valores.remove(valores.get(k-1)); valores.remove(valores.get(k)); valores.remove("-"); //valores.remove(valores.get(k+1)); valores.add(Integer.toString(result)); System.out.println("Valor: "+result); } k++; } System.out.println("Here!"); for(int i = 0; i < valores.size();i++){ System.out.println(valores.get(i)); } //System.out.println(valores.get(0)); } } Não estou conseguindo terminar a terceira parte que é a resolução da expressão, quem puder ajudar ficarei grato! Compartilhar este post Link para o post Compartilhar em outros sites
FreitasMT 29 Denunciar post Postado Outubro 29, 2013 Quando você diz compilador você quer dizer executável? Compartilhar este post Link para o post Compartilhar em outros sites