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

我正在尝试实现匹配“语法”和语言的模式。 我知道正则表达式,但这些对于我的示波器是不够的。 我已经个别化了一些“数学”运算符。 在下面的例子中,我会假设模式主题是字符串,但它不是必需的。

阅读下面的描述:问题是,任何机构是否知道明确的数学理论或任何采用相同方法实现它的语言? 我想看看它,以便有想法!

方法的描述:

起初我们有角色。 字符可能会聚合形成字符串。

一个模式是:a)单个字符b)有序运算符组matchAny的模式组c)有运算符matchAll的有序模式组d)其他不同的运算符稍后会看到。

说明:我们有一个主题字符串和一个起始位置。

如果我们检查单个字符的匹配,那么如果匹配,则将当前位置向前移动一个位置。

如果我们检查一组有序的模式与运算符matchAny的匹配,那么它将依次检查组中的每个元素,并且我们将会扩大开始位置,这将会乘以可能匹配的数量比赛的长度。

EG假设模式组为{“a”“aba”“ab”“x”“dd”},被检查的字符串为:当前位置为2(从1开始计数)的“Dabaxddc”。 然后,将matchAny与前一组相匹配,我们就会发现“a”数学“aba”匹配和“ab”匹配,而“x”和“dd”不匹配。 在进行这些比赛之后,有3个起始位置3 4 5(对应于“a”“ab”“aba”)。

我们可以通过接受多于一个的起始位置来继续我们的模式匹配。 所以现在我们可能会继续审查下一个案件,并检查一个匹配。 matchAll表示所有模式必须按顺序匹配并按顺序应用。 matchAll的子类是match0 + match1 +等

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


我建议你看看“解析排列短语”一文。 它涉及以任何顺序识别一组事物,其中“事物”可以是识别器本身。 报告中的介绍可能与您所期望的有所不同; 他们不编译为有穷自动机。 但是,它们确实以功能性语言提供了实现,并且对您有所帮助。


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

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

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

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

链接地址: http://www.djcxy.com/p/62635.html

上一篇: Pattern matching language knowledge, pattern matching approach

下一篇: Scala `match` and `val` do not compile in a view template