• <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>
            隨筆-341  評論-2670  文章-0  trackbacks-0
                經過三個小時的努力,一個供調試用的模擬器終于做出來了。對于一份語法說明來講,我們需要提供調試器,一直到調試完了才生成代碼,這樣比較容易找到問題。同時為了驗證自己的那個設計,于是做了一個調試器出來。這個調試器使用了這篇文章里的數據結構文件以及文法文件,以及使用了這篇文章里開發的一個樹到圖的轉換程序,成功得到結果!

                模擬器的Demo輸入3個文件,依次是數據結構文件、文法分析文件以及一個被分析的字符串,內容如下:
                數據結構文件:
             1 enum BinopType
             2 {
             3   Plus
             4   Minus
             5   Mul
             6   Div
             7 }
             8 enum SinopType
             9 {
            10   Negative
            11 }
            12 
            13 class Expression
            14 {
            15 }
            16 class Number Expression
            17 {
            18   double        Number
            19 }
            20 class Binop Expression
            21 {
            22   BinopType        Operator
            23   Expression^        LeftOp
            24   Expression^        RightOp
            25 }
            26 class Sinop Expression
            27 {
            28   SinopType        Operator
            29   Expression^        Operand
            30 }
            31 class Invoke Expression
            32 {
            33   string        Name
            34   list<Expression^>    Parameters
            35 }

                文法分析文件:
             1 num="\d+(.\d+)?"        ;
             2 ident="[a-zA-Z_]\w*"        ;
             3 plus="\+"            ;
             4 minus="\-"            ;
             5 mul="\*"            ;
             6 div="/"                ;
             7 leftbrace="\("            ;
             8 rightbrace="\)"            ;
             9 comma=","            ;
            10 discard="\s+"            ;
            11 
            12 Number^            factor        =num{Number}                                ;
            13 Sinop^            factor        =minus{Operator=Negative} factor{Operand}                ;
            14 Expression^        factor        =leftbrace exp{#result} rightbrace                    ;
            15 Invoke^            factor        =ident{Name}[leftbrace param_list{Parameters} rightbrace]        ;
            16 Expression^        term        =factor{#result}                            ;
            17 Binop^             term        =term{LeftOp} (mul{Operator=Mul}|div{Operator=Div}) factor{RightOp}    ;
            18 Expression^        exp        =term{#result}                                ;
            19 Binop^            exp        =exp{LeftOp} (plus{Operator=Plus}|minus{Operator=Minus}) term{RightOp}    ;
            20 list<Expression^>    param_list    =exp{#insert} [comma param_list{#result}]                ;
            21 Expression^        program        =exp{#result}                                ;

                被分析字符串:
            1 (1+sin(2))*(sin(log(2,3))+4)

                分析結束以后,控制臺程序打印出結果以及圖片:

              1 --------------------------------------------------------------------------------
              2 正在分析數據結構文件
              3 --------------------------------------------------------------------------------
              4 enum BinopType
              5 {
              6   Plus
              7   Minus
              8   Mul
              9   Div
             10 }
             11 enum SinopType
             12 {
             13   Negative
             14 }
             15 class Expression
             16 {
             17 }
             18 class Number Expression
             19 {
             20   double Number
             21 }
             22 class Binop Expression
             23 {
             24   BinopType Operator
             25   Expression^ LeftOp
             26   Expression^ RightOp
             27 }
             28 class Sinop Expression
             29 {
             30   SinopType Operator
             31   Expression^ Operand
             32 }
             33 class Invoke Expression
             34 {
             35   string Name
             36   list<Expression^> Parameters
             37 }
             38 --------------------------------------------------------------------------------
             39 正在分析文法定義文件
             40 --------------------------------------------------------------------------------
             41 lexical inferences {
             42   lexical inference {
             43     num
             44     \d+(.\d+)?
             45   }
             46   lexical inference {
             47     ident
             48     [a-zA-Z_]\w*
             49   }
             50   lexical inference {
             51     plus
             52     \+
             53   }
             54   lexical inference {
             55     minus
             56     \-
             57   }
             58   lexical inference {
             59     mul
             60     \*
             61   }
             62   lexical inference {
             63     div
             64     /
             65   }
             66   lexical inference {
             67     leftbrace
             68     \(
             69   }
             70   lexical inference {
             71     rightbrace
             72     \)
             73   }
             74   lexical inference {
             75     comma
             76     ,
             77   }
             78   lexical inference {
             79     discard
             80     \s+
             81   }
             82 }
             83 syntax inferences {
             84   rule {
             85     Number^
             86     factor
             87     num{Number }
             88   }
             89   rule {
             90     Sinop^
             91     factor
             92     sequence {
             93       minus{Operator = Negative}
             94       factor{Operand }
             95     }
             96   }
             97   rule {
             98     Expression^
             99     factor
            100     sequence {
            101       leftbrace
            102       exp{#result }
            103       rightbrace
            104     }
            105   }
            106   rule {
            107     Invoke^
            108     factor
            109     sequence {
            110       ident{Name }
            111       optional {
            112         sequence {
            113           leftbrace
            114           param_list{Parameters }
            115           rightbrace
            116         }
            117       }
            118     }
            119   }
            120   rule {
            121     Expression^
            122     term
            123     factor{#result }
            124   }
            125   rule {
            126     Binop^
            127     term
            128     sequence {
            129       term{LeftOp }
            130       branch {
            131         mul{Operator = Mul}
            132         div{Operator = Div}
            133       }
            134       factor{RightOp }
            135     }
            136   }
            137   rule {
            138     Expression^
            139     exp
            140     term{#result }
            141   }
            142   rule {
            143     Binop^
            144     exp
            145     sequence {
            146       exp{LeftOp }
            147       branch {
            148         plus{Operator = Plus}
            149         minus{Operator = Minus}
            150       }
            151       term{RightOp }
            152     }
            153   }
            154   rule {
            155     list<Expression^>
            156     param_list
            157     sequence {
            158       exp{#insert }
            159       optional {
            160         sequence {
            161           comma
            162           param_list{#result }
            163         }
            164       }
            165     }
            166   }
            167   rule {
            168     Expression^
            169     program
            170     exp{#result }
            171   }
            172 }
            173 --------------------------------------------------------------------------------
            174 正在構造語法分析器
            175 --------------------------------------------------------------------------------
            176 --------------------------------------------------------------------------------
            177 正在進行語法分析
            178 --------------------------------------------------------------------------------
            179 --------------------------------------------------------------------------------
            180 以下是分析結果1/1
            181 分析結果的圖片保存在計算器表達式[0].bmp。
            182 --------------------------------------------------------------------------------
            183 <DATA> = {
            184   LeftOp = {
            185     LeftOp = {
            186       Number = 1
            187     }
            188     Operator = Plus
            189     RightOp = {
            190       Name = sin
            191       Parameters = {
            192         <DATA> = {
            193           Number = 2
            194         }
            195       }
            196     }
            197   }
            198   Operator = Mul
            199   RightOp = {
            200     LeftOp = {
            201       Name = sin
            202       Parameters = {
            203         <DATA> = {
            204           Name = log
            205           Parameters = {
            206             <DATA> = {
            207               Number = 2
            208             }
            209             <DATA> = {
            210               Number = 3
            211             }
            212           }
            213         }
            214       }
            215     }
            216     Operator = Plus
            217     RightOp = {
            218       Number = 4
            219     }
            220   }
            221 }
            posted on 2008-09-14 07:22 陳梓瀚(vczh) 閱讀(1837) 評論(1)  編輯 收藏 引用 所屬分類: 腳本技術

            評論:
            # re: 自定義數據結構的語法分析器成功! 2008-09-14 07:31 | Lnn
            強啊!  回復  更多評論
              
            久久精品国产亚洲av高清漫画| 深夜久久AAAAA级毛片免费看| 精品综合久久久久久88小说| 国产精品久久午夜夜伦鲁鲁| 久久亚洲欧美国产精品| 欧美午夜精品久久久久免费视| 久久亚洲国产最新网站| 久久婷婷人人澡人人| 精品久久久无码中文字幕天天| 色偷偷888欧美精品久久久| 久久久久久久综合日本亚洲| 久久一日本道色综合久久| 东京热TOKYO综合久久精品| 国内精品久久久久久野外| 国产午夜久久影院| 99久久精品免费| 久久久久久国产a免费观看黄色大片 | 久久久免费精品re6| 国产精品一区二区久久国产| 亚洲AV无码一区东京热久久| 久久久久久午夜成人影院| 久久九九青青国产精品| 欧美国产成人久久精品| 日本人妻丰满熟妇久久久久久| 精品久久久久久中文字幕人妻最新| 国产精品久久久久久久| 狠狠色丁香久久综合五月| 久久精品国产日本波多野结衣| 久久人人爽人人爽人人片AV东京热 | 久久久久久精品免费免费自慰| 久久精品国产久精国产果冻传媒| 亚洲精品白浆高清久久久久久| 69国产成人综合久久精品| 香蕉久久影院| 无码日韩人妻精品久久蜜桃 | 久久SE精品一区二区| 亚洲午夜久久久精品影院| 久久亚洲AV成人无码| www亚洲欲色成人久久精品| 中文字幕久久波多野结衣av| 日本精品久久久中文字幕 |