Имеется математическое выражение, например, "2 + 2" или "sin(0.54)^2 + arccos(0.5) // Pi" и тд.
Так же имеется расширенная форма Бэкуса-Наура для этого выражения.
Нужно проверить соответствие строки этой форме.
БНФ:
<expr> = (<number> | <func>) {<math_oper> (<number> | <func>)};
<func> = ('sin'|'cos'|'tan'|'arcsin'|'arccos'|'arctan'|'lg'|'ln'|'sqrt'|'log2'),'('<expr>')';
<number> = (['+'|'-'],<digit>{<digit>},['.'<digit>{digit}]) | ('Pi'|'e');
<math-oper> = '+'|'-'|'*'|'/'|'//'|'%'|'^';
<digit> = '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9';