• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            棧的應(yīng)用-表達(dá)式求值(后綴式)

            ·       以下就分"如何按后綴式進(jìn)行運(yùn)算""如何將原表達(dá)式轉(zhuǎn)換成后綴式"兩個問題進(jìn)行討論。

            n       如何按后綴式進(jìn)行運(yùn)算?

            可以用兩句話來歸納它的求值規(guī)則:"先找運(yùn)算符,后找操作數(shù)。

               運(yùn)算過程為:對后綴式從左向右"掃描",遇見操作數(shù)則暫時保存,遇見運(yùn)算符即可進(jìn)行運(yùn)算;此時參加運(yùn)算的兩個操作數(shù)應(yīng)該是在它之前剛剛碰到的兩個操作數(shù),并且先出現(xiàn)的是第一操作數(shù),后出現(xiàn)的是第二操作數(shù)。

            n       如何由原表達(dá)式轉(zhuǎn)換成后綴式?
            先分析一下
            原表達(dá)式后綴式兩者中運(yùn)算符出現(xiàn)的次序有什么不同。
            例一
            .  原表達(dá)式:a×b/c×d e+f

                      后綴式:a b × c / d × e f +

               例二.  原表達(dá)式:a+b×c – d/e×f

                      后綴式: a b c × + d e / f ×

            對原表達(dá)式中出現(xiàn)的每一個運(yùn)算符是否即刻進(jìn)行運(yùn)算取決于在它后面出現(xiàn)的運(yùn)算符,如果它的優(yōu)先數(shù)"高或等于"后面的運(yùn)算,則它的運(yùn)算先進(jìn)行,否則就得等待在它之后出現(xiàn)的所有優(yōu)先數(shù)高于它的"運(yùn)算"都完成之后再進(jìn)行。

            從原表達(dá)式求得后綴式的規(guī)則為:
                   1) 設(shè)立運(yùn)算符棧;
                   2) 設(shè)表達(dá)式的結(jié)束符為“#”,預(yù)設(shè)運(yùn)算符棧的棧底為“#”
                   3) 若當(dāng)前字符是操作數(shù),則直接發(fā)送給后綴式;
                   4) 若當(dāng)前字符為運(yùn)算符且優(yōu)先數(shù)大于棧頂運(yùn)算符,則進(jìn)棧,否則退出棧頂運(yùn)算符發(fā)送給后綴式;
                   5) 若當(dāng)前字符是結(jié)束符,則自棧頂至棧底依次將棧中所有運(yùn)算符發(fā)送給后綴式;
                   6) (”對它之前后的運(yùn)算符起隔離作用,則若當(dāng)前運(yùn)算符為“(”時進(jìn)棧;
                   7) ")"可視為自相應(yīng)左括弧開始的表達(dá)式的結(jié)束符,則從棧頂起,依次退出棧頂運(yùn)算符發(fā)送給后綴式直至棧頂字符為"("止。

             

            void transform(char suffix[ ], char exp[ ] ) {

            // 從合法的表達(dá)式字符串 exp 求得其相應(yīng)的后綴式 suffix
            InitStack(S); Push(S,
            # );
            p = exp; ch = *p;
            while (!StackEmpty(S)) {

              if (!IN(ch, OP)) Pass( suffix, ch);
              else {
               switch (ch) {
               case ( : Push(S, ch); break;
               case ) : {
                         Pop(S, c);
                        while (c!= ( )
                         { Pass( suffix, c); Pop(S, c);}
                            break; }
               default : {

                                while(Gettop(S, c) && ( precede(c,ch)))
                           { Pass( suffix, c); Pop(S, c); }
                           if ( ch!= # ) Push( S, ch);
                           break;
                          } // defult
               } // switch
             } // else
             if ( ch!= # ) { p++; ch = *p; }
            } // while

            } // transform

             

            posted on 2010-03-05 16:19 肥仔 閱讀(2984) 評論(1)  編輯 收藏 引用 所屬分類: 狀態(tài)機(jī) & 自動機(jī) & 形式語言

            評論

            # re: 棧的應(yīng)用-表達(dá)式求值(后綴式)  回復(fù)  更多評論   

            復(fù)雜的parser寫多了,自然會重新發(fā)明boost::spirit車輪一次的,然后從此再也不寫parser……
            2010-03-06 21:28 | 陳梓瀚(vczh)
            色婷婷久久久SWAG精品| 久久亚洲国产精品成人AV秋霞| 国产91久久综合| 久久精品国产亚洲αv忘忧草| 久久久一本精品99久久精品88| 国产产无码乱码精品久久鸭| 国内精品久久久久国产盗摄| 久久中文字幕人妻丝袜| 国内精品久久久久| 人妻无码久久精品| 99久久国产热无码精品免费久久久久| 青青热久久国产久精品 | 久久精品国产只有精品2020| 久久久精品人妻无码专区不卡| 亚洲AV日韩精品久久久久| 久久国产成人午夜AV影院| 伊人久久综合精品无码AV专区| 久久久久女教师免费一区| 久久精品成人免费网站| 亚洲精品高清国产一线久久| 日韩欧美亚洲综合久久| 久久久久无码精品国产app| 99久久精品影院老鸭窝| 亚洲精品无码久久久影院相关影片| 少妇被又大又粗又爽毛片久久黑人 | 久久亚洲综合色一区二区三区| 久久精品国产99国产精品亚洲| 久久久久久青草大香综合精品| 99久久婷婷国产综合精品草原| 亚洲色大成网站www久久九| 一级a性色生活片久久无少妇一级婬片免费放 | 久久天天躁狠狠躁夜夜2020老熟妇 | 久久久亚洲欧洲日产国码二区| 久久99这里只有精品国产| 婷婷久久五月天| 国内精品久久国产| 狠狠色狠狠色综合久久| 亚洲色婷婷综合久久| 国产精品免费福利久久| 国产成人无码久久久精品一| 精品久久久久久无码中文字幕一区|