我需要开发一个将读取和理解文本文件的应用程序,在其中我将找到一种自定义语言来描述操作列表(即烹饪食谱)。该语言尚未定义,但它可能会采取以下形式之一:
(这段代码是随机生成的,例如,目的是):
begin
repeat(10)
{
bar(toto, 10, 1999, xxx);
}
result = foo(xxxx, 10);
if(foo == ok)
{
...
}
else
{
...
}
end(这段代码是随机生成的,例如,目的是):
<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#代码中执行操作。这些操作将通过以下简单条件相互作用:
描述这些文本文件(XML,我自己的)最好的语言是什么?在这些发展过程中,重点是什么?
我希望我能说清楚:)
非常感谢您的帮助和建议!
发布于 2011-01-07 15:29:15
XML非常适合以冗长的方式存储关系数据。我认为这是一个糟糕的候选人写逻辑,如一个程序,然而。
您是否考虑过使用您可以嵌入的现有语法/脚本语言,而不是编写自己的?例如:
卢阿
Python
发布于 2011-01-07 15:42:05
在我的一个项目中,我实际上是从类似XML的语言开始的,因为我已经有了XML解析器,并将XML结构解析为内存中的表达式树,以便进行解释/运行。
这样可以很好地解决文本文件的标记/解析问题,并将注意力集中在“语言”和语言操作的逻辑上。不利的一面是写的文本文件有点奇怪,非常冗长。对于程序员来说,使用C/C++语法也是非常不自然的。
最终,您可以轻松地用一个完整的扫描器& lexer替换您的XML,以便将更自然的C++文本格式解析到表达式树中。
至于编写扫描器& lexer,我发现用简单的逻辑流/循环(用于扫描器)和递归解析器(递归解析器)来手工编写这些代码比较容易。
也就是说,ANTLR很擅长让你为你的语言写出规则,为你生成扫描仪和词汇。这允许更多的动态语言,这种语言可以很容易地改变,而不必在添加新事物时再次重构所有内容。因此,它可能值得研究,因为它将节省你的大量时间重写,因为事情发生了变化,如果你亲手写你自己。
发布于 2011-01-07 15:34:50
我建议用F#编写这个应用程序。它有许多用于解析字符串和xml的有用特性,比如模式匹配和活动模式。
对于解析类似C的代码,我建议使用F# (刚刚用F#做了一个解释器,工作起来很有魅力)
对于解析XML,我建议使用C#/F# + XmlDocument类。
基本上,您需要处理两个文件:
加载和解释操作符,然后递归地将它们应用到代码文件中。
https://stackoverflow.com/questions/4626999
复制相似问题