【问题标题】:Is there an easy way to work with application's variables by their names (from text file)?有没有一种简单的方法可以通过名称(来自文本文件)来处理应用程序的变量?
【发布时间】:2012-10-14 01:50:44
【问题描述】:

我能否以某种方式使用内容如下的文本文件:

<comment> This is something like an XML file.
<action var="myInteger"> +50
<condition> stringVar == "sometext" <action var="boolVar"> = true

.. 解析它并让我的应用执行一些操作?

我们的想法是制作一个用户友好(示例不算数)的伪代码,可以更改应用程序的变量和运行方法。问题是我不知道如何通过变量名来更改变量。

为每个变量名单独设置一个大小写(明确支持它们)将是相当疯狂的:

switch(varName)
{
    case "var1": {/* things */ break;}
    case "var2": {/* things */ break;}
    /* ... */
    case "var9999": {/* things */ break;}
}

编辑:我想我最初问错了问题。 (有没有一种简单的方法可以通过从文本文件中执行代码来处理应用程序的变量?

【问题讨论】:

  • (编辑后)是的,更好的问题。
  • 文件必须是xml吗?您在文件中寻找什么样的语法?如果这些问题都没有强烈要求,我会考虑托管 IronPython 或 Powershell 运行时。目前,c# 没有内置的“eval”功能。
  • 我正在为这个东西制定自己的语法,它不会像问题中的示例那么复杂。如果它更容易,我可以使用 XML,我只需要知道我是否可以用我的变量做我需要的事情。顺便说一句,谢谢你告诉我它是如何被调用的,我想要做什么。

标签: c# .net pseudocode


【解决方案1】:

回答你的问题:是的。

现在您已经编辑了您的问题...

您需要解析 XML,最好使用 .NET 附带的库。然后,您遍历 XML 树,执行与它相关联的每个节点。

您可能不想直接公开应用的变量。相反,您应该定义一些可由 XML 文件操作的执行状态。例如,您可以拥有一个变量及其值的字典。然后当你得到一个&lt;action&gt; 标记时,你查看var 属性,在字典中查找变量,然后将值更改为标记指定的任何内容。

这不是一项简单的任务。编写语言解释器并不一定很难(本质上就是你正在做的事情)。但是设计你的语言以使其有意义可能很困难。您还会发现,如果您有嵌入的表达式(您看起来是这样),那么您将需要一个表达式解析器。同样,这些“容易”构建,但对于没有经验的人,你需要先做一些研究。如果您不了解现实世界的解析技术,您很容易最终构建出非常复杂、缓慢和损坏的东西。

对于表达式解析,请查看 LL(1) 解析器,特别是递归下降,这是最容易理解和实现的。

为了评估 XML 输入,您需要一个遍历树的递归算法。这将类似于您的递归下降解析器。其实除了细节之外,两者几乎是一样的。

一旦事情进展顺利,您应该就特定问题提出一个实际的问题,而不是问一个如此广泛的问题。

另一个编辑:为变量使用字典。

【讨论】:

  • 您必须使用动作字典,而不是变量。据我所知,不可能通过某种字典机制(例如,为它分配一些东西)来引用特定的(局部)变量。
  • @JayC:即使您确实想在应用程序中实际修改实际变量,您也可以使用字典将变量名称链接到其反射对象。当然,使用闭包可能就足够了。
【解决方案2】:

对于一个非常简单的情况,您有一组固定的关键字/语法来定义操作,我建议您只编写一个自定义解析器并使用反射来访问您定位和自定义的字段/属性关于实际操作的代码。您可以利用 Action 和 Fun 委托来隔离/重用代码实现以实现具有明确评估路径的操作。

但是,如果您正在研究更复杂的场景,那么我建议您开始研究 DSL。我在 DSL 方面的知识非常有限,所以我不能说太多,但肯定会涉及到相当多的学习曲线。像meta# 这样的东西可能是一个很好的起点,可以抽象出一些复杂性

【讨论】:

    【解决方案3】:

    【讨论】:

    • 好的,我又看了你的问题,好像我误解了,所以请不要介意
    • 您希望基本上为您的应用程序添加脚本支持(将指令写入文本文件并让您的应用程序遵循它们)。看看stackoverflow.com/questions/260/…
    【解决方案4】:

    我认为这对应用程序脚本非常有用,但是将所有应用程序变量绑定到脚本需要大量工作(更不用说学习一门新语言了)。

    所以最好是使用 .NET 运行时编译功能,然后你的类 xml 文件应该是一个简单的 C# 文件,它将在运行时加载、编译和执行,更好的是你可以让它非常引用你所有的应用程序变量很容易。

    【讨论】:

      猜你喜欢
      • 2010-09-19
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 2010-09-19
      • 2021-11-06
      相关资源
      最近更新 更多