ФБН задача 6

ФБН задача 6:

Добавим поддержку переменных.
Напишите ФБН для описания выражений вида):

((2+3)*5)/2 + 7*4
b = ((2+3)*5)/2 + 7*4
a = b + 1

-- т.е. строка может быть любой из этих трех, а именно:

Просто выражение (с произвольным вложением скобок)
Выражение с присваиваем (в котором участвуют либо числа, либо переменные)

РЕШЕНИЕ:

<Cifra> ::= [0-9]
<CeloeChislo> ::= "0" | ("-"? [1-9] <Cifra>*)
<Peremennaya> ::= "a" | "b" | "c"
<Mnogitel> ::= <CeloeChislo> | "(" <Virazhenie> ")" | <Peremennaya>
<Slagaemoe> ::= <Mnogitel> (("*" | "/") <Mnogitel>)*
<Virazhenie> ::= (<Peremennaya> "=")? <Slagaemoe> (("+" | "-") <Slagaemoe> )*

В решении унарный минус относится только к целым числам. Лучше, чтобы унарный минус поддерживался для любого множителя. Например, выражения $-(a+b)$ и $-a$ не описываются этими формами.

<Cifra> ::= [0-9]
<CeloeChislo> ::= "0" | ([1-9] <Cifra>*)
<Peremennaya> ::= "a" | "b" | "c"
<Mnogitel> ::= "-"? (<CeloeChislo> | "(" <Virazhenie> ")" | <Peremennaya>)
<Slagaemoe> ::= <Mnogitel> (("*" | "/") <Mnogitel>)*
<Virazhenie> ::= (<Peremennaya> "=")? <Slagaemoe> (("+" | "-") <Slagaemoe> )*