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

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

?? delp018.html

?? 對于學習很有幫助
?? HTML
字號:
<html><!-- #BeginTemplate "/Templates/fwolf001.dwt" -->
<head>
<!-- #BeginEditable "doctitle" --> 
<title>獨孤之所 - 一款設計精巧的表達式解析器</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!-- #EndEditable --> 
<style type="text/css">
<!--
body {  font-family: "宋體"; font-size: 9pt}
td {  font-family: "宋體"; font-size: 9pt}
a:hover {  text-decoration: underline}
a {  text-decoration: none}
input {  font-family: "宋體"; font-size: 9pt}
select {  font-family: "宋體"; font-size: 9pt}
-->
</style>
</head>


<body>
<!-- #BeginEditable "2%C7%F8" --> <!-- #EndEditable -->
<table width="584" border="0" align="center" cellspacing="1">
  <tr> 
    <td width="582"> <font color="#FF3333"> 
      <div align="center"><font size="3"><!-- #BeginEditable "%B1%EA%CC%E2" --> </font> <!-- #EndEditable --></div>
      </font> </td>
  </tr>
  <tr> 
    <td width="582"> 
      <div align="center"><font size="3"><!-- #BeginEditable "%D7%F7%D5%DF" --></font><!-- #EndEditable --></div>
    </td>
  </tr>
  <tr> 
    <td width="582"><font size="3"><!-- #BeginEditable "%CE%C4%B1%BE%C7%F8" --><center><font color="#0000c0"><font color="#FF3333">一款設計精巧的表達式解析器</font><br>
        </font>北京天心軟件公司<br>
        陳建鍇 
      </center>
      </font>
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 開發MIS系統時,報表設計中經常會碰到表達式解釋器,完成用戶自定義的公式運算。這種程序的設計需要有比較高的技巧,以下介紹一款用DELPHI4.0開發的程序[程序重在算法,語言特性很少,用其它語言的人也能讀懂],只要按自已的要求稍加修改,即可做成組件或全局方法發部。它支持  
        "加[+]、減[-]、乘[*]、除[/]、商[$:兩整數相除,結果的整數部分]、模[%]、括號[()]"四則混合運算,支持"與[&]、或[|]、異或[^]、左移[<  
        ]、右移[ >]和非[!]"邏輯運算功能,同時它們可以出現在同一個表達式中,它們的優先級依次為括號、非、與或異或左右移、乘除商模、加減。如式:12.45+3*16  
        >2*(3+6*(3+2)-1)=12.45+3*4*32,計算結果為:396.45。程序包括兩大部分功能:表達式拆解、因子計算,分別由兩個類TBdsProc和TPUSHPOP完成。具體如下:</font>  
      <pre><font size="3">
CDIKind=record
  case id: Boolean of
   True: (dval: Double);
   False: (ival: Integer);
 end;
CDKind:區別表達式中的整數和浮點數類型,
因為有些運算符不支持浮點數(如邏輯運算)。

ValKind = CDIKind;
TBdsProc = class
 private
  Fghpd : Integer;//識別并標記左右括號是否成對出現
  function IsCalcFh(c: Char): boolean;
  //判別一個字符是否運算符
  function CopyRight(abds: String;start: Integer):
  String;//截取字符串表達式
  function BdsSs(var abds: String): ValKind;
  //返回一個子表達式的值
  function BdsYz(var abds: String): ValKind;
  //表達式因子,如:15、(13+5)
  function BdsItm(var abds: String): ValKind;
  //讀取表達式中的一個因子
 public
  function CalcValue(const bds: String): ValKind;
  //返回計算結果
 end;

TPUSHPOP = class
 private
  ffh: array [0..2] of Char;//符號數組
  value: array [0..3] of CDIKind;//值數組
  flevel: Byte;//因子個數
  fisfh: Boolean;//識別等待輸入值或運算符
  fisnot: Boolean;//識別待計算數據項是否執行非運算
  function Calcsj(av1,av2: CDIKind;fh: Char): CDIKind;
  //執行兩個數值的四則運算
  function Calclg(av1,av2: CDIKind; fh: Char): CDIKind;
  //執行兩個數的邏輯運算
  procedure Calccur;{當輸入數據項滿足四個數后
[依運算優先級層數求得,見下述算式解析原理]執行中間運算}
  function IsLgFh(fh: Char): Boolean;
  //一個符號是否邏輯運算符
  function IsCcFH(fh: Char): Boolean;
  // 一個符號乘除商模運算符
 public
  constructor Create;
  procedure PushValue(avalue: CDIKind);//存入一個數據項
  procedure PushFh(afh: Char);//存入一個符號
  function CalcValue: CDIKind;//計算并返回值
 end;
</font></pre>
      <p><font size="3"><font color="#ffffff">----</font> 表達式解析基本原理:</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 1.表達式處理:</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 表達式的一個個數據項組成,中間由運算符連接,每個數據項為一個分析基本分析單元。表達式中如果包含有改變運算優先級別的括號運算,先計出括號中式子的值,再把該值當一個數據項處理,這一點在程序設計中只要運用遞歸功就能實現。</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 2.數據項計算處理</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> a >非運算:</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 它為單目運算符,級別最高,在存入符號時做標記,存入數據時即時計算并去除標記。</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> b >表達式運算:</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 設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間的運算符級別<  
        =f2,則:V2 =(V2與V3計算值),V3后的值和運算符前移;若V2與V3間的運算級別為f1,可先算V1與V2,V2以后的值和運算符前移。則計算后的表達式為:R=V3  
        f2(f2) V2 f1 V1剛好滿足循環取數條件。</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 3.實現:</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> 程序比較長(TBdsProc和TPUSHPOP的源代碼合計長度為400多行),完整代碼見附件,以下對一些重要實現方法做介紹:</font>  
      <p><font color="#ffffff"><font size="3">----</font></font> <font size="3"> < 1 >表達式拆解:由方法BdsSs和BdsYz完成表達式拆解和因子處理</font>  
      <pre><font size="3">
function TBdsProc.BdsSs(var abds: String): ValKind;
var
 c: Char;
 lpp: TPushPop;
begin
 lpp := TPushPop.Create;//建立數據計算對象
 while abds&lt;  &gt;'' do
 begin
  c := abds[1];
  if IsCalcFh(c) then//是否運算符
  begin
   lpp.PushFh(c);//保存運算符
   abds := CopyRight(abds,2);
  end
  else
  begin
   if c=')' then
   begin
    Dec(Fghpd);//括號匹配
    abds := CopyRight(abds,2);
    if Fghpd &lt;  0 then
     Raise Exception.Create('括號不配對');
    Result := lpp.CalcValue;
    //返回括號中的子項值,進行下一步計算
    lpp.Free;
    Exit;
   end
   else
   begin
    if c='(' then
     Inc(Fghpd);//做括號層數標識
    lpp.PushValue(BdsYz(abds));//取下一項的值。
   end;
  end;
 end;
 if Fghpd&lt;  &gt;0 then
  Raise Exception.Create('括號不配對');
 Result := lpp.CalcValue;//返回最終運算值
 lpp.Free;
end;

function TBdsProc.BdsYZ(var abds: String): ValKind;
begin
 if abds&lt;  &gt;'' then
 begin
  if abds[1]='(' then
  begin
   abds := CopyRight(abds,2);
   Result := BdsSs(abds);//遞歸調用,求括號中的值
  end
  else
   Result := BdsItm(abds);{讀一個數據項,
如果包括函數定義,可以在該方法中定義接口或連接}
 end;
end;
若表達式要支持函數功能,只要定義系統支持的函數,
在取行表達式因子BdsItm中加入連接函數定義即可,如下:
…..
else if (c&lt; ='Z') and (c &gt;='A') then
begin
  bhs := 取出函數名及參數
  Result := … //調用函數處理 (函數定義)
  abds := 下一項
end
….
&lt; 2 &gt; 數據計算:主要包PushValue,PushFh,
Calccur分別完成存入數、符號、中間計算
procedure TPUSHPOP.PushValue(avalue: CDIKind);
begin
 if fisfh=True then
  Raise Exception.Create('缺少運算符');
 if fisnot then//進行非運算
 begin
  if avalue.id then
   Raise Exception.Create('浮點數不能做非運算');
  avalue.ival := not avalue.ival;
  fisnot := False;
 end;
 if IsLgFh(ffh[flevel]) then//運行邏輯運算
 begin
  value[flevel] := Calclg(value[flevel],
avalue,ffh[flevel]);
//與當前值做邏輯運算
 end
 else
 begin
  Inc(flevel);//存數位置指針加1
  value[flevel] := avalue;//存入值
  if flevel &gt;2 then//數據個數達到4,進行中間運算
   Calccur;
 end;
 fisfh := True;//輸入符號可見
end;

procedure TPUSHPOP.PushFh(afh: Char);
begin
 if (fisfh=false) then//非運算是一級
 begin
  if (afh='!') and (not fisnot) then//標識非運算
  begin
   fisnot := True;
   Exit;
  end
  else
   Raise Exception.Create('運算符重復');
 End
 Else
 begin
  ffh[flevel] := afh;//存入運算符
  fisfh := False; 輸入值可見
 end;
end;

procedure TPUSHPOP.Calccur;
begin
 if IsCcFh(ffh[1]) then//二級運算符
 begin
  value[1] := Calcsj(value[1],value[2],ffh[1]);
  //計算2和3項的值
  ffh[1] := ffh[2];//后序運符和值前移
  value[2] := value[3];
 end
 else//一級運算符
 begin
  value[0] := Calcsj(value[0],value[1],ffh[0]);
  //計算1和2項的值
  value[1] := value[2];{ 后序運符和值前移, 
2和3項的值不計算是為了保持第一個運算符為一級運算符}
  value[2] := value[3];
  ffh[0] := ffh[1];
  ffh[1] := ffh[2];
 end;
 Dec(flevel);//存數位置指針減1
end;
</font></pre>
      <!-- #EndEditable --></td>
  </tr>
  <tr>
    <td width="582"><font size="3"><!-- #BeginEditable "%B1%B8%D7%A2" --></font><!-- #EndEditable --></td>
  </tr>
</table>
<p align="center"> 
<script language="JavaScript1.1" src=http://ad.t2t2.com/textclick.asp?user=fwolf&style=4&bkcolor=no></script>
</p>
<p align="center">&nbsp; </p>
</body>
<!-- #EndTemplate --></html>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色久综合一二码| 国产亲近乱来精品视频| 国产三级欧美三级日产三级99| 国产精品久久久一本精品| 日本中文一区二区三区| 91麻豆6部合集magnet| 精品久久人人做人人爰| 亚洲一区二区视频| 粉嫩在线一区二区三区视频| 欧美精品国产精品| 亚洲欧美成人一区二区三区| 国产精品一品二品| 精品国产免费一区二区三区香蕉| 亚洲一卡二卡三卡四卡| av毛片久久久久**hd| 久久精品视频免费| 国模套图日韩精品一区二区| 欧美一二三区精品| 五月婷婷综合网| 在线观看欧美黄色| 亚洲欧美另类综合偷拍| 97精品久久久午夜一区二区三区 | 精品视频在线视频| 国产精品久久久一本精品| 国产精品一二三| 亚洲精品一线二线三线无人区| 青青草国产精品亚洲专区无| 欧美日韩电影在线| 午夜精品免费在线观看| 欧美婷婷六月丁香综合色| 亚洲欧美日韩人成在线播放| 一本一道久久a久久精品综合蜜臀| 中文幕一区二区三区久久蜜桃| 激情欧美一区二区三区在线观看| 精品久久久久久久久久久院品网| 麻豆一区二区99久久久久| 日韩精品一区二区三区三区免费| 日韩电影一区二区三区四区| 欧美成人a视频| 国产一区免费电影| 亚洲国产精品黑人久久久| 粉嫩高潮美女一区二区三区| 国产精品剧情在线亚洲| av电影在线不卡| 一区二区三区免费看视频| 在线观看视频一区二区欧美日韩| 亚洲午夜电影在线| 欧美va亚洲va香蕉在线| 国产精品一区二区在线观看不卡 | 中文字幕在线不卡一区| 日本韩国欧美三级| 午夜伦欧美伦电影理论片| 欧美一区二区三区视频在线 | 欧美三级在线播放| 香蕉久久一区二区不卡无毒影院| 日韩一级视频免费观看在线| 狠狠色丁香久久婷婷综合_中| 中文字幕高清不卡| 欧美日韩一区二区在线视频| 国产在线日韩欧美| 亚洲视频一区二区在线观看| 在线播放91灌醉迷j高跟美女| 久久69国产一区二区蜜臀| 欧美高清在线一区二区| 在线免费精品视频| 精品一区二区三区免费| 亚洲欧美日韩成人高清在线一区| 欧美一区二区福利视频| 丁香桃色午夜亚洲一区二区三区 | 欧美国产欧美亚州国产日韩mv天天看完整| bt欧美亚洲午夜电影天堂| 亚洲国产精品久久人人爱| 久久蜜臀精品av| 欧美日韩一区二区三区四区 | 欧亚一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 成人一区在线观看| 亚洲成a人片综合在线| 国产视频一区在线播放| 欧美日韩国产高清一区二区 | 亚洲免费观看在线视频| 欧美大片在线观看一区二区| 91一区一区三区| 国产乱人伦精品一区二区在线观看| 亚洲裸体xxx| 久久久久久久久久久黄色| 欧美日韩精品三区| 91污在线观看| 国产盗摄一区二区| 免费美女久久99| 亚洲一级二级在线| 亚洲日本护士毛茸茸| 国产视频一区在线观看| 欧美成人精品二区三区99精品| 欧美日韩午夜精品| 在线观看网站黄不卡| 99久久精品国产麻豆演员表| 国产精品一区久久久久| 麻豆成人91精品二区三区| 丝袜亚洲精品中文字幕一区| 亚洲免费色视频| 亚洲色图另类专区| 亚洲天堂久久久久久久| 欧美极品少妇xxxxⅹ高跟鞋| www国产成人免费观看视频 深夜成人网| 欧美视频在线观看一区二区| 91电影在线观看| 欧美亚洲国产一卡| 91高清视频在线| 欧美色偷偷大香| 777久久久精品| 91精品欧美一区二区三区综合在 | 在线观看网站黄不卡| 日本国产一区二区| 在线一区二区三区| 欧美日韩免费高清一区色橹橹| 日本道色综合久久| 欧美性大战久久久久久久蜜臀| 色综合久久88色综合天天| 91首页免费视频| 在线亚洲+欧美+日本专区| 日本电影欧美片| 在线成人av网站| 欧美成人乱码一区二区三区| 久久毛片高清国产| 国产精品色哟哟网站| 亚洲日本在线看| 天天av天天翘天天综合网| 日本午夜精品视频在线观看| 精品综合久久久久久8888| 国产成人av网站| 色哟哟欧美精品| 制服丝袜日韩国产| 久久在线免费观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 中文字幕一区免费在线观看| 亚洲丝袜美腿综合| 日本在线播放一区二区三区| 六月丁香婷婷色狠狠久久| 国产成人自拍网| 欧洲激情一区二区| 日韩欧美123| 亚洲欧洲日韩女同| 日韩国产欧美三级| 国产91丝袜在线18| 欧美色中文字幕| 欧美高清在线视频| 亚洲h在线观看| 不卡一区二区三区四区| 欧美日韩国产经典色站一区二区三区| 精品国内片67194| 亚洲免费av在线| 麻豆精品久久精品色综合| 99久久久无码国产精品| 4438x亚洲最大成人网| 欧美激情在线一区二区三区| 五月激情综合网| 99天天综合性| 日韩精品一区二区三区视频播放 | 国产精品久久久久久亚洲伦| 亚洲高清三级视频| 国产99久久久久| 91精品国产手机| 亚洲激情自拍视频| 国产成人午夜精品影院观看视频 | 91精品久久久久久久久99蜜臂| 久久精品亚洲精品国产欧美| 亚洲成人自拍一区| aa级大片欧美| 久久天天做天天爱综合色| 亚洲bt欧美bt精品| 色婷婷综合久久久中文一区二区| 欧美成人性福生活免费看| 亚洲高清视频中文字幕| 91在线观看成人| 国产欧美日韩一区二区三区在线观看| 午夜电影一区二区三区| 91免费国产在线| 国产精品久久精品日日| 国产精品系列在线播放| 精品美女一区二区三区| 婷婷久久综合九色综合绿巨人| 91丨porny丨国产| 亚洲欧洲av在线| 国产成人欧美日韩在线电影| 精品黑人一区二区三区久久| 美腿丝袜亚洲色图| 91精品国产综合久久久久久久久久| 尤物视频一区二区| 日本久久一区二区三区| 亚洲私人影院在线观看| 99这里只有久久精品视频| 中文字幕二三区不卡| 成人永久看片免费视频天堂| 国产精品无人区| 91视频观看免费| 亚洲精品大片www| 欧美日高清视频| 三级精品在线观看| 欧美一级电影网站|