【发布时间】:2012-03-25 18:49:51
【问题描述】:
我在玩 Martin Fowlers 文本风格的流畅界面,我想知道他们描述的语法是上下文无关的还是常规的?我说的是这样的接口:
var car = new Car();
car.Configure().MakeCar.With.Wheels(4).And.Engine.Using.Petrol;
我想做的是编写一个可以生成它们的程序。目前它需要输入上下文无关语法,但我似乎很难将其转换为源代码应用程序。我怀疑答案是我只能使用常规语法,因为无法知道“堆栈”的状态,因为必须事先知道每个“终端”方法的结果。
我现在得到的东西有效,但它在某些语法上出错了。
编辑:我使用常规语法,代码是开源的,如果有人热衷于玩弄它,现在可以使用它。 https://github.com/Dervall/Snout
【问题讨论】:
-
它应该是 C# 中的属性,作为示例语言。
-
确实是我的错。由于 Fowler 的提及,我错过了
var并假设是 Java。顺便说一句,从 CFG 生成它的好主意! -
至少是这样的想法,但我认为我们必须满足于常规语法,否则我正在编写错误代码。 :)
标签: fluent-interface context-free-grammar regular-language