因此,我们定义了一组API,最终用户(精确的功能人员)将用于执行数据转换。例如,对于输入Name = "XyZ"
,功能人员可以定义转换规则,如@Text.UpperCase(Name)
,将name
获取的每个值转换为大写。它的工作方式是在@
之后定义的每个单词都是数据类型,在.
之后定义的每个单词都是一个后跟括号和值的方法。虽然这是我们计划的,但我想弄清楚是否:
1>我们真的需要一个用于解析这些输入的语法吗?
2 - ;如何安排嵌套调用,如@Text.UpperCase(@Text.trim("XyZ "))
?
答案 0 :(得分:1)
您应该定义一个语法,以确保您知道允许用户键入的内容。
如果您的语法足够简单,您可能不需要解析器生成器(例如,您的用户可以键入的唯一内容是对命名变量进行有效的函数调用)。在这种情况下,临时解析可能就足够了。这对你的简单例子来说已经足够了。
如果您的语法具有适度的复杂性(例如,嵌套调用),you can code a recursive descent parser pretty easily that will do the job.
如果你的语法变得复杂(用户肯定会要求更多的功能),你可能需要一个解析器生成器。
如果是我,根据你所说的要求,我会在编写一个语法之后建立递归下降版本,我有一个解析器生成器可以接受。这也是ahem用户手册中的有用文档。