我正在尝试实现一个匹配“语法”和语言的模式。我知道正则表达式,但这些对我的作用域来说还不够。我对一些“数学”运算符进行了个性化。在下面的示例中,我将假设模式数学的主题是字符串,但这并不是必需的。
读过下面的描述后:问题是,有没有人知道一种数学理论来解释这一点,或者任何采取同样方法实现它的语言?我想看看它,以便有想法!
方法的描述:
一开始我们有角色。字符可以被聚集以形成字符串。
模式是: a)单个字符b)具有运算符matchAny的有序模式组c)具有运算符matchAll的有序模式组d)稍后将看到的其它各种运算符。
说明:我们有一个主题字符串和一个起始位置。
如果我们检查单个字符是否匹配,如果匹配,则将当前位置向前移动一个位置。
如果我们使用运算符matchAny检查有序的模式组的匹配,那么它将按顺序检查组中的每个元素,并且我们将有大量的起始位置,这些位置将乘以匹配长度的可能匹配的数量。
例如,假设模式组是{ "a“"aba”"ab“"x”"dd“},正在检查的字符串是:"Dabaxddc”,当前位置为2(从1开始计数)。然后将matchAny应用于前一组,我们得到"a“数学"aba”匹配,"ab“匹配,而"x”和"dd“不匹配。在有这些匹配之后,有3个起始位置3 4 5(对应于"a“"ab”"aba“)。
我们可以通过接受多个起始位置来继续我们的模式匹配。因此,现在我们可以继续检查下一个案例,检查是否存在matchAll。matchAll意味着所有模式必须按顺序匹配,并按顺序应用。matchAll的子例有match0+、match1+等。
我必须补充说,同样的事实,试图问这个问题已经帮助了我,并澄清了我的一些事情。但我想知道类似的方法,以便研究它们。请只使用您使用的语言,而不是参考书目!
发布于 2014-02-10 07:39:25
我建议你看看这篇论文"Parsing Permutation Phrases"。它处理以任何顺序识别一组事物,其中“事物”本身可以是识别器。论文中的演示文稿可能与您预期的稍有不同;它们不会编译为有限自动机。然而,他们确实给出了一个函数式语言的实现,这对你应该很有帮助。
发布于 2014-03-15 22:33:10
您对模式匹配字符串的描述正是编译器所做的事情。特别是,您对多个潜在匹配的描述非常容易让人联想到LR解析器的工作方式。
如果模式是静态的,并且可以由EBNF描述,那么您可以使用LR解析器生成器(例如YACC)来生成识别器。
如果模式是动态的,但仍然可以表示为EBNF,那么还可以应用其他工具。它只是变得有点复杂。
至少在澳大利亚,计算机科学是1975年的一门大学课程,当时我正在做我的工作。YACC的原始形式可以追溯到1970年左右。EBNF甚至更老。
https://stackoverflow.com/questions/21416002
复制相似问题