c# – 对于泥浆/互动小说解析器我应采取的方法感到困惑
作者:互联网
让我想要编程的第一件事就是创建一个多人文本游戏.当我意识到,至少在我看来,写一个智能解析器会有多复杂的时候,我很害怕这个概念.
所以现在我回过头来思考它,并且我试图对这个问题进行大量的研究.事实证明它似乎比我想象的要多得多,而且我偶然发现了诸如lexing,tokenizing和parsing之类的术语,只有我之前知道的后者.我认为词法分析领域是我想要寻找的.
因此,我没有尝试创建我自己的词法分析器和解析器,而这些词法分析器我读过很困难且容易出错,并且大多数人都指示远离它,我想我会找到一个好的词法分析器和解析器生成器来使用,这应该是对我来说,所有繁重的工作都可以集中在我想要的语法上.我也听到很多人说想要做这样事情的人应该只使用Inform.
当然,我猜Inform很酷,但C#是我选择的语言,我喜欢它让我对自己认为的Inform提供的自由.我对创建多人文本游戏的所有组件和框架比在任何一个特定的最终结果中更感兴趣,所以我喜欢最好使用标准编程语言的想法.
我一直试图为C#找一个好的词法分析器/解析器生成器一段时间,对于人们给出的评论而言似乎并没有真正满意.
C#的antlr似乎不发达,大多是事后的想法.
我已经尝试过了解GPLEX和GPPG但是现在它们对我来说太混乱了,尽管阅读了很多文档并试图阅读很多关于lexing的内容.
我脑子里有很多关于lexing的整个过程的概念,但是当面对词法分析器和解析器时,我想我真的不知道这些应该如何被嵌入到我的实际代码中.
我想用名词短语和动词短语构建一个简单的英语语法,并且能够拥有名词和动词列表,这些名词和动词可以随着游戏的开发和扩展而从数据库中动态添加和准备.
我想我觉得我对这个问题的研究结果很不满意.
说实话,基于我研究的内容创建自己的词法分析器和解析器的概念的想法在这一点上比使用我读过的任何词法分析器/解析器生成器更有吸引力.
解决方法:
首先,一些元建议.对于StackOverflow而言,这可能不是一个很好的问题,因为它不是特定的技术问题.您可以考虑在Programmers.StackExchange.com上提出类似的问题.
解决你的问题:我同意这个问题;这取决于你想在这里改进的技能.人们偶尔会问我为什么不建造船只,因为我相当方便,喜欢航行.因为如果你想在你的车库里放一艘未完成的船两年,你应该只建造一艘船.如果你想帆,帆.如果你想建造一艘船,建造一艘船.但是不要因为想要航行而建造一艘船.如果你想写文字冒险,学习Inform7;它是制作世界上见过的文字冒险的最令人难以置信的绝佳工具.如果你想学习如何制作词法分析器和解析器,那么不要乱用解析器生成器.做一个词法分析器和解析器.
如果您正在为一种新的编程语言进行原型设计并希望快速开始,那么解析器生成器就很棒.但是编程语言语法可以具有非常好的属性,使得它们能够以自然语言不能自动生成解析器的方式生成.如果你使用解析器生成器方法,你可能会花费尽可能多的时间与解析器生成器进行斗争.
既然你是初学者,我建议你概括一下文本冒险的历史.首先编写一个可以解析双字命令的词法分析器和解析器:“go north”,“get sword”,“drop brick”等等.这将为您提供足够的灵活性,然后您可以开始解决文本冒险设计中的其他问题:如何表示对象和位置.从小开始;如果你可以制作一个两个房间的游戏,玩家可以拿起并放下物品,那么你就可以了.
简而言之,我强烈建议你遵循自己的直觉;编写自己的词法分析器和解析器非常有趣,实际上并不那么难,如果你从小做起并继续努力.
标签:c,net,parsing,lex 来源: https://codeday.me/bug/20190714/1460854.html