如何实现迷你语言?
环境
我想做什么
在C#中实现一个迷你语言
我在公司的工作是制作一个自动评估公司产品性能的软件。 评估包括打开阀门,流动化学品,从传感器获取信号,计算某些值等等……
问题是当用户想要改变程序和参数时,例如反应时间有多长,打开阀门的顺序,反应管道是否被清除,程序员必须每次都更改源代码并构建另一个软件用户需要它。
所以我试图在C#中实现一种迷你语言。 用户可以使用易于理解的语言组织测量过程。 用户将代码写入txt文件,我的软件读取它,解析每行代码,提取命令和参数,调用软件中的相应方法。
例如,用户编写一行代码,如open_valve(3)
,我的软件读取代码并调用内部方法send_commands_to_ADconverter(VALVE, 3)
,它通过连接到计算机的A / D转换器将适当的命令发送到目标阀门。 这是我的观念。
但是,由于缺乏编程技巧,我不知道从哪里开始。 什么技术可用? 实现目标的关键词是什么? 我怎样才能实现这个目标? 任何帮助,将不胜感激。 谢谢。
编辑1
c# – 为.NET应用程序添加脚本function – Stack Overflow并不是指通过A / D转换器访问外部设备,如传感器,阀门,这对我的目的至关重要,因此不清楚这是上述链接的重复问题。
为了创建一种语言,你需要某种“解析器”。 您需要定义“语法”。 通过语法解析“progam”将产生一个结构,然后您可以在代码中调用实现语言每个function的方法。
你在这里有一个很大的学习曲线:)很多奇怪的东西,比如EBNF。 你可能会看到许多像Gold和ANTLR这样的东西的引用。 这些function非常强大,但涉及“编译器编译器”之类的内容,并增加了一系列复杂性,这些复杂性可能令人困惑,并且需要在构建管道中执行额外的步骤。
这里有一些我用过的库,允许你在c#中定义语法。
反讽非常好(我已将它用于各种项目),但一段时间没有保持。
Eto.Parse是最近的。 它还内置了解析器,允许您通过解析BNF来创建Grammer。 这很酷
如果我理解,您的目标是解析用户编写的语法并根据他输入的内容做出决定。 我建议你使用正则表达式来匹配和拆分用户输入。
有几种脚本语言可以直接从C#运行。
由于您的用户似乎没有编程知识,因此使用像VBScript这样的详细语言可能会有所帮助。
要运行VBScript,您可以使用脚本控件。 有关示例,请参阅此问题: 使用Microsoft Scripting Control评估“If”表达式(通过c#)
IIRC脚本控件必须作为32位应用程序运行。
嗯,最简单的选择是使用你已经拥有的东西 – C#。
您可以动态编译C#代码,使用新编译器Roslyn非常简单和便宜。 然后,您需要做的就是定义您的界面,以便它易于用户使用,并将该代码放在您可以从代码中调用的方法中。 这使您可以轻松支持C#的所有各种开发工具,包括Visual Studio / VS Code。 在最简单的forms中,您需要做的就是让您的“脚本”实现一些基类,它具有您希望用户拥有的所有方法 – 当然有更好的方法,但这个方法非常简单,听起来像是你的’寻找。
当然,只有您可以信任您的用户才有意义。 在C#中安全地使用沙盒代码要复杂得多(虽然肯定是可能的),而且使用一些现成的脚本解决方案可能会更好。
上述就是C#学习教程:如何实现迷你语言?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/988339.html