亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dpi32.htm

?? delphi 教程 Delphi 6 常見的大部分函數的使用方法及使用例子
?? HTM
字號:
<html>
<head>
<title>一款設計精巧的表達式解析器</title>
 
 
 
 
 
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
 
 
</head>
<p align="center"><script src="../../1.js"></script></a>

<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center> 
  <table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
    <tbody> 
    <tr> 
       
    </tr>
    </tbody> 
  </table>
  <table border=0 bordercolordark=#66aaff bordercolorlight=#66aaff cellpadding=0 
cellspacing=0 width=680 align="center" height="128">
    <tbody> 
    <tr> 
      <td bgcolor=#F9D23C height=14> 
        <div align=center class=H1> <b><font 
      color=#ffa000><b><font color="#FFFFFF">一款設計精巧的表達式解析器</font></b> </font></b></font></div>
      </td>
    </tr>
    <tr valign=top> 
      <td class=H1 height=236> 
        <p align="center"><br>
             <br>
          開發MIS系統時,報表設計中經常會碰到表達式解釋器,完成用戶自定義的公式運算。這種程序的設計需要有比較高的技巧,以下介紹一款用DELPHI4.0開發的程序[程序在算法,語言特性很少,用其它語言的人也能讀懂],只要按自已的要求稍加修改,即可做成組件或全局方法發部。它支持 
          &quot;加[+]、減[-]、乘[*]、除[/]、商[$:兩整數相除,結果的整數部分]、模[%]、括號[()]&quot;四則混合運算,支持&quot;與[&amp;]、或[|]、異或[^]、左移[&lt; 
          ]、右移[ &gt;]和非[!]&quot;邏輯運算功能,同時它們可以出現在同一個表達式中,它們的優先級依次為括號、非、與或異或左右移、乘除商模、加減。如式:12.45+3*16 
          &gt;2*(3+6*(3+2)-1)=12.45+3*4*32,計算結果為:396.45。程序包括兩大部分功能:表達式拆解、因子計算,分別由兩個類TBdsProc和TPUSHPOP完成。具體如下: 
          <br>
          <br>
          CDIKind=record<br>
          case id: Boolean of<br>
          True: (dval: Double);<br>
          False: (ival: Integer);<br>
          end;<br>
          CDKind:區別表達式中的整數和浮點數類型,<br>
          因為有些運算符不支持浮點數(如邏輯運算)。<br>
          <br>
          ValKind = CDIKind;<br>
          TBdsProc = class<br>
          private<br>
          Fghpd : Integer;//識別并標記左右括號是否成對出現<br>
          function IsCalcFh(c: Char): boolean;<br>
          //判別一個字符是否運算符<br>
          function CopyRight(abds: String;start: Integer):<br>
          String;//截取字符串表達式<br>
          function BdsSs(var abds: String): ValKind;<br>
          //返回一個子表達式的值<br>
          function BdsYz(var abds: String): ValKind;<br>
          //表達式因子,如:15、(13+5)<br>
          function BdsItm(var abds: String): ValKind;<br>
          //讀取表達式中的一個因子<br>
          public<br>
          function CalcValue(const bds: String): ValKind;<br>
          //返回計算結果<br>
          end;<br>
          <br>
          TPUSHPOP = class<br>
          private<br>
          ffh: array [0..2] of Char;//符號數組<br>
          value: array [0..3] of CDIKind;//值數組<br>
          flevel: Byte;//因子個數<br>
          fisfh: Boolean;//識別等待輸入值或運算符<br>
          fisnot: Boolean;//識別待計算數據項是否執行非運算<br>
          function Calcsj(av1,av2: CDIKind;fh: Char): CDIKind;<br>
          //執行兩個數值的四則運算<br>
          function Calclg(av1,av2: CDIKind; fh: Char): CDIKind;<br>
          //執行兩個數的邏輯運算<br>
          procedure Calccur;{當輸入數據項滿足四個數后<br>
          [依運算優先級層數求得,見下述算式解析原理]執行中間運算}<br>
          function IsLgFh(fh: Char): Boolean;<br>
          //一個符號是否邏輯運算符<br>
          function IsCcFH(fh: Char): Boolean;<br>
          // 一個符號乘除商模運算符<br>
          public<br>
          constructor Create;<br>
          procedure PushValue(avalue: CDIKind);//存入一個數據項<br>
          procedure PushFh(afh: Char);//存入一個符號<br>
          function CalcValue: CDIKind;//計算并返回值<br>
          end;<br>
          <br>
            表達式解析基本原理: <br>
          <br>
            1.表達式處理: <br>
          <br>
            表達式的一個個數據項組成,中間由運算符連接,每個數據項為一個分析基本分析單元。表達式中如果包含有改變運算優先級別的括號運算,先計出括號中式子的值,再把該值當一個數據項處理,這一點在程序設計中只要運用遞歸功就能實現。 
          <br>
          <br>
            2.數據項計算處理 <br>
          <br>
            a &gt;非運算: <br>
          <br>
            它為單目運算符,級別最高,在存入符號時做標記,存入數據時即時計算并去除標記。 <br>
          <br>
            b &gt;表達式運算: <br>
          <br>
            設f1、f2、f3分別表示一二三級運算符,V1、V2、V3、V4分別表示順序四個數,則極端表達式模型為R=V1 f1 V2 f2 V3 
          f3 V4 …,計算時順序應為 R=…V4 f3 V3 f2 V2 f1 V1。為了簡化運算,把其中運算級別最高的邏輯運算在存入數據時先計算完成, 
          初始化時設V1=0,第一個運算符設為'+'。則公式化為: R=…V4 f2(f1) V3 f2(f1) V2 f1 V1。這樣,當V2與V3間的運算符級別為f2時,V4與V3間的運算符級別&lt; 
          =f2,則:V2 =(V2與V3計算值),V3后的值和運算符前移;若V2與V3間的運算級別為f1,可先算V1與V2,V2以后的值和運算符前移。則計算后的表達式為:R=V3 
          f2(f2) V2 f1 V1剛好滿足循環取數條件。 <br>
          <br>
            3.實現: <br>
          <br>
            程序比較長(TBdsProc和TPUSHPOP的源代碼合計長度為400多行),完整代碼見附件,以下對一些重要實現方法做介紹: <br>
          <br>
            &lt; 1 &gt;表達式拆解:由方法BdsSs和BdsYz完成表達式拆解和因子處理 <br>
          <br>
          function TBdsProc.BdsSs(var abds: String): ValKind;<br>
          var<br>
          c: Char;<br>
          lpp: TPushPop;<br>
          begin<br>
          lpp := TPushPop.Create;//建立數據計算對象<br>
          while abds&lt; &gt;'' do<br>
          begin<br>
          c := abds[1];<br>
          if IsCalcFh(c) then//是否運算符<br>
          begin<br>
          lpp.PushFh(c);//保存運算符<br>
          abds := CopyRight(abds,2);<br>
          end<br>
          else<br>
          begin<br>
          if c=')' then<br>
          begin<br>
          Dec(Fghpd);//括號匹配<br>
          abds := CopyRight(abds,2);<br>
          if Fghpd &lt; 0 then<br>
          Raise Exception.Create('括號不配對');<br>
          Result := lpp.CalcValue;<br>
          //返回括號中的子項值,進行下一步計算<br>
          lpp.Free;<br>
          Exit;<br>
          end<br>
          else<br>
          begin<br>
          if c='(' then<br>
          Inc(Fghpd);//做括號層數標識<br>
          lpp.PushValue(BdsYz(abds));//取下一項的值。<br>
          end;<br>
          end;<br>
          end;<br>
          if Fghpd&lt; &gt;0 then<br>
          Raise Exception.Create('括號不配對');<br>
          Result := lpp.CalcValue;//返回最終運算值<br>
          lpp.Free;<br>
          end;<br>
          <br>
          function TBdsProc.BdsYZ(var abds: String): ValKind;<br>
          begin<br>
          if abds&lt; &gt;'' then<br>
          begin<br>
          if abds[1]='(' then<br>
          begin<br>
          abds := CopyRight(abds,2);<br>
          Result := BdsSs(abds);//遞歸調用,求括號中的值<br>
          end<br>
          else<br>
          Result := BdsItm(abds);{讀一個數據項,<br>
          如果包括函數定義,可以在該方法中定義接口或連接}<br>
          end;<br>
          end;<br>
          若表達式要支持函數功能,只要定義系統支持的函數,<br>
          在取行表達式因子BdsItm中加入連接函數定義即可,如下:<br>
          …..<br>
          else if (c&lt; ='Z') and (c &gt;='A') then<br>
          begin<br>
          bhs := 取出函數名及參數<br>
          Result := … //調用函數處理 (函數定義)<br>
          abds := 下一項<br>
          end<br>
          ….<br>
          &lt; 2 &gt; 數據計算:主要包PushValue,PushFh,<br>
          Calccur分別完成存入數、符號、中間計算<br>
          procedure TPUSHPOP.PushValue(avalue: CDIKind);<br>
          begin<br>
          if fisfh=True then<br>
          Raise Exception.Create('缺少運算符');<br>
          if fisnot then//進行非運算<br>
          begin<br>
          if avalue.id then<br>
          Raise Exception.Create('浮點數不能做非運算');<br>
          avalue.ival := not avalue.ival;<br>
          fisnot := False;<br>
          end;<br>
          if IsLgFh(ffh[flevel]) then//運行邏輯運算<br>
          begin<br>
          value[flevel] := Calclg(value[flevel],<br>
          avalue,ffh[flevel]);<br>
          //與當前值做邏輯運算<br>
          end<br>
          else<br>
          begin<br>
          Inc(flevel);//存數位置指針加1<br>
          value[flevel] := avalue;//存入值<br>
          if flevel &gt;2 then//數據個數達到4,進行中間運算<br>
          Calccur;<br>
          end;<br>
          fisfh := True;//輸入符號可見<br>
          end;<br>
          <br>
          procedure TPUSHPOP.PushFh(afh: Char);<br>
          begin<br>
          if (fisfh=false) then//非運算是一級<br>
          begin<br>
          if (afh='!') and (not fisnot) then//標識非運算<br>
          begin<br>
          fisnot := True;<br>
          Exit;<br>
          end<br>
          else<br>
          Raise Exception.Create('運算符重復');<br>
          End<br>
          Else<br>
          begin<br>
          ffh[flevel] := afh;//存入運算符<br>
          fisfh := False; 輸入值可見<br>
          end;<br>
          end;<br>
          <br>
          procedure TPUSHPOP.Calccur;<br>
          begin<br>
          if IsCcFh(ffh[1]) then//二級運算符<br>
          begin<br>
          value[1] := Calcsj(value[1],value[2],ffh[1]);<br>
          //計算2和3項的值<br>
          ffh[1] := ffh[2];//后序運符和值前移<br>
          value[2] := value[3];<br>
          end<br>
          else//一級運算符<br>
          begin<br>
          value[0] := Calcsj(value[0],value[1],ffh[0]);<br>
          //計算1和2項的值<br>
          value[1] := value[2];{ 后序運符和值前移, <br>
          2和3項的值不計算是為了保持第一個運算符為一級運算符}<br>
          value[2] := value[3];<br>
          ffh[0] := ffh[1];<br>
          ffh[1] := ffh[2];<br>
          end;<br>
          Dec(flevel);//存數位置指針減1<br>
          end;轉載自計算機世界日報 <b>(文/陳建鍇)</b><font 
      color=#ffa000><b><br>
          </b><b>                                            
      </td>
    </tr>
    </tbody> 
  </table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美日本在线| 国产嫩草影院久久久久| 亚洲精品中文字幕乱码三区| 成人精品视频一区二区三区| 欧美经典一区二区| 成人国产电影网| 国产精品久久久久婷婷二区次| 成人91在线观看| 综合色中文字幕| 欧美视频一区二区在线观看| 亚洲成人777| 欧美一区二区在线免费播放| 麻豆精品精品国产自在97香蕉| 7777精品伊人久久久大香线蕉完整版 | 男女性色大片免费观看一区二区| 欧美一级二级三级乱码| 精品一区在线看| 2020国产精品久久精品美国| 成人免费毛片app| 亚洲精品乱码久久久久久黑人| 欧美高清性hdvideosex| 久久国产尿小便嘘嘘| 亚洲国产精品精华液ab| 欧美日韩一区二区欧美激情| 久草在线在线精品观看| 中文字幕一区二区三区在线不卡| 在线精品视频免费播放| 精品综合久久久久久8888| 国产欧美一区在线| 欧美在线视频你懂得| 麻豆精品在线观看| 18欧美乱大交hd1984| 欧美一区二区精品在线| 成人精品国产免费网站| 天天影视涩香欲综合网| 国产精品网友自拍| 欧美日韩电影在线播放| 日韩一级大片在线观看| 99r精品视频| 国产综合色精品一区二区三区| 亚洲激情图片一区| www成人在线观看| 欧美午夜精品电影| 国产福利一区二区三区视频在线| 亚洲综合久久久| 亚洲国产精品精华液2区45| 91.com视频| 91在线国内视频| 国产美女av一区二区三区| 亚洲伊人色欲综合网| 国产欧美一区二区三区鸳鸯浴| 欧美视频在线一区二区三区| 9久草视频在线视频精品| 精品在线视频一区| 亚洲电影视频在线| 中文字幕在线观看不卡| 精品久久一区二区三区| 欧美日韩一本到| 91高清在线观看| 国产成人av一区| 理论片日本一区| 日韩高清在线观看| 亚洲电影中文字幕在线观看| 国产精品国产三级国产有无不卡 | 日韩不卡手机在线v区| 国产精品视频一二三| 欧美成人午夜电影| 欧美日本国产视频| 欧洲av在线精品| 色综合久久久久网| 91理论电影在线观看| 成人爽a毛片一区二区免费| 国产综合色视频| 国内精品视频666| 久久国产精品露脸对白| 日韩二区三区四区| 亚洲6080在线| 亚洲bt欧美bt精品777| 亚洲一区二区黄色| 亚洲自拍另类综合| 亚洲国产va精品久久久不卡综合| 一区二区在线观看不卡| 亚洲激情图片小说视频| 一区二区三区四区在线| 亚洲最大成人网4388xx| 亚洲一区二区在线观看视频| 亚洲一卡二卡三卡四卡| 亚洲一区二区美女| 亚洲综合一区二区三区| 亚洲午夜av在线| 免费欧美高清视频| 精品一区二区在线播放| 国产精品99久久久| 99精品在线免费| 色综合久久久久久久| 最新日韩av在线| 亚洲欧美日韩国产综合| 一卡二卡欧美日韩| 视频一区免费在线观看| 蜜乳av一区二区三区| 国产成人在线视频免费播放| 成人精品小蝌蚪| 在线观看亚洲专区| 欧美一级电影网站| 国产午夜亚洲精品不卡| 亚洲精品综合在线| 麻豆精品久久久| 成人动漫在线一区| 欧美性生活久久| 亚洲精品一区二区三区香蕉| 国产蜜臀97一区二区三区| 亚洲欧美在线视频观看| 亚洲成人动漫一区| 国产乱人伦偷精品视频不卡| 91免费观看在线| 欧美一区二区网站| 国产精品日日摸夜夜摸av| 亚洲男女毛片无遮挡| 日韩av电影天堂| 东方欧美亚洲色图在线| 欧美视频在线观看一区| 日韩欧美国产一区二区三区| 国产精品久久久久9999吃药| 日日摸夜夜添夜夜添精品视频| 国产剧情在线观看一区二区| 欧美亚洲高清一区| 久久久精品免费网站| 亚洲成人黄色影院| 成人av网站免费| 欧美一区二区三区视频在线 | 亚洲色图第一区| 麻豆精品视频在线观看| 一本一本大道香蕉久在线精品 | 欧美sm美女调教| 一区二区在线观看免费| 国产激情91久久精品导航| 欧美高清视频在线高清观看mv色露露十八 | 欧美精品丝袜中出| 中文字幕一区在线观看| 麻豆精品一区二区| 精品视频一区三区九区| 成人欧美一区二区三区白人| 久久精品国产亚洲一区二区三区| 欧美亚洲一区二区在线| 国产欧美精品在线观看| 麻豆精品国产91久久久久久| 欧美日韩综合在线免费观看| 亚洲国产精品成人综合| 九九国产精品视频| 欧美日韩国产首页| 亚洲精选一二三| 成人激情免费视频| 国产亚洲精品久| 激情五月婷婷综合| 91精品在线观看入口| 亚洲制服丝袜av| 91免费精品国自产拍在线不卡| 久久综合狠狠综合| 久久成人综合网| 欧美一区二区三区四区视频| 石原莉奈一区二区三区在线观看| 色一情一乱一乱一91av| 国产精品色噜噜| 粉嫩蜜臀av国产精品网站| 久久久影视传媒| 国产精品资源在线观看| 2020国产精品| 国产精品一二三四五| 久久在线免费观看| 国产精品一卡二卡| 欧美激情中文不卡| av电影天堂一区二区在线| 亚洲国产精品av| 成人精品视频一区二区三区| 国产精品国产三级国产a| 国产激情一区二区三区| 国产精品丝袜91| 色呦呦国产精品| 亚洲第一福利一区| 欧美一区二区三区人| 麻豆精品一区二区av白丝在线| 欧美电视剧在线看免费| 精品一区二区三区久久| 久久久久国产精品麻豆| www.亚洲在线| 亚洲精品国产精华液| 欧美精品丝袜久久久中文字幕| 看片网站欧美日韩| 久久蜜桃香蕉精品一区二区三区| 成人午夜激情影院| 亚洲已满18点击进入久久| 91精品国产综合久久久久| 精品在线播放午夜| 国产精品嫩草99a| 一本色道久久综合亚洲aⅴ蜜桃| 亚洲永久精品国产| 日韩欧美国产系列| 丁香婷婷综合五月| 亚洲综合成人网| 欧美videofree性高清杂交|