首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模式匹配语言知识,模式匹配方法

模式匹配语言知识,模式匹配方法
EN

Stack Overflow用户
提问于 2014-01-29 04:23:24
回答 2查看 113关注 0票数 0

我正在尝试实现一个匹配“语法”和语言的模式。我知道正则表达式,但这些对我的作用域来说还不够。我对一些“数学”运算符进行了个性化。在下面的示例中,我将假设模式数学的主题是字符串,但这并不是必需的。

读过下面的描述后:问题是,有没有人知道一种数学理论来解释这一点,或者任何采取同样方法实现它的语言?我想看看它,以便有想法!

方法的描述:

一开始我们有角色。字符可以被聚集以形成字符串。

模式是: 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+等。

我必须补充说,同样的事实,试图问这个问题已经帮助了我,并澄清了我的一些事情。但我想知道类似的方法,以便研究它们。请只使用您使用的语言,而不是参考书目!

EN

回答 2

Stack Overflow用户

发布于 2014-02-10 07:39:25

我建议你看看这篇论文"Parsing Permutation Phrases"。它处理以任何顺序识别一组事物,其中“事物”本身可以是识别器。论文中的演示文稿可能与您预期的稍有不同;它们不会编译为有限自动机。然而,他们确实给出了一个函数式语言的实现,这对你应该很有帮助。

票数 1
EN

Stack Overflow用户

发布于 2014-03-15 22:33:10

您对模式匹配字符串的描述正是编译器所做的事情。特别是,您对多个潜在匹配的描述非常容易让人联想到LR解析器的工作方式。

如果模式是静态的,并且可以由EBNF描述,那么您可以使用LR解析器生成器(例如YACC)来生成识别器。

如果模式是动态的,但仍然可以表示为EBNF,那么还可以应用其他工具。它只是变得有点复杂。

至少在澳大利亚,计算机科学是1975年的一门大学课程,当时我正在做我的工作。YACC的原始形式可以追溯到1970年左右。EBNF甚至更老。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21416002

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档