对不起,我想不出更好的书名了。在
问题是:
对于我们的客户,我们创建了(作为一个更大的应用程序的一部分)一个 他们可以用来构建“场景”的图形设计器。在
这些场景由“复合材料”组成,而复合材料又包括 “命令”的。这些命令对象都从CommandBase和 实现一个称为ICompilable的接口。在
scenario类还实现了ICompilable。调用Compile()时 在命令中,返回一个字节数组,然后将其发送到设备 他们的目的(不能透露太多关于硬件的信息,抱歉)
给你一个想法:
var scenario = new Scenario();
scenario.Add(new DelayCommand(1));
scenario.Add(new CountWithValueCommand(1,ActionEnum.Add,1));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new WaitCommand(3));
scenario.Add(new DirectPowerCommand(23,false,150));
scenario.Add(new SkipIfCommand(1,OperatorEnum.SmallerThan,10));
scenario.Add(new JumpCommand(2));
byte[] compiledData = scenario.Compile();
图形设计师从用户那里抽象出所有这些,并允许 他(或她)简单地将复合材料拖到设计师的表面上。 (Composites可以对命令进行分组,这样我们就可以为返回任务提供构建块)
最近,我们的客户来找我们说,“设计师真的很酷, 但我们有些人更愿意使用某种编程语言, 只是一些简单的事情。”
(当然对他们来说很简单)
我很想为他们提供一种简单的语言, 它可以调用各种命令,也可以将SkipIfCommand替换为 更好的结构等。。。在
我不知道从哪里开始,也不知道我的选择是什么(不破坏我们现有的)
我听说有人嵌入了Python之类的语言, 人们写他们自己的语言和解析器等。。。在
有什么建议吗?在
PS:用户只使用复合材料,从不使用命令。 组合在运行时动态加载(连同它们的图形设计器) 可由第三方在单独的组件中提供。在
对于简单的DSL来说,这看起来是一个完美的场景。有关详细信息,请参见http://msdn.microsoft.com/en-us/library/bb126235(VS.80).aspx。在
您还可以使用脚本语言,如lua.Net网站. 在
据我所知,你有两个选择
您可以使用XML样式的“标记”让它们定义实体及其分组,但这可能不是最好的方法。在
你的替代方案是,你可以嵌入一种语言,但你真的需要,这不过分杀伤力,你如何控制它?在
如果您只需要非常简单的语法,那么也许可以编写您自己的语言。实际上,创建一个简单的解释器并不难,只要你有一个严格、明确的语言。看看你正在使用的编译器的一些例子吧,c#?在
我在uni用java编写了一个非常简单的interperter,它没有你想象的那么难。在
如果你真的只想要一种非常简单的语言,你需要一个“递归下降解析器”。在
例如,像这样的语言:
你可能有如下语法:
^{pr2}$代码如下:
相关问题 更多 >
编程相关推荐