{"rsdb":{"rid":"377688","subhead":"","postdate":"0","aid":"264256","fid":"97","uid":"1","topic":"1","content":"
\n

\u89e3\u91ca\u5668\u6a21\u5f0f\uff08Interpreter\uff09\uff1a<\/span><\/p> \n

\u3000\u3000\u4ece\u540d\u79f0\u4e0a\u6765\u770b\u770b\u8fd9\u4e2a\u6a21\u5f0f\uff0c\u4e2a\u4eba\u7684\u6700\u521d\u7406\u89e3\u201c\u89e3\u91ca\u5668\u201d\u548cGoogle\u7684\u4e2d\u82f1\u7ffb\u8bd1\u529f\u80fd\u7c7b\u4f3c\u3002\u5982\u679c\u6709\u4e00\u5929\u4f60\u53bb\u56fd\u5916\u65c5\u6e38\u53bb\u4e86\uff0c\u6bd4\u5982\u53bb\u7f8e\u56fd\u5427\uff0c\u7f8e\u56fd\u4eba\u662f\u8bb2\u82f1\u8bed\u7684\uff0c\u6211\u4eec\u662f\u8bb2\u6c49\u8bed\u7684\uff0c\u5982\u679c\u82f1\u8bed\u542c\u4e0d\u61c2\uff0c\u8bb2\u4e0d\u597d\uff0c\u4f30\u8ba1\u6c9f\u901a\u5c31\u5b8c\u86cb\u4e86\uff0c\u4e0d\u80fd\u6c9f\u901a\uff0c\u4f30\u8ba1\u73a9\u7684\u5c31\u5f88\u96be\u5c3d\u5174\u4e86\uff0c\u56e0\u4e3a\u6709\u5f88\u591a\u666f\u70b9\u7684\u89e3\u8bf4\u4f60\u53ef\u80fd\u4e0d\u660e\u767d\uff08\u6ca1\u6709\u4e2d\u6587\u7ffb\u8bd1\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u822c\u60c5\u51b5\u4f1a\u6709\u7684\uff09\u3002\u6240\u4ee5\u6211\u4eec\u9700\u8981\u4e00\u4e2a\u8f6f\u4ef6\uff0c\u53ef\u4ee5\u628a\u4e2d\u82f1\u6587\u4e92\u8bd1\uff0c\u90a3\u5f7c\u6b64\u5c31\u53ef\u4ee5\u66f4\u597d\u7684\u7406\u89e3\u5bf9\u65b9\u7684\u610f\u601d\uff0c\u6211\u611f\u89c9\u7ffb\u8bd1\u8f6f\u4ef6\u4e5f\u53ef\u4ee5\u79f0\u5f97\u4e0a\u662f\u89e3\u91ca\u5668\uff0c\u628a\u4f60\u4e0d\u61c2\u7684\u89e3\u91ca\u6210\u4f60\u80fd\u7406\u89e3\u7684\u3002\u6211\u4eec\u5199\u4ee3\u7801\uff0c\u9700\u8981\u7f16\u8bd1\u5668\u628a\u6211\u4eec\u5199\u7684\u4ee3\u7801\u7f16\u8bd1\u6210\u673a\u5668\u53ef\u4ee5\u7406\u89e3\u7684\u673a\u5668\u8bed\u8a00\uff0c\u4ece\u8fd9\u65b9\u9762\u6765\u8bb2\uff0cC#\u7684\u7f16\u8bd1\u5668\u4e5f\u662f\u4e00\u79cd\u89e3\u91ca\u5668\u3002<\/span><\/p> \n

\u89e3\u91ca\u5668\u6a21\u5f0f\u7684\u89d2\u8272\uff1a<\/span><\/p> \n

\u3000\u3000\"\" <\/span><\/span><\/p> \n

\u3000\u30001\uff09\u62bd\u8c61\u89e3\u91ca\u5668\uff08AbstractExpression\uff09\uff1a\u5b9a\u4e49\u89e3\u91ca\u5668\u7684\u63a5\u53e3\uff0c\u7ea6\u5b9a\u89e3\u91ca\u5668\u7684\u89e3\u91ca\u64cd\u4f5c\u3002\u5176\u4e2d\u7684Interpret\u63a5\u53e3\uff0c\u6b63\u5982\u5176\u540d\u5b57\u90a3\u6837\uff0c\u5b83\u662f\u4e13\u95e8\u7528\u6765\u89e3\u91ca\u8be5\u89e3\u91ca\u5668\u6240\u8981\u5b9e\u73b0\u7684\u529f\u80fd\u3002<\/span><\/p> \n

\u3000\u30002\uff09\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\uff08TermialExpression\uff09\uff1a\u5b9e\u73b0\u4e86\u62bd\u8c61\u8868\u8fbe\u5f0f\u89d2\u8272\u6240\u8981\u6c42\u7684\u63a5\u53e3\uff0c\u4e3b\u8981\u662f\u4e00\u4e2ainterpret()\u65b9\u6cd5\uff1b\u6587\u6cd5\u4e2d\u7684\u6bcf\u4e00\u4e2a\u7ec8\u7ed3\u7b26\u90fd\u6709\u4e00\u4e2a\u5177\u4f53\u7ec8\u7ed3\u8868\u8fbe\u5f0f\u4e0e\u4e4b\u76f8\u5bf9\u5e94\u3002\u6bd4\u5982\u6709\u4e00\u4e2a\u7b80\u5355\u7684\u516c\u5f0fR=R1+R2\uff0c\u5728\u91cc\u9762R1\u548cR2\u5c31\u662f\u7ec8\u7ed3\u7b26\uff0c\u5bf9\u5e94\u7684\u89e3\u6790R1\u548cR2\u7684\u89e3\u91ca\u5668\u5c31\u662f\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\u3002<\/span><\/p> \n

\u3000\u30003\uff09\u975e\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\uff08NonterminalExpression\uff09\uff1a\u6587\u6cd5\u4e2d\u7684\u6bcf\u4e00\u6761\u89c4\u5219\u90fd\u9700\u8981\u4e00\u4e2a\u5177\u4f53\u7684\u975e\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\uff0c\u975e\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\u4e00\u822c\u662f\u6587\u6cd5\u4e2d\u7684\u8fd0\u7b97\u7b26\u6216\u8005\u5176\u4ed6\u5173\u952e\u5b57\uff0c\u6bd4\u5982\u516c\u5f0fR=R1+R2\u4e2d\uff0c\u201c+\u201d\u5c31\u662f\u975e\u7ec8\u7ed3\u7b26\uff0c\u89e3\u6790\u201c+\u201d\u7684\u89e3\u91ca\u5668\u5c31\u662f\u4e00\u4e2a\u975e\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\u3002<\/span><\/p> \n

\u3000\u30004\uff09\u73af\u5883\u89d2\u8272\uff08Context\uff09\uff1a\u8fd9\u4e2a\u89d2\u8272\u7684\u4efb\u52a1\u4e00\u822c\u662f\u7528\u6765\u5b58\u653e\u6587\u6cd5\u4e2d\u5404\u4e2a\u7ec8\u7ed3\u7b26\u6240\u5bf9\u5e94\u7684\u5177\u4f53\u503c\uff0c\u6bd4\u5982R=R1+R2\uff0c\u6211\u4eec\u7ed9R1\u8d4b\u503c100\uff0c\u7ed9R2\u8d4b\u503c200\u3002\u8fd9\u4e9b\u4fe1\u606f\u9700\u8981\u5b58\u653e\u5230\u73af\u5883\u89d2\u8272\u4e2d\uff0c\u5f88\u591a\u60c5\u51b5\u4e0b\u6211\u4eec\u4f7f\u7528Map\u6765\u5145\u5f53\u73af\u5883\u89d2\u8272\u5c31\u8db3\u591f\u4e86\u3002<\/span><\/p> \n

\u3000\u3000\u6211\u4eec\u6f14\u793a\u4e00\u4e2a\u5224\u65ad\u4e14\u6216\u7684\u4f8b\u5b50\u3002<\/span> <\/p> \n

\n
 1<\/span> public<\/span> abstract<\/span> class<\/span> AbstractExpression\r\n<\/span> 2<\/span> {\r\n<\/span> 3<\/span>     public<\/span> abstract<\/span> bool<\/span> Interpret(string<\/span> context);\r\n<\/span> 4<\/span> }\r\n<\/span> 5<\/span> \r\n 6<\/span> public<\/span> class<\/span> TerminalExpression : AbstractExpression\r\n<\/span> 7<\/span> {\r\n<\/span> 8<\/span>     private<\/span> string<\/span> data;\r\n<\/span> 9<\/span> \r\n10<\/span>     public<\/span> TerminalExpression(string<\/span> data)\r\n<\/span>11<\/span>     {\r\n<\/span>12<\/span>         this<\/span>.data = data;\r\n<\/span>13<\/span>     }\r\n<\/span>14<\/span> \r\n15<\/span>     public<\/span> override<\/span> bool<\/span> Interpret(string<\/span> context)\r\n<\/span>16<\/span>     {\r\n<\/span>17<\/span>         return<\/span> data.Contains(context);\r\n<\/span>18<\/span>     }\r\n<\/span>19<\/span> }\r\n<\/span>20<\/span> \r\n21<\/span> public<\/span> class<\/span> OrExpression : AbstractExpression\r\n<\/span>22<\/span> {\r\n<\/span>23<\/span>     private<\/span> AbstractExpression expr1 = null<\/span>;\r\n<\/span>24<\/span>     private<\/span> AbstractExpression expr2 = null<\/span>;\r\n<\/span>25<\/span> \r\n26<\/span>     public<\/span> OrExpression(AbstractExpression expr1, AbstractExpression expr2)\r\n<\/span>27<\/span>     {\r\n<\/span>28<\/span>         this<\/span>.expr1 = expr1;\r\n<\/span>29<\/span>         this<\/span>.expr2 = expr2;\r\n<\/span>30<\/span>     }\r\n<\/span>31<\/span> \r\n32<\/span>     public<\/span> override<\/span> bool<\/span> Interpret(string<\/span> context)\r\n<\/span>33<\/span>     {\r\n<\/span>34<\/span>         return<\/span> expr1.Interpret(context) || expr2.Interpret(context);\r\n<\/span>35<\/span>     }\r\n<\/span>36<\/span> }\r\n<\/span>37<\/span> \r\n38<\/span> public<\/span> class<\/span> AndExpression : AbstractExpression\r\n<\/span>39<\/span> {\r\n<\/span>40<\/span>     private<\/span> AbstractExpression expr1 = null<\/span>;\r\n<\/span>41<\/span>     private<\/span> AbstractExpression expr2 = null<\/span>;\r\n<\/span>42<\/span> \r\n43<\/span>     public<\/span> AndExpression(AbstractExpression expr1, AbstractExpression expr2)\r\n<\/span>44<\/span>     {\r\n<\/span>45<\/span>         this<\/span>.expr1 = expr1;\r\n<\/span>46<\/span>         this<\/span>.expr2 = expr2;\r\n<\/span>47<\/span>     }\r\n<\/span>48<\/span> \r\n49<\/span>     public<\/span> override<\/span> bool<\/span> Interpret(string<\/span> context)\r\n<\/span>50<\/span>     {\r\n<\/span>51<\/span>         return<\/span> expr1.Interpret(context) || expr2.Interpret(context);\r\n<\/span>52<\/span>     }\r\n<\/span>53<\/span> }\r\n<\/span>54<\/span> \r\n55<\/span> public<\/span> class<\/span> Program\r\n<\/span>56<\/span> {\r\n<\/span>57<\/span>     \/\/<\/span>\u89c4\u5219\uff1aRobert \u548c John \u662f\u7537\u6027<\/span>\r\n58<\/span>     public<\/span> static<\/span> AbstractExpression GetMaleExpression()\r\n<\/span>59<\/span>     {\r\n<\/span>60<\/span>         AbstractExpression robert = new<\/span> TerminalExpression("<\/span>Robert<\/span>"<\/span>);\r\n<\/span>61<\/span>         AbstractExpression john = new<\/span> TerminalExpression("<\/span>John<\/span>"<\/span>);\r\n<\/span>62<\/span>         return<\/span> new<\/span> OrExpression(robert, john);\r\n<\/span>63<\/span>     }\r\n<\/span>64<\/span> \r\n65<\/span>     \/\/<\/span>\u89c4\u5219\uff1aJulie \u662f\u4e00\u4e2a\u5df2\u5a5a\u7684\u5973\u6027<\/span>\r\n66<\/span>     public<\/span> static<\/span> AbstractExpression GetMarriedWomanExpression()\r\n<\/span>67<\/span>     {\r\n<\/span>68<\/span>         AbstractExpression julie = new<\/span> TerminalExpression("<\/span>Julie<\/span>"<\/span>);\r\n<\/span>69<\/span>         AbstractExpression married = new<\/span> TerminalExpression("<\/span>Married<\/span>"<\/span>);\r\n<\/span>70<\/span>         return<\/span> new<\/span> AndExpression(julie, married);\r\n<\/span>71<\/span>     }\r\n<\/span>72<\/span> \r\n73<\/span>     public<\/span> static<\/span> void<\/span> Main(string<\/span>[] args)\r\n<\/span>74<\/span>     {\r\n<\/span>75<\/span>         AbstractExpression isMale = GetMaleExpression();\r\n<\/span>76<\/span>         AbstractExpression isMarriedWoman = GetMarriedWomanExpression();\r\n<\/span>77<\/span> \r\n78<\/span>         Console.WriteLine($"<\/span>John is male? {isMale.Interpret(<\/span>"<\/span>John"<\/span>)}<\/span>"<\/span>);\r\n<\/span>79<\/span>         Console.WriteLine($"<\/span>Julie is a married women? {isMarriedWoman.Interpret(<\/span>"<\/span>Married Julie"<\/span>)}<\/span>"<\/span>);\r\n<\/span>80<\/span>     }\r\n<\/span>81<\/span> }<\/pre> \n <\/div> \n 

\u3000\u3000\u8fd9\u91cc\u6211\u4eec\u53ef\u4ee5\u5f97\u51fa\uff1a\u89e3\u91ca\u5668\u6a21\u5f0f\u6709\u5f88\u597d\u7684\u6269\u5c55\u6a21\u5f0f\uff0c\u6216\u6b64\u65f6\u6211\u4eec\u5e0c\u671b\u80fd\u591f\u627e\u5230\u4e00\u4f4d\u7537\u58eb\u5df2\u5a5a\uff0c\u6211\u4eec\u53ea\u9700\u8981\u518d\u5199\u4e00\u4e2a\u975e\u7ec8\u7ed3\u7b26\u8868\u8fbe\u5f0f\u5373\u53ef\uff0c\u6613\u4e8e\u6269\u5c55\u3002\u6211\u4eec\u518d\u6765\u770b\u4e0b\u9762\u8fd9\u4e2a\u4f8b\u5b50\u3002<\/span><\/p> \n

\n
  1<\/span> \/\/<\/span> \u62bd\u8c61\u8868\u8fbe\u5f0f<\/span>\r\n  2<\/span> public<\/span> abstract<\/span> class<\/span> Expres","orderid":"0","title":"\u8bbe\u8ba1\u6a21\u5f0f-\u884c\u4e3a\u578b-\u89e3\u91ca\u5668\u6a21\u5f0f(\u4e00)","smalltitle":"","mid":"0","fname":"\u5206\u6790\u8bbe\u8ba1","special_id":"0","bak_id":"0","info":"0","hits":"428","pages":"3","comments":"0","posttime":"2019-10-11 11:20:02","list":"1570764002","username":"admin","author":"","copyfrom":"","copyfromurl":"","titlecolor":"","fonttype":"0","titleicon":"0","picurl":"https:\/\/www.cppentry.com\/upload_files\/","ispic":"0","yz":"1","yzer":"","yztime":"0","levels":"0","levelstime":"0","keywords":"\u8bbe\u8ba1\u6a21\u5f0f<\/A> \u884c\u4e3a<\/A> \u89e3\u91ca<\/A> \u6a21\u5f0f<\/A>","jumpurl":"","iframeurl":"","style":"","template":"a:3:{s:4:\"head\";s:0:\"\";s:4:\"foot\";s:0:\"\";s:8:\"bencandy\";s:0:\"\";}","target":"0","ip":"14.17.22.32","lastfid":"0","money":"0","buyuser":"","passwd":"","allowdown":"","allowview":"","editer":"","edittime":"0","begintime":"0","endtime":"0","description":"\u8bbe\u8ba1\u6a21\u5f0f-\u884c\u4e3a\u578b-\u89e3\u91ca\u5668\u6a21\u5f0f","lastview":"1714689446","digg_num":"0","digg_time":"0","forbidcomment":"0","ifvote":"0","heart":"","htmlname":"","city_id":"0"},"page":"1"}