ФБН задачи 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
- 1044 reads