算术表达式语法

时间:2011-06-07 14:33:13

标签: parsing grammar

我正在尝试为某些算术表达式创建一个合适的语法。我的表达式的有效标记如下:

'+', '-', '/', '*''**'代表权力。表达式还可以包含符号和函数。这些函数可以使用多个参数,其中一些参数可能是可选的。从我记得的表达式解析中,我必须想出一个不是左递归的语法,并且还保留了操作符的关联性。

所以这是我想出来的,经过一些搜索(虽然不确定关联性):

E = T Eopt
Eopt = '+' T Eopt | '-' T Eopt | ε 
T = F Topt
Topt = '*' F Topt | '/' F Topt | ε
F = Number | '(' E ')' 

可以在许多教科书中找到。上面的语法需要进行哪些更改,以便它可以修改幂标记('**')以及符号和函数?

请不要指向我/ flex / yacc等。谢谢。

1 个答案:

答案 0 :(得分:1)

你快到了。更改从F:

开始
E = T Eopt
Eopt = '+' T Eopt | '-' T Eopt | ε 
T = F Topt
Topt = '*' F Topt | '/' F Topt | ε
F = P Fopt
Fopt = '**' P Fopt | ε
P = Number | '(' E ')'

这假设您的标记生成器区分***