青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-91  評(píng)論-137  文章-0  trackbacks-0
  1 #pragma once
  2 #include "..\String\NWString.h"
  3 #include "..\AutoPtr\AutoPtr.h"
  4 #include "..\Common\List.h"
  5 
  6 #define Type_Match_Content                                                0        // 匹配值
  7 #define Type_Match_Rule                                                    1        // 匹配一條表達(dá)式
  8 #define Type_Or                                                           -1
  9 #define Type_Choose                                                       -2
 10 #define Type_Loop_0                                                       -3
 11 #define Type_Loop_1                                                       -4
 12 #define Type_Opt                                                       -5
 13 #define Type_LQ                                                           -6
 14 #define Type_RQ                                                           -7
 15 
 16 class Precept
 17 {
 18 public:
 19     int Left;
 20     List<int> Right;
 21 
 22     Precept() : Left(0){}
 23     Precept(int L,List<int> R) : Left(L),Right(R){}
 24 
 25     // +Precept
 26     friend NAutoPtr<Precept> operator+(NAutoPtr<Precept> P)
 27     {
 28         NAutoPtr<Precept> p = new Precept;
 29         p->Right.Add(Type_Loop_1);
 30         p->Right.Add(Type_LQ);
 31         p->Right.Add(P->Right);
 32         p->Right.Add(Type_RQ);
 33         return p;
 34     }
 35 
 36     // Precept + Precept
 37     friend NAutoPtr<Precept> operator+(NAutoPtr<Precept> P1,NAutoPtr<Precept> P2)
 38     {
 39         NAutoPtr<Precept> p = new Precept;
 40         p->Right.Add(P1->Right);
 41         p->Right.Add(P2->Right);
 42         return p;
 43     }
 44 
 45     // *Precept
 46     friend NAutoPtr<Precept> operator*(NAutoPtr<Precept> P)
 47     {
 48         NAutoPtr<Precept> p = new Precept;
 49         p->Right.Add(Type_Loop_0);
 50         p->Right.Add(Type_LQ);
 51         p->Right.Add(P->Right);
 52         p->Right.Add(Type_RQ);
 53         return p;
 54     }
 55 
 56     // Precept | Precept
 57     friend NAutoPtr<Precept> operator|(NAutoPtr<Precept> P1,NAutoPtr<Precept> P2)
 58     {
 59         NAutoPtr<Precept> p = new Precept;
 60         p->Right.Add(Type_LQ);
 61         p->Right.Add(P1->Right);
 62         p->Right.Add(Type_RQ);
 63         p->Right.Add(Type_Or);
 64         p->Right.Add(Type_LQ);
 65         p->Right.Add(P2->Right);
 66         p->Right.Add(Type_RQ);
 67         return p;
 68     }
 69 };
 70 
 71 class NV
 72 {
 73 public:
 74     NWString Content;
 75     int Type;                // Content Or Rule
 76     int Index;                // Index Of this
 77 
 78     NV() : Index(0),Type(0){}
 79     NV(NWString C,NWString R,int T) : Content(C),Type(T){}
 80 
 81     BOOL operator==(NV V)
 82     {
 83         return Content == V.Content && Type == V.Type;
 84     }
 85 
 86     // Left->V
 87     NAutoPtr<Precept> SetRight(NAutoPtr<NV> V)
 88     {
 89         NAutoPtr<Precept> p = new Precept;
 90         p->Left = Index;
 91         p->Right.Add(V->Index);
 92         return p;
 93     }
 94 
 95     // Left->Precept
 96     NAutoPtr<Precept> SetRight(NAutoPtr<Precept> P)
 97     {
 98         NAutoPtr<Precept> p = new Precept;
 99         p->Left = Index;
100         p->Right.Add(P->Right);
101         return p;
102     }
103 
104     // this + NV
105     NAutoPtr<Precept> operator+(NAutoPtr<NV> V)
106     {
107         NAutoPtr<Precept> p = new Precept;
108         p->Right.Add(Index);
109         p->Right.Add(V->Index);
110         return p;
111     }
112 
113     // NV + NV
114     friend NAutoPtr<Precept> operator+(NAutoPtr<NV> V1,NAutoPtr<NV> V2)
115     {
116         NAutoPtr<Precept> p = new Precept;
117         p->Right.Add(V1->Index);
118         p->Right.Add(V2->Index);
119         return p;
120     }
121 
122     // Precept + NV
123     friend NAutoPtr<Precept> operator+(NAutoPtr<Precept> P,NAutoPtr<NV> V)
124     {
125         NAutoPtr<Precept> p = new Precept;
126         p->Right.Add(P->Right);
127         p->Right.Add(V->Index);
128         return p;
129     }
130 
131     // NV + Precept
132     friend NAutoPtr<Precept> operator+(NAutoPtr<NV> V,NAutoPtr<Precept> P)
133     {
134         NAutoPtr<Precept> p = new Precept;
135         p->Right.Add(V->Index);
136         p->Right.Add(P->Right);
137         return p;
138     }
139 
140     // this | NV
141     NAutoPtr<Precept> operator|(NAutoPtr<NV> V)
142     {
143         NAutoPtr<Precept> p = new Precept;
144         p->Right.Add(Index);
145         p->Right.Add(Type_Or);
146         p->Right.Add(V->Index);
147         return p;
148     }
149 
150     // NV | NV
151     friend NAutoPtr<Precept> operator|(NAutoPtr<NV> V1,NAutoPtr<NV> V2)
152     {
153         NAutoPtr<Precept> p = new Precept;
154         p->Right.Add(V1->Index);
155         p->Right.Add(Type_Or);
156         p->Right.Add(V2->Index);
157         return p;
158     }
159 
160     // Precept | NV
161     friend NAutoPtr<Precept> operator|(NAutoPtr<Precept> P,NAutoPtr<NV> V)
162     {
163         NAutoPtr<Precept> p = new Precept;
164         p->Right.Add(Type_LQ);
165         p->Right.Add(P->Right);
166         p->Right.Add(Type_RQ);
167         p->Right.Add(Type_Or);
168         p->Right.Add(V->Index);
169         return p;
170     }
171 
172     // NV | Precept
173     friend NAutoPtr<Precept> operator|(NAutoPtr<NV> V,NAutoPtr<Precept> P)
174     {
175         NAutoPtr<Precept> p = new Precept;
176         p->Right.Add(V->Index);
177         p->Right.Add(Type_Or);
178         p->Right.Add(Type_LQ);
179         p->Right.Add(P->Right);
180         p->Right.Add(Type_RQ);
181         return p;
182     }
183 
184     // +NV
185     friend NAutoPtr<Precept> operator+(NAutoPtr<NV> V)
186     {
187         NAutoPtr<Precept> p = new Precept;
188         p->Right.Add(Type_Loop_1);
189         p->Right.Add(V->Index);
190         return p;
191     }
192 
193     // *NV
194     friend NAutoPtr<Precept> operator*(NAutoPtr<NV> V)
195     {
196         NAutoPtr<Precept> p = new Precept;
197         p->Right.Add(Type_Loop_0);
198         p->Right.Add(V->Index);
199         return p;
200     }
201 
202     // Opt(NV)
203     friend NAutoPtr<Precept> Opt(NAutoPtr<NV> V)
204     {
205         NAutoPtr<Precept> p = new Precept;
206         p->Right.Add(Type_Opt);
207         p->Right.Add(V->Index);
208         return p;
209     }
210 
211     // Opt(Precept)
212     friend NAutoPtr<Precept> Opt(NAutoPtr<Precept> P)
213     {
214         NAutoPtr<Precept> p = new Precept;
215         p->Right.Add(Type_Opt);
216         p->Right.Add(Type_LQ);
217         p->Right.Add(P->Right);
218         p->Right.Add(Type_RQ);
219         return p;
220     }
221 };
222 

說(shuō)明:
Precept類(lèi)主要用于保存一條產(chǎn)生式
NV類(lèi)則用來(lái)保存一個(gè)終結(jié)符或非終結(jié)符
對(duì)于以上操作符重載后你就可以像書(shū)寫(xiě)文法那樣來(lái)寫(xiě)你的代碼了.
比如你要寫(xiě)一條產(chǎn)生式:Program->aaa [bbb+ + ccc*] | bbb+ | [ccc]
那么你可以書(shū)寫(xiě)以下代碼來(lái)生成這條產(chǎn)生式:
 1     NParserDFA DFA;
 2     NAutoPtr<NV> Program = new NV(L"program",L"",Type_Match_Content);
 3     NAutoPtr<NV> aaa = new NV(L"aaa",L"",Type_Match_Content);
 4     NAutoPtr<NV> bbb = new NV(L"bbb",L"",Type_Match_Content);
 5     NAutoPtr<NV> ccc = new NV(L"ccc",L"",Type_Match_Content);
 6     // 以上生成終結(jié)符和非終結(jié)符
 7     DFA.AddVn(Program);
 8     DFA.AddVt(aaa);
 9     DFA.AddVt(bbb);
10     DFA.AddVt(ccc);
11     // 將終結(jié)符和非終結(jié)符添加到表中
12     DFA.SetStart(Program);
13     // 設(shè)置起始非終結(jié)符
14     List<NAutoPtr<Precept>> PreceptList;
15     NAutoPtr<Precept> p;
16     // Program->aaa [bbb+ + ccc*] | bbb+ | [ccc]
17     p = Program->SetRight(aaa + Opt(+bbb + *ccc) | +bbb | Opt(ccc));
18     // 添加產(chǎn)生式
19     PreceptList.Add(p);

編譯你的分析器的同時(shí)編譯器就為你檢查了文法有無(wú)書(shū)寫(xiě)錯(cuò)誤,并且再?gòu)?fù)雜的表達(dá)式都能成功被編譯.
posted on 2010-07-22 23:23 lwch 閱讀(1254) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): NScript
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美va天堂| 一区二区三区|亚洲午夜| 亚洲国产女人aaa毛片在线| 久久丁香综合五月国产三级网站| 国产精品卡一卡二卡三| 久久岛国电影| 榴莲视频成人在线观看| 亚洲一区二区精品在线观看| 午夜精品视频在线观看| 在线观看日韩专区| 99精品国产在热久久婷婷| 国产精品素人视频| 欧美高清不卡| 国产精品男gay被猛男狂揉视频| 久久久青草青青国产亚洲免观| 免费在线观看精品| 欧美在线你懂的| 欧美精品九九| 久久亚洲精品视频| 国产精品国产自产拍高清av王其| 麻豆精品网站| 欧美一区二区三区视频免费播放 | 亚洲综合成人婷婷小说| 久久精品视频一| 亚洲男同1069视频| 欧美jjzz| 久久精品在线观看| 欧美日韩综合网| 亚洲电影欧美电影有声小说| 国产精品一区二区久久久久| 亚洲片区在线| 亚洲福利一区| 性xx色xx综合久久久xx| 99成人精品| 久久夜精品va视频免费观看| 欧美在线啊v| 欧美丝袜一区二区三区| 亚洲国产成人久久| 精品不卡一区| 欧美一区免费| 午夜影院日韩| 国产精品久久久久久久9999| 亚洲人成网在线播放| 亚洲国产欧美一区| 久久蜜臀精品av| 久久综合婷婷| 狠狠狠色丁香婷婷综合久久五月| 亚洲一区免费| 亚洲欧洲av一区二区| 欧美日韩国产一区二区| 亚洲黄色视屏| 一本久道久久综合狠狠爱| 欧美成人一区在线| 欧美成人小视频| 在线观看一区欧美| 久久久精品日韩| 久久免费午夜影院| 一区视频在线播放| 久久视频在线视频| 国产一区二区三区自拍| 亚洲夜间福利| 亚洲欧美日韩国产一区| 欧美日韩第一页| 亚洲女性裸体视频| 亚洲国产小视频在线观看| 久久久噜噜噜久久中文字免| 狼人天天伊人久久| 91久久精品国产91久久性色tv| 久久久久久伊人| 久久在线免费观看| 伊人久久综合97精品| 久久综合色影院| 欧美国产精品一区| 亚洲美女在线观看| 欧美日韩一区视频| 亚洲欧美激情精品一区二区| 久久国产精品久久久久久电车| 国产伦精品一区二区三区免费迷| 亚洲欧美日韩国产一区二区三区| 久久精品一区二区国产| 在线观看精品一区| 欧美剧在线免费观看网站| 亚洲美女性视频| 欧美一区在线视频| 亚洲黄色性网站| 欧美精品一区二区三区蜜臀| 一本色道久久综合| 久久理论片午夜琪琪电影网| 亚洲国产精品悠悠久久琪琪| 欧美va亚洲va日韩∨a综合色| 亚洲伦理精品| 久久精品国产综合精品| 亚洲国产日韩一区| 欧美体内谢she精2性欧美 | 国产精品一区二区久久国产| 欧美专区福利在线| 亚洲激情不卡| 亚洲欧美制服另类日韩| 曰韩精品一区二区| 国产精品扒开腿爽爽爽视频| 久久激五月天综合精品| 亚洲精品欧洲| 久久综合色88| 亚洲欧美日韩精品久久久久| 亚洲国产成人av好男人在线观看| 欧美丝袜一区二区| 久久一区亚洲| 午夜精品视频在线观看一区二区| 亚洲国产精品一区二区久| 午夜欧美精品| 99re6热只有精品免费观看 | 美女视频黄免费的久久| 亚洲一区二区三区四区视频| 尹人成人综合网| 国产精品久久久久久久久免费桃花| 久久久99免费视频| 亚洲免费中文| 99精品欧美一区二区蜜桃免费| 老巨人导航500精品| 亚洲欧美日韩在线播放| 亚洲老板91色精品久久| 极品日韩av| 国产精品一区在线观看| 欧美日韩综合在线| 欧美日韩ab片| 欧美激情一二三区| 久久综合伊人| 欧美亚洲视频在线观看| 亚洲裸体在线观看| 亚洲精品偷拍| 黄色精品在线看| 国产欧美一区二区精品性| 欧美日韩另类丝袜其他| 欧美国产欧美亚洲国产日韩mv天天看完整| 香蕉视频成人在线观看| 9l国产精品久久久久麻豆| 亚洲国产精品精华液2区45| 久久香蕉国产线看观看av| 欧美伊人久久久久久午夜久久久久| 中文久久精品| 亚洲社区在线观看| 亚洲天堂av在线免费| 日韩视频在线一区| 99国产精品久久久久久久| 亚洲欧洲精品一区二区三区波多野1战4| 国产伊人精品| 韩国精品久久久999| 极品尤物久久久av免费看| 国精品一区二区三区| 国产一区二区高清| 国产亚洲精品久久久久动| 国产欧美一区二区三区在线看蜜臀 | 欧美一区二区三区免费在线看| 亚洲午夜日本在线观看| 亚洲性感美女99在线| 一区二区三区在线视频免费观看| 夜夜狂射影院欧美极品| 亚洲图片欧美午夜| 西西裸体人体做爰大胆久久久| 性欧美xxxx大乳国产app| 香蕉免费一区二区三区在线观看| 欧美在线一二三| 麻豆精品在线视频| 欧美精品免费播放| 欧美日韩不卡合集视频| 欧美系列电影免费观看| 国产精品一区在线播放| 在线观看日韩| 99精品视频免费观看| 亚洲欧美日韩一区二区三区在线| 久久成人精品无人区| 欧美成人精品1314www| 亚洲三级毛片| 亚洲免费在线视频| 免费在线观看日韩欧美| 国产精品99免费看| 精品999在线观看| 一级成人国产| 久久久精品2019中文字幕神马| 欧美国产日韩一区| 亚洲一卡久久| 免费日韩精品中文字幕视频在线| 欧美日韩午夜在线视频| 国产一区二区日韩精品欧美精品| 亚洲人午夜精品免费| 亚洲欧美在线免费观看| 欧美va天堂va视频va在线| 亚洲精品男同| 欧美在线播放一区二区| 欧美剧在线观看| 伊人久久久大香线蕉综合直播| 在线视频精品一区| 免费日韩av| 亚洲天堂av图片| 免费不卡在线观看av| 国产欧美va欧美va香蕉在| 日韩五码在线| 久热爱精品视频线路一| 中国av一区| 欧美老女人xx|