<expression> ::= <term> { ("+" | "-") <term> }
<term> ::= <factor> { ("*" | "/") <factor> }
<factor> ::= <number>
| <identifier>
| <function_call>
| "(" <expression> ")"
<function_call> ::= <identifier> "(" <argument_list> ")"
<argument_list> ::= <expression> { "," <expression> } | /* empty */
<number> ::= /* a floating-point or integer number */
<identifier> ::= /* a variable or function name */