实际上,也许不是全面的Lex/Yacc.我正在实现一个命令解释器前端来管理webapp.我正在寻找一些能够进行语法定义并将其转换为直接调用我的对象上的方法的解析器的东西.类似于ASP.NET MVC如何确定要调用哪个控制器方法,以及如何编写参数.
因此,如果用户在命令提示符下键入"create foo",它应该透明地调用方法:
private void Create(string id) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
哦,如果它可以从这些控制器方法的(例如)属性生成帮助文本,那也是很棒的.
让我想要编程的第一件事就是创建一个多人文本游戏.当我意识到,至少在我看来,写一个智能解析器会有多复杂的时候,我很害怕这个概念.
所以现在我回过头来思考它,并且我试图对这个问题进行大量的研究.事实证明它似乎比我想象的要多得多,而且我偶然发现了诸如lexing,tokenizing和parsing之类的术语,只有我之前知道的后者.我认为词法分析领域是我想要寻找的.
因此,我没有尝试创建我自己的词法分析器和解析器,而这些词法分析器我读过很困难且容易出错,并且大多数人都指示远离它,我想我会找到一个好的词法分析器和解析器生成器来使用,这应该是对我来说,所有繁重的工作都可以集中在我想要的语法上.我也听过很多人说过想做这种事情的人应该简单地使用Inform.
当然,我猜Inform很酷,但C#是我选择的语言,我喜欢它让我对自己认为的Inform提供的自由.我对创建多人文本游戏的所有组件和框架比在任何一个特定的最终结果中更感兴趣,所以我喜欢最好使用标准编程语言的想法.
我一直试图为C#找一个好的词法分析器/解析器生成器一段时间,对于人们给出的评论而言似乎并没有真正满意.
C#的antlr似乎不发达,大多是事后的想法.我已经尝试过了解GPLEX和GPPG但是现在它们对我来说太混乱了,尽管阅读了很多文档并试图阅读很多关于lexing的内容.
我脑子里有很多关于lexing的整个过程的概念,但是当面对词法分析器和解析器时,我想我真的不知道这些应该如何被嵌入到我的实际代码中.
我想用名词短语和动词短语构建一个简单的英语语法,并且能够拥有名词和动词列表,这些名词和动词可以随着游戏的开发和扩展而从数据库中动态添加和准备.
我想我觉得我对这个问题的研究结果很不满意.
说实话,基于我研究的内容创建自己的词法分析器和解析器的概念的想法在这一点上比使用我读过的任何词法分析器/解析器生成器更具吸引力.