【问题标题】:Need help to breakdown a string需要帮助来分解字符串
【发布时间】:2015-09-14 12:25:58
【问题描述】:

我正在尝试在 C# 中拆分字符串以使其成为我的代码的逻辑。字符串是:

if ( x111 > 0 ) 
   then (( x111/ x222) >= 34 and ( x222 / x222) <= 4500) 
else ( if ( x333 equals 0) 
   then true else false)

我将以下代码用于其他字符串,它工作正常:

string query = "if ( x111 > 0 ) then (x222 > 0 ) else true";
string result = query.Split(new string [] {"if", "then", "else" },StringSplitOptions.RemoveEmptyEntries); 

输出:

(x111 > 0)
(x222 > 0)

对于我上面的字符串,存在一个问题,即 then 条件包含另一个嵌套逻辑,我需要将其拆分为逻辑。我可以根据 "("")" 拆分它,以便我能够存储各种表达式的结果,例如 if, then, else 和嵌套条件。

【问题讨论】:

标签: c# string parsing grammar rule-engine


【解决方案1】:

您正在尝试使用字符串操作构建解析器...这是个坏主意,可能永远不会工作。

我建议您使用ANTLR,这是一种用于创建语法和解析器/词法分析器的工具。你应该试一试。有许多语言示例,包括 C#,您可以将其用作您自己的语言解析器的起点。

【讨论】:

  • 我要做的就是将业务规则转换为 C# 逻辑。所以试图分解不同语句的表达式,然后将它们存储到数据库中。但是上面的公式相当复杂。我是否应该尝试计算“(”和“)”的索引,然后拆分字符串。
  • @iSahilSharma 像“我想做的只是”这样的声明并不意味着任务很容易。 “我所要做的就是攀登珠穆朗玛峰......” 解析语法非常棘手,与其手动完成,不如使用像 ANTLR 这样的工具来为您完成繁重的工作?你说“我想做的就是攀登珠穆朗玛峰......没有氧气罐,我会在路上找到食物和住所”我们说“我想做的就是攀登珠穆朗玛峰……所以我正在打包最好的物资,并聘请世界上最有经验的夏尔巴人”哪一个更有意义?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多