BNFで評価すると簡単 <expr> ::= <term> [ ('+'|'-') <term> ]* <term> ::= <factor> [ ('*'|'/') <factor> ]* <factor> ::= <number> | '(' <expr> ')' <number> :== ('1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9') [ <number> ]*