解析式--- C ++実現

 

1.中置、接頭辞、接尾式

  人が表現を識別することができる場合:1 +(2 + 3)* 4-5

  オペレータの位置に分割します:

    ①中置式:1 +(2 + 3)* 4-5

    ②プレフィックスの式: - 1 + + * 2345  

    ③後置式:1 2 3 * 4 + + 5 -

  すでに計算順序が含まれているプレフィックスと後置式は、優先順位の括弧を決定する必要はありません

2.ターンプレフィックス中置

  2.1中置ターンプレフィックス

  ①プレス演算子の優先順位は、全ての操作部を括弧しました

    ((1 +((2 + 3)* 4)) - 5)

  ②対応するブラケットの正面にオペレータが移動し

    - (+(1 *(+ 2 3)4))5)

  ブラケットの③除去、接頭辞表現を与えるために、

    - + 1 * + 2 3 4 5

 コンピュータ実装の変換:

(1)式ツリー

(2)スタック 

  ①2つのスタック、スタック演算子SLと、S2スタックストア中間結果

  ②左右のスキャン表現へ

  ③出会いオペランド、S2を押してください

  ④遭遇したオペレータは、スタックS1の演算子の優先順位と比較します

    S1は空である、またはスタックの最上部は、右括弧「)」、オペレータスタックS1である場合

    オペレータスタック高さよりも優先か等しい場合、オペレータプッシュS1

    優先度は、スタックの最上部よりも低い場合、次いで、スタックのスタック内部のS2圧にオペレータS1、及び、比較演算子スタックS2に進み

  ⑤遭遇ブラケット

    直接右括弧内S1

    それは右のブラケット、これらのブラケットは捨て山に遭遇するまで、左括弧、オペレータが順次、S2にスタックS1を取り出します

  左端の表現まで繰り返し⑥

  ⑦残りオペレータS1 S2へ順次排出圧力

  ⑧表現の接頭辞を与えるために、ポップ-S2重い要素を回します  

 

  2.2プレフィックス式解析計算

  ①右から左スキャン式と

  OP-トップスタック、スタック結果:②数字、デジタルプッシュ、オペレータの経験は、撮影した二つの数字は、スタック操作を行います

  ③は、左端の表現まで繰り返されます

3.中置ターンサフィックス

  3.1中置ターンサフィックス  

  ①プレス演算子の優先順位は、全ての操作部を括弧しました

  ②対応するブラケットの後方にオペレータが移動し

  ブラケットの③除去、接頭辞表現を与えるために、

(1)式ツリー

(2)スタック

 

  決済を解析3.2後置式 

  ①左から右の式にスキャン

  OP-トップスタック、スタック結果:②数字、デジタルプッシュ、オペレータの経験は、撮影した二つの数字は、スタック操作を行います

  ③式の右端まで、繰り返し

表現の合法性を決定する4

ブラケットの正当性(1)

 ここで括弧内にのみ発現{} []()、しない一時的数値と演算子、および追加の無効な式文字列の入力がありません

}他{falseを返します}}

 

(2)事業者の正当性

 

おすすめ

転載: www.cnblogs.com/taoXiang/p/12563477.html