Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parsing 贪婪匹配模式_Parsing_Bnf_Parsekit - Fatal编程技术网

Parsing 贪婪匹配模式

Parsing 贪婪匹配模式,parsing,bnf,parsekit,Parsing,Bnf,Parsekit,我正在制作类似公式验证器的东西,我正在使用ParseKit框架来完成这项工作。我的方法是创建正确的语法,当对示例字符串调用didMatchFormula回调方法时,我假设已经找到了公式,因此它是有效的 然而,有一个困难-从样本字符串中检测公式,即使它还包含公式部分后面的其他字符。我需要类似贪婪模式的东西来进行匹配——整个字符串将与公式语法匹配,这样只有当字符串包含公式而不包含其他字符时,才会调用didMatchFormula 你能给我一些提示,如何用PaseKit或其他方式来实现这一点吗。 我不

我正在制作类似公式验证器的东西,我正在使用ParseKit框架来完成这项工作。我的方法是创建正确的语法,当对示例字符串调用didMatchFormula回调方法时,我假设已经找到了公式,因此它是有效的

然而,有一个困难-从样本字符串中检测公式,即使它还包含公式部分后面的其他字符。我需要类似贪婪模式的东西来进行匹配——整个字符串将与公式语法匹配,这样只有当字符串包含公式而不包含其他字符时,才会调用didMatchFormula

你能给我一些提示,如何用PaseKit或其他方式来实现这一点吗。 我不能使用正则表达式,因为我的公式会使用递归,而regexp不是处理这个问题的好工具。

这里的开发者

使用ParseKit或任何解析工具包进行此操作的最简单和最优雅的方法可能是设计公式语言,在每条语句后都有一个终止符字符。这将是相同的概念;大多数C类编程语言中的终止语句

下面是一个示例玩具公式语言,它使用。作为语句终止符:

@start = lang;
lang = statment+;
statment = Word+ terminator;
terminator = '.';
请注意,我是如何设计语言的,使您的贪婪需求成为语言的固有特征。想想看——如果输入字符串以任何垃圾内容结尾,而垃圾内容不是以a结尾的有效语句,我的语言产品将找不到匹配项,解析将失败


使用这种类型的设计,您将不需要使用parsking工具箱中的任何贪婪特性。相反,您的语言设计自然会满足您的要求。

谢谢Todd,这就是我需要的