我正在尝试为某些算术表达式创建一个合适的语法。我的表达式的有效标记如下:
'+', '-', '/', '*'
和'**'
代表权力。表达式还可以包含符号和函数。这些函数可以使用多个参数,其中一些参数可能是可选的。从我记得的表达式解析中,我必须想出一个不是左递归的语法,并且还保留了操作符的关联性。
所以这是我想出来的,经过一些搜索(虽然不确定关联性):
E = T Eopt
Eopt = '+' T Eopt | '-' T Eopt | ε
T = F Topt
Topt = '*' F Topt | '/' F Topt | ε
F = Number | '(' E ')'
可以在许多教科书中找到。上面的语法需要进行哪些更改,以便它可以修改幂标记('**')以及符号和函数?
请不要指向我/ flex / yacc等。谢谢。
答案 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 ')'
这假设您的标记生成器区分*
和**
。