解释自定义语言我需要开发一个应用程序来读取和理解一个文本文件,我将在其中找到描述操作列表(即烹饪食谱)的自定义语言。此语言尚未定义,但可能采用以下形式之一:(此代码是随机生成的,仅用于示例目的):beginrepeat(10){bar(toto,10,1999,xxx);}结果=foo(xxxx,10);if(foo==ok){...}else{...}end(此代码是随机生成的,仅用于示例目的):......无论选择何种语言,都必须处理简单的条件循环。我从来没有做过这样的事情,但乍一看,我认为将操作描述为XML会更简单但功能更少。浏览StackOverFlow后,我发现了一个关于名为“ANTLR”的工具的聊天...我开始阅读“TheDefinitiveANTLRReference”,但由于我从未做过那种事情,我发现很难知道它是否是true我需要的那种工具...换句话说,我需要读取一个文本文件,正确地解释它并在我的C#代码中执行操作。这些操作将与以下简单标准交互:描述这些文本文件(XML,我自己的)的最佳语言是什么?这些发展的关键点是什么?我希望我很清楚:)非常感谢您的帮助和建议!XML非常适合以冗长的方式存储关系数据。但是,我认为它是编写类似程序的逻辑的糟糕候选者。您是否考虑过使用现有的语法/脚本语言而不是自己编写?例如:LUApython在我的一个项目中,我实际上是从一种类似XML的语言开始的,因为我已经有了一个XML解析器,并将XML结构解析为内存中的表达式树以供解释/运行。这很好地解决了文本文件的传递标记化/解析问题,而是专注于您的“语言”和您的语言的操作逻辑。低端是写文本文件有点奇怪,很罗嗦。程序员使用C/C++语法也很不自然。最终,您可以轻松地将XML替换为完整的扫描器和词法分析器,以便将更“自然的C++”文本格式解析为表达式树。至于编写扫描器和词法分析器,我发现使用扫描器和词法分析器的递归正确解析器的简单逻辑流/循环手动编写它们更容易。也就是说,ANTLR非常适合您为您的语言编写规则并为您生成扫描器和词法分析器。这允许一种更动态的语言,可以轻松更改,而无需在添加新内容时再次重构所有内容。所以它可能值得研究一下,因为如果你自己手写,它会在重写东西时为你节省很多时间。我建议使用F#编写应用程序。它有许多用于解析字符串和xml的有用功能,例如模式匹配和活动模式。对于解析类似C的代码,我推荐F#(只需用F#做一个解释器,就像一个魅力)对于解析XML,我推荐C#/F#+XmlDocument类。您基本上需要处理两个文件:加载和解释运算符,然后递归地将它们应用于代码文件。最佳预制答案:S表达式C和XML是很好的第一步。它们有一些相反的缺点。类似C的语法不会添加大量额外的字符,但由于歧义、标记的种类以及可能我想不到的其他一些问题,它很难解析。XML相对容易解析并且有很多示例代码,但它也包含很多额外的文本。它还可能为您提供太多支持语言特性的选项——例如,重复循环属性、元素或文本多少次?S表达式确实比XML更简洁,甚至可能比C更简洁。同时,它们特定于对数据应用操作的任务。他们不承认歧义。解析器很简单,示例代码也很容易找到。这可以使您不必在开始实验之前学习尽可能多的理论。我将强调MerickOWA的观点,即ANTLR和其他解析器生成器可能是一场比你现在想要的更大的战斗。请参阅有关programmers.stackexchange的讨论,了解此类工具的全面通用性何时可以提供帮助的一些背景信息。以上就是C#学习教程:详解自定义语言分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
