【发布时间】:2013-03-26 11:40:53
【问题描述】:
我编写了一个数学 C# 应用程序,用户可以在其中以预定义的方式定义函数,例如
COS({x}+3*(2+SQRT({x})))
对于评估,我使用了 Shutting-Yard 算法。我有一个函数来标记上面的字符串,它在列表中产生以下输入:
FUNCTION,OPEN_PARENTHESIS,VARIABLE,OPERATOR,NUMBER,OPERATOR,OPEN_PARENTHESIS,NUMBER,OPERATOR,FUNCTION,OPEN_PARENTHESIS,VARIABLE,CLOSE_PARENTHESIS,CLOSE_PARENTHESIS,CLOSE_PARENTHESIS。
这很好,但是我有负数的问题,我不知道如何处理减法运算符,什么时候减法和什么时候负号?
该函数遍历字符串并在其中搜索模式(例如,当 i. 字符为 '{' 则 (i+1). 字符必须是小写字母且 (i+2). 字符必须是 '}',存储变量并继续使用 (i+3). 字符,否则会引发语法错误。)现在这个函数接受负数,而不是减法,它接受与负数的乘法并使用 '+' ,所以我必须使用 3+(-1)*1 而不是 3-1。这不是一个优雅的解决方案,您有任何解决方法的想法吗?
【问题讨论】:
标签: c# .net regex tokenize subtraction