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


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

Листинг 4.22. Метод Expression() 
public void Expression(ref string s, out Node D) 
{
s = s.Trim(); 
if (s.Length != 0) 

string sign = "+"; 
if ((s[0] == '+') | (s[0] == '-'))
sign = Pop(ref s, 1); 
Term(ref s, out D);
if (error != 0) return; 


s.Trim(); 
// + - | 
while ((s.Length > 0) &&
((s[0] == '+') | (s[0] == '-'))) 

sign = Pop(ref s, 1); 
if (s.Length == 0)
{ error = 5; return; } 
Node D2; 
Term(ref s, out D2);
if (error != 0) return; 
Node D1 = D;
15 / 23


108 
Operation t = Operation.PLUS; 
switch (sign[0]) 

case 
'+': 
t = Operation.PLUS; break; 
case 
'-': 
t = Operation.MINUS; break; 

D = new NodeOperation(t, D1, D2); 


else 

D = null; error = 4; 


Алгоритм метода Expression() в виде синтаксической диаграммы 
представлен на рисунке 4.12. 
Рис. 4.12.
Алгоритм метода Expression() 
Метод Expression() вызывает метод Term(), производящий разбор 
слагаемых. 
16 / 23


109 
Листинг 4.23. Метод разбора слагаемых 
void Term(ref string s, out Node D) 

s = s.Trim(); 
if (s.Length != 0) 

Factor(ref s, out D);
if (error != 0) return; 
// * / &
while ((s.Length != 0) &&
((s[0] == '*') | (s[0] == '/'))) 

string znak = Pop(ref s, 1); 
if (s.Length == 0)
{ error = 6; return; }; 
Node D2; 
Factor(ref s, out D2);
if (error != 0) return; 
Node D1 = D; 
Operation t = Operation.MULT; 
switch (znak) 

case "*": t = Operation.MULT; break; 
case "/": t = Operation.DIV; break; 

D = new NodeOperation(t, D1, D2); 

17 / 23


110 

else 

D = null; error = 5; 

} // Term 
Алгоритм метода Term() представлен в виде синтаксической диаграм-
мы на рисунке 4.13. 
Рис. 4.13. Синтаксическая диаграмма для метода Term() 
Метод Term(), в свою очередь, вызывает метод Factor, производя-
щий разбор множителей и распознающий константы и выражения в скобках.

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   57   58   59   60   61   62   63   64   ...   111




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