ФБН задачи 4, 5.
Primary tabs
ФБН задачи 4, 5.
Выше мы рассмотрели пример, где выражение вида (только суммы):
2 + 5 + 4 и т.д
можно описать, используя рекурсивный подход:
<Cifra> ::= [0-9] <CeloeChislo> ::= "0" | ([1-9] <Cifra>*) <BinSumma> ::= <Summa> "+" <CeloeChislo> <Summa> ::= <BinSumma> | <CeloeChislo>
Задача 4: Напишите ФБН для поддержки (помимо операции сложения) операций вычитания, умножения и деления:
2+3*5+7/2-3
-- описывая умножение/деление рекурсивно через бинарное умножение/деление (по аналогии с тем, как это выше сделано для суммы через бинарную сумму).
Решение
<Cifra> ::= [0-9]
<CeloeChislo> ::= "0" | ([1-9] <Cifra>*)
<BinMult> ::= <Mult> ("*" | "/") <CeloeChislo>
<Mult> ::= <BinMult> | <CeloeChislo>
<Virazhenie> ::= <Mult> | <CeloeChislo> (("+" | "-") <Mult> | <CeloeChislo>)*Задача 5
Напишите ФБН для описания выражений вида:
((2+3)*5)/2 + 7*4
-- с произвольным вложением скобок (для упрощения выражения не расписывайте суммы и произведения через их бинарные случаи).
Решение
<Cifra> ::= [0-9]
<CeloeChislo> ::= "0" | ([1-9] <Cifra>*)
<Operator> ::= "+" | "-" | "/" | "*"
<Summa> ::= <CeloeChislo> (<Operator> <CeloeChislo>)*
<Staples> ::= "(" <Virazhenie> ")"
<Virazhenie> ::= <Staples> | (<Staples> | <Summa>) (<Operator> (<Staples> | <Summa>))*- Log in to post comments
- 1321 reads