【发布时间】:2016-01-05 01:54:15
【问题描述】:
我正在尝试找出任何数学表达式的语法规则。
我正在使用 EBNF(下面链接的 wiki 文章)来导出语法规则。
我设法想出了一个工作了一段时间,但语法规则失败了 onScreenTime + (((count) - 1) * 0.9)。
规则如下:
math ::= MINUS? LPAREN math RPAREN
| mathOperand (mathRhs)+
mathRhs ::= mathOperator mathRhsGroup
| mathOperator mathOperand mathRhs?
mathRhsGroup ::= MINUS? LPAREN mathOperand (mathRhs | (mathOperator mathOperand))+ RPAREN
您可以放心地假设mathOperand 是正数或负数,或变量。
您还可以假设mathOperator 表示任何数学运算符,例如 + 或 -。
另外,LPAREN 和 RPAREN 分别是 '(' 和 ')'。
EBNF: https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form
编辑
忘了提到它在(count) - 1 上失败了。它说的是RPAREN,而不是- 1。
EDIT 2 我修改后的 EBNF 现在看起来像这样:
number ::= NUMBER_LITERAL //positive integer
mathExp ::= term_ ((PLUS | MINUS) term_)* // * is zero-or-more.
private term_ ::= factor_ ((ASTERISK | FSLASH) factor_)*
private factor_ ::= PLUS factor_
| MINUS factor_
| primary_
private primary_ ::= number
| IDENTIFIER
| LPAREN mathExp RPAREN
【问题讨论】:
标签: syntax expression grammar ebnf