首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对于我应该采用的mud/交互式小说解析器的方法感到困惑

对于我应该采用的mud/交互式小说解析器的方法感到困惑
EN

Stack Overflow用户
提问于 2013-01-26 12:22:16
回答 2查看 1.4K关注 0票数 3

让我想要编程的第一件事是创建一个多人文本游戏。不过,当我意识到(至少在当时)编写一个智能解析器是多么的复杂时,我被这个概念吓了一跳。

所以现在我又开始思考这个问题了,我试着对这个问题做了很多研究。结果似乎比我想的要复杂得多,我偶然发现了一些术语,比如词汇、标记和解析,只有后者我以前就知道了。我认为词汇分析领域是我想要寻找的。

所以,我没有尝试创建我自己的词汇和解析器,我读到它非常困难,而且容易出错,大多数人指示我远离它,我想我会找到一个很好的词汇和解析器生成器,它应该为我做所有的繁重工作,我可以专注于我想要的语法。我也听过很多人说,想要做这样一件事的人应该简单地使用Inform

当然,我想信息是很酷的,但是C#是我选择的语言,我喜欢它允许我的自由,而不是我感知到的信息。我更感兴趣的是创建多人文本游戏的所有组件和框架,而不是任何一个特定的最终结果,因此我最喜欢使用标准编程语言的想法。

有一段时间以来,我一直试图为C#找到一个很好的词汇/解析器生成器,但对人们给出的评论似乎并不满意。

对于C#来说,antlr似乎是不发达的,而且大多是事后考虑。我试着理解GPLEX和GPPG,但现在它们对我来说太混乱了,尽管我阅读了大量的文档,并试图阅读很多关于词汇的一般内容。

我脑子里有很多关于词汇的概念,但是当面对一个词汇和解析器时,我想我真的不知道这些应该如何被划分到我的实际代码中。

我想要用名词短语和动词短语建立一个简单的英语语法,并且能够在游戏开发和扩展的过程中从数据库中动态添加和准备名词和动词的列表。

我想我觉得我对这一课题的研究结果不够充分。

老实说,基于我研究过的词汇和解析器创建我自己的私生子概念的想法,在这一点上似乎比我所读过的任何词汇/解析器生成器更有吸引力。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-26 16:51:15

首先,一些元建议。对于StackOverflow来说,这可能不是一个很大的问题,因为它不是一个特定的技术问题。您可以考虑在Programmers.StackExchange.com上提出这样的问题。

要回答你的问题:我同意理发师的观点,这取决于你想在这里提高什么技能。人们偶尔会问我为什么不造一艘船,因为我很方便,喜欢航海。因为你只应该建造一艘船,如果你喜欢有一个未完成的船在你的车库两年。如果你想出海,那就启航。如果你想造一艘船,那就造一艘船。但不要造一艘船因为你想航行。如果你想写一个文本冒险,学习Inform7;它是世界上所见过的最棒的文本冒险工具。如果您想学习如何制作一个词汇和解析器,那么就不要乱搞解析器生成器。制作一个词汇和解析器。

如果您正在创建一种新的编程语言,并且您想要快速运行,那么解析器生成器是很棒的。但是编程语言语法可以具有非常好的特性,使它们能够以自然语言不具备的方式自动生成解析器。如果使用解析器生成器的方法,您可能会花费与构建语法一样的时间与解析器生成器进行斗争。

既然你是这方面的初学者,我建议你重述一下文字冒险的历史。首先编写一个词汇和解析器,它可以解析两个单词的命令:“向北走”、“获得剑”、“扔砖头”等等。这将为您提供足够的灵活性,然后您可以开始解决文本冒险设计中的其他问题:如何表示对象和位置。从小开始,如果你可以做一个两室的游戏,玩家可以拿起并放下物品,你就可以在路上了。

总之,我强烈鼓励你跟随你的直觉;写你自己的词汇和解析器是非常有趣的,如果你从小的地方开始,往上爬的话,其实也没那么难。

票数 10
EN

Stack Overflow用户

发布于 2013-01-26 14:43:04

这取决于你想从项目中得到什么。

如果这是一个学习项目在您的业余时间,滚动您自己的令牌和解释器是一个很好的解决方案。虽然很难完美地做到这一点,但是很容易创建一个足够的解析层。我建议您从最起码的解析层开始,并在游戏中添加丰富的内容时对其进行逐步改进。如果您对TDD和设计模式感兴趣,这是一个很好的问题。使用这些实践将使逐步改进变得更容易。

另一方面,如果你不能从这个练习中获得很多价值(你在一个很紧的时间线上,这是真正的工作,你只是不关心解析层,等等),那么我建议使用一个现有的解析器。如果您将第三方解析器封装在抽象后面,您可以在稍后更改自己编写解析器或使用哪个解析器的问题上的想法。

您可能已经看到了,但是this SO question看起来有一个很好的c#解析器列表。

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

https://stackoverflow.com/questions/14536906

复制
相关文章

相似问题

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