首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解释自定义语言

解释自定义语言
EN

Stack Overflow用户
提问于 2011-01-07 15:19:25
回答 4查看 1.7K关注 0票数 3

我需要开发一个将读取和理解文本文件的应用程序,在其中我将找到一种自定义语言来描述操作列表(即烹饪食谱)。该语言尚未定义,但它可能会采取以下形式之一:

  • 类似于C++的代码

(这段代码是随机生成的,例如,目的是):

代码语言:javascript
复制
begin
repeat(10)
{
    bar(toto, 10, 1999, xxx);
}
result = foo(xxxx, 10);
if(foo == ok)
{
    ...
}
else
{
    ...
}
end
  • XML代码

(这段代码是随机生成的,例如,目的是):

代码语言:javascript
复制
<recipe>
    <action name="foo" argument"bar, toto, xxx" repeat=10/>
    <action name="bar" argument"xxxxx;10" condition="foo == ok">
        <true>...</true>
        <false>...</false>
    </action>
</recipe>

无论选择哪种语言,都必须处理简单的条件和循环。

我从来没有做过这样的事情,但乍一看,我突然意识到将这些操作描述为XML可能更简单,但功能更弱。

在浏览StackOverFlow之后,我在一个叫做“ANTLR”的工具上找到了一些聊天.我开始阅读“权威的反to参考”,但由于我从来没有做过这样的事情,我很难知道它是否真的是我需要的工具.

换句话说,我需要什么来读取文本文件,正确地解释它,并在我的C#代码中执行操作。这些操作将通过以下简单条件相互作用:

  • 如果operation1失败了,我就做operation2 operation3。
  • 重复operation4 10次。

描述这些文本文件(XML,我自己的)最好的语言是什么?在这些发展过程中,重点是什么?

我希望我能说清楚:)

非常感谢您的帮助和建议!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-07 15:29:15

XML非常适合以冗长的方式存储关系数据。我认为这是一个糟糕的候选人写逻辑,如一个程序,然而。

您是否考虑过使用您可以嵌入的现有语法/脚本语言,而不是编写自己的?例如:

卢阿

Python

票数 3
EN

Stack Overflow用户

发布于 2011-01-07 15:42:05

在我的一个项目中,我实际上是从类似XML的语言开始的,因为我已经有了XML解析器,并将XML结构解析为内存中的表达式树,以便进行解释/运行。

这样可以很好地解决文本文件的标记/解析问题,并将注意力集中在“语言”和语言操作的逻辑上。不利的一面是写的文本文件有点奇怪,非常冗长。对于程序员来说,使用C/C++语法也是非常不自然的。

最终,您可以轻松地用一个完整的扫描器& lexer替换您的XML,以便将更自然的C++文本格式解析到表达式树中。

至于编写扫描器& lexer,我发现用简单的逻辑流/循环(用于扫描器)和递归解析器(递归解析器)来手工编写这些代码比较容易。

也就是说,ANTLR很擅长让你为你的语言写出规则,为你生成扫描仪和词汇。这允许更多的动态语言,这种语言可以很容易地改变,而不必在添加新事物时再次重构所有内容。因此,它可能值得研究,因为它将节省你的大量时间重写,因为事情发生了变化,如果你亲手写你自己。

票数 2
EN

Stack Overflow用户

发布于 2011-01-07 15:34:50

我建议用F#编写这个应用程序。它有许多用于解析字符串和xml的有用特性,比如模式匹配和活动模式。

对于解析类似C的代码,我建议使用F# (刚刚用F#做了一个解释器,工作起来很有魅力)

对于解析XML,我建议使用C#/F# + XmlDocument类。

基本上,您需要处理两个文件:

  • 运算符字典
  • YourLanguage中的代码文件

加载和解释操作符,然后递归地将它们应用到代码文件中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4626999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档