package Ġcom . lv . lesson 1 0 Ċ Ċ import Ġcom . lv . util . out Put Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . InputStream Reader Ċ Ċ /** Ċ Ġ* ĠDate : Ġ 2 0 1 7 - 0 4 - 2 6 Ċ Ġ* ĠTime : Ġ 1 5 : 4 7 Ċ Ġ* ĠDescription : Ġ æłĪ åĴĮ éĺŁåĪĹ _ ç®Ĺ æķ° è¡¨è¾¾å¼ı ( ä¸Ń ç¼Ģ è¡¨è¾¾å¼ı è½¬æį¢ æĪĲ åĲİ ç¼Ģ è¡¨è¾¾å¼ı ) Ċ Ġ*/ Ċ class ĠArithmetic Expressions Ġ{ ĊĠĠĠ Ġ// æ¨¡ æĭŁ åŃĺ æĶ¾ åŃĹ è¿Ĳç®Ĺ ç¬¦ çļĦ æłĪ ĊĠĠĠ Ġprivate Ġval Ġstat ck Array : ĠArrayList < Char > Ġ= ĠArrayList () ĊĠĠĠ Ġ// æľĢåĲİ è¿ĶåĽŀ çļĦ åŃĹç¬¦ä¸² ĊĠĠĠ Ġprivate Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠ Ġ// æ·»åĬł åħĥç´ł ĊĠĠĠ Ġfun Ġpush ( char : ĠChar ) Ġ= Ġstat ck Array . add ( char ) ĊĠĠĠ Ġ// å¼¹ åĩº æľĢåĲİ ä¸Ģä¸ª åħĥç´ł ĊĠĠĠ Ġfun Ġpop () Ġ= Ġstat ck Array . remove At ( stat ck Array . last Index ) ĊĠĠĠ Ġ// æĺ¯åĲ¦ ä¸ºç©º ĊĠĠĠ Ġfun ĠisEmpty () Ġ= Ġstat ck Array . isEmpty () ĊĠĠĠ Ġ// æīĵåį° æłĪ ĊĠĠĠ Ġfun Ġdisp aly Stat ck ( string : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprint ( string ) ĊĠĠĠĠĠĠĠ Ġstat ck Array . out Put () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸Ń ç¼Ģ è¡¨è¾¾å¼ı è½¬æį¢ æĪĲ åĲİ ç¼Ģ è¡¨è¾¾å¼ı ĊĠĠĠĠ Ġ* Ġ@ param Ġinput Ġä¸Ń ç¼Ģ è¡¨è¾¾å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdo Trans ( input : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// æ¸ħ ç©º StringBuffer ä¸ŃçļĦ ĊĠĠĠĠĠĠĠ Ġsb . set Length ( 0 ) ĊĠĠĠĠĠĠĠ Ġ// éģįåİĨ åŃĹç¬¦ä¸² ĊĠĠĠĠĠĠĠ Ġfor Ġ( ch Ġin Ġinput . toCharArray ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ åŃĹç¬¦ çļĦ ç±»åŀĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( ch ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ+ Ġ- Ġé»ĺè®¤ ä¸º ä¸Ģ çº§ è¿Ĳç®Ĺ ç¬¦ åı· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'+', Ġ'-' Ġ-> Ġgot Oper ( ch , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ* Ġ/ Ġé»ĺè®¤ ä¸º äºĮ çº§ è¿Ĳç®Ĺ ç¬¦ åı· ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'*', Ġ'/' Ġ-> Ġgot Oper ( ch , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( çļĦæĹ¶åĢĻ çĽ´æİ¥ æ·»åĬł è¿Ľ åİ» ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ'(' Ġ-> Ġpush ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ) çļĦæĹ¶åĢĻ å¼¹ åĩº åħĥç´ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ')' Ġ-> Ġgot Paren () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĻ®éĢļ åħĥç´ł çĽ´æİ¥ æĭ ¼ æİ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsb . append ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// æĬĬ æłĪ ä¸ŃçļĦ åħĥç´ł éĢļè¿ĩ åĲİ è¿Ľ åħĪ åĩºçļĦ åİŁ åĪĻ è¿Ľè¡Į æĭ ¼ æİ¥ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( pop ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æĬĬ æłĪ ä¸ŃçļĦ åħĥç´ł éĢļè¿ĩ åĲİ è¿Ľ åħĪ åĩºçļĦ åİŁ åĪĻ è¿Ľè¡Į æĭ ¼ æİ¥ ĊĠĠĠ Ġprivate Ġfun Ġgot Paren () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpop Ġ= Ġpop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pop Ġ== Ġ'(' ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( pop ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æł¹æį® åŃĹç¬¦ åĴĮ è¿Ĳç®Ĺ çŃī çº§ æĿ¥ æĭ ¼ æİ¥ åŃĹç¬¦ ĊĠĠĠ Ġprivate Ġfun Ġgot Oper ( op This : ĠChar , Ġprec 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¼¹ åĩº æľĢåĲİ ä¸Ģä¸ª è¿Ĳç®Ĺ ç¬¦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpop Ġ= Ġpop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ æĺ¯ ( æĭ¬ åı· , åĽłä¸º ä¼ĺåħĪ çº§ æľĢ é«ĺ , æīĢä»¥ æ·»åĬł å¼¹ åĩºçļĦ åħĥç´ł ï¼Į çĦ¶åĲİ è·³ åĩº å¾ªçİ¯ äºĨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pop Ġ== Ġ'(' ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush ( pop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç¡®å®ļ æľĢåĲİ ä¸Ģä¸ª è¿Ĳç®Ĺ ç¬¦ çļĦ è¿Ĳç®Ĺ çŃī çº§ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprec 2 Ġ= Ġif Ġ( pop Ġ== Ġ'+' Ġ|| Ġpop Ġ== Ġ'-') Ġ 1 Ġelse Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ æľĢåĲİ ä¸Ģä¸ª è¿Ĳç®Ĺ ç¬¦ çļĦ çŃī çº§ å°ı äºİ ä¼ł è¿Ľ æĿ¥çļĦ çŃī çº§ ï¼Į åĪĻ æ·»åĬł è¿Ĳç®Ĺ ç¬¦ ï¼Į è·³ åĩº å¾ªçİ¯ ï¼Į åĲ¦åĪĻ å°± æĬĬ æľĢåĲİ ä¸Ģä¸ª åħĥç´ł çļĦåĢ¼ æĭ ¼ æİ¥ åĪ° çĽ®æłĩ åŃĹç¬¦ä¸² ä¸Ĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( prec 2 Ġ< Ġprec 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpush ( pop ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĭ ¼ æİ¥ è¿Ĳç®Ĺ ç¬¦ åı· ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( pop ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// æľĢåĲİ æĬĬ ä¼ł è¿Ľ æĿ¥çļĦ åŃĹç¬¦ä¸² æĶ¾ è¿Ľ æłĪ ä¸Ń ĊĠĠĠĠĠĠĠ Ġpush ( op This ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" äº² ï¼Į è¯·è¾ĵåħ¥ ä¸Ń ç¼Ģ åŃĹç¬¦ä¸² ï¼ļ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered Reader Ġ= ĠBufferedReader ( InputStream Reader ( System .` in ` )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Ġ= Ġbuffered Reader . readLine () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( input . isEmpty ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpressions Ġ= ĠArithmetic Expressions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdo Trans Ġ= Ġexpressions . do Trans ( input ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" è½¬ åĮĸ ç»ĵæŀľ ï¼ļ $ do Trans ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarithmetic Stack X Ġ= ĠArithmetic Stack X () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdo P asr se Ġ= Ġarithmetic Stack X . do P asr se ( do Trans ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" æľĢåĲİ ç»ĵæŀľ äºĨ ï¼ļ $ do P asr se ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }