【问题标题】:C# String tokenizationC# 字符串标记化
【发布时间】: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


    【解决方案1】:

    如果您在行首、左括号后或另一个符号后面看到 -,则后面的数字为负数

    【讨论】:

      【解决方案2】:

      我写了一个可以解析 C# 样式表达式的小型开源库。

      https://github.com/davideicardi/DynamicExpresso

      您可以编写自定义函数(如 COS、SQRT)、注入变量或参数 (x)。或者您可以使用内置的 C# 函数(Math.Sqrt,...)。

      您可以在以下位置找到现场演示:http://dynamic-expresso.azurewebsites.net/

      也许这个库可以加快你的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 2018-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多