Você está na página 1de 9

import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.LinkedHash ap; import java.util.!

tack; "# " $utomatas II " Ludick %uadarrama Oscar " Funcion& 'alcula expresiones (asicas )a*(+ " )c*d+ "# pu(lic class Expresiones$rchivo , private static (oolean dec; private static char-. postFija; private static int posicion / 0; private static char-. texto / null; private static char token$ctual / 1201; private static LinkedHash ap3'haracter4 5ou(le6 varia(les / ne7 LinkedHash ap3'haracter4 5ou(le6)+;

pu(lic static void main)!trin8 a-.+ thro7s IOException , File f / ne7 File)9expresion.txt9+; FileReader fr / ne7 FileReader)f+; BufferedReader (r / ne7 BufferedReader)fr+; !trin8 linea / 99;

tr: , 7hile )null ;/ )linea / (r.readLine)+++ , dec / false; texto / linea.to'har$rra:)+; token$ctual / 8et<oken)+; expresion)+; !:stem.out.println)9Expresion =alida 9 * linea+; !:stem.out.println)varia(les.entr:!et)++; if );dec+ , postFija)texto+; evalua>ostFija)+; ? posicion / 0; ? ? catch )Exception error+ , !:stem.out.println)error.8et essa8e)+ * 9 9 * linea+; ?

? private static void expresion)+ , termino)+; if )token$ctual // 1*1+ , match)1*1+; termino)+; ? else if )token$ctual // 1@1+ , match)1@1+;

termino)+; ? ?

private static void termino)+ , factor)+; if )token$ctual // 1"1 AA token$ctual // 1B1 AA token$ctual // 1#1+ , s7itch )token$ctual+ , case 1"1& match)1"1+; (reak; case 1#1& match)1#1+; (reak; case 1B1& match)1B1+; (reak; ? factor)+; ? ?

private static void dec)char token$nterior+ , dec / true; match)1/1+; if )'haracter.is$lpha(etic)token$ctual++ ,

a8re8ar=ar)token$nterior4 token$ctual+; ? else if )'haracter.is5i8it)token$ctual++ , a8re8a5i8)token$nterior4 token$ctual @ 101+; ? else thro7 ne7 RuntimeException)9Expresion no valida9+; match)token$ctual+; ?

private static void factor)+ , char token$nterior / 1201; if )'haracter.is$lpha(etic)token$ctual++ , token$nterior / token$ctual; match)token$ctual+; if )token$ctual // 1/1+ , dec)token$nterior+; ? else if );varia(les.containsCe:)token$nterior++ , varia(les.put)token$nterior4 0.0+; ? ? else if )token$ctual // 1)1+ , match)1)1+; expresion)+; match)1+1+; ? else thro7 ne7 RuntimeException)9Expresion no valida9+; ?

private static void a8re8a5i8)char token$nterior4 dou(le i+ , varia(les.put)token$nterior4 i+; ?

private static void a8re8ar=ar)char token$nterior4 char token$ctual+ , dou(le i / 0; if )varia(les.containsCe:)token$ctual++ , i / varia(les.8et)token$ctual+; varia(les.put)token$nterior4 i+; ? else , varia(les.put)token$nterior4 i+; ? ?

private static void match)char tokenEsperado+ , if )token$ctual // tokenEsperado+ , token$ctual / 8et<oken)+; ? else , thro7 ne7 RuntimeException)9Expresion no valida9+; ? ?

private static char 8et<oken)+ , if )posicion 3 texto.len8th+ , return texto-posicion**.;

? return 1201; ?

private static void evalua>ostFija)+ , !tack35ou(le6 pila / ne7 !tack35ou(le6)+; dou(le res / 0.0; !:stem.out.println)postFija+; for)char actual& postFija+ , if )'haracter.is$lpha(etic)actual++ , pila.push)varia(les.8et)actual++; ? else if )esBin)actual++ , s7itch)actual+ , case 1*1& res / pila.pop)+ * pila.pop)+; (reak; case 1@1& res / pila.pop)+ @ pila.pop)+; (reak; case 1"1& res / pila.pop)+ " pila.pop)+; (reak; case 1#1& res / pila.pop)+ # pila.pop)+;; (reak;

case 1B1& res / pila.pop)+ B pila.pop)+; (reak; ? pila.push)res+; ? ? !:stem.out.println)res+; ? private static (oolean esBin)char actual+ , if )actual // 1*1 AA actual // 1@1 AA actual // 1"1 AAactual // 1#1 AA actual // 1B1+ return true; return false; ? private static void postFija)char-. c+ , !tack3'haracter6 pila / ne7 !tack3'haracter6)+; !trin8 postfija / 99; int posicion / 0; char var / 1201; 7hile )posicion 3 c.len8th+ , var / c-posicion**.; if )'haracter.is$lpha(etic)var++ , postfija */ var; ? else if )var // 1+1+ , 7hile )pila.peek)+ ;/ 1)1+ , postfija */ pila.pop)+;

? pila.pop)+; ? else , if )pila.isEmpt:)++ , pila.push)var+; ? else , if )8etIn)var+ 3/ 8etOut)pila.peek)+++ , postfija */ pila.pop)+; pila.push)var+; ? else , pila.push)var+; ? ? ?

? 7hile );pila.isEmpt:)++ , postfija */ pila.pop)+; ? postFija / postfija.to'har$rra:)+; ?

private static int 8etIn)char c+ , if )c // 1)1+ return D; else if )c // 1*1 AA c // 1@1+

return E; else return F; ?

private static int 8etOut)char c+ , if )c // 1)1+ return 0; else if )c // 1*1 AA c // 1@1+ return E; else return F; ? ?

Você também pode gostar