Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


Листинг 4.29. Рекурсивная функция построения узла оператора


Download 1.85 Mb.
Pdf ko'rish
bet66/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   62   63   64   65   66   67   68   69   ...   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

Листинг 4.29. Рекурсивная функция построения узла оператора 
public byte SetOperator(ref string s,
out Operator op) 

error = 0; s = s.Trim(); op = null;
string st = Pop(ref s, 1); //
while ((s.Length > 0) && TestCh(s[0]))
st += Pop(ref s, 1); 
s = s.Trim(); 
7 / 23


123 
if (st == "if") // if 
{
string sExpres = ""; 
int k = 1; int i = 0; 
while ((i < s.Length) && (k != 0)) 

sExpres += s[++i]; 
switch (s[i]) 

case '(': ++k; break; 
case ')': --k; break; 


sExpres 

sExpres.Substring(0, sExpres.Length - 1); 
s = s.Substring(i + 1, s.Length - i - 1);
s = s.Trim(); // 
int kThen = s.IndexOf(';');
int kElse = s.IndexOf("else"); 
if 
(kThen==0) 
return 2; // not THEN ! 
Node 
D; 
PFormula(ref sExpres, out D);
if (error!=0) return error; 
Operator 
op1; 
Operator 
op2; 
if 
(kElse==0) 
8 / 23


124 

string sThen =
s.Substring(kThen+4,s.Length-kThen-2);
error = SetOperator(ref sThen, out op1);
if (error!=0) return error; 
op2 = null; 

else 

string sThen = s.Substring(0,kThen); 
string sElse =
s.Substring(kElse+4,s.Length-kElse-4); 
error = SetOperator(ref sThen, out op1);
if (error!=0) return error; 
error = SetOperator(ref sElse, out op2);
if (error!=0) return error; 

op = new OperatorIf(D,op1,op2); 

else // 
переменная 

// 
поиск переменной 
bool ok = false; int nv = -1; 
while ((nv < aVar.Length - 1) && !ok) 
ok = st == aVar[++nv].name; 
if 
(ok) 

if ((s.Length<1) || (s[0]!='=')) 

9 / 23


125 
error = 1; return error; // not =

Pop(ref s,1); 
Node D; 
PFormula(ref s, out D); 
op = new OperatorExpression(nv,D); 


return error; 

Для разбора операций отношения предназначен метод PFormula(): 

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   62   63   64   65   66   67   68   69   ...   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling