我想知道如何在Javascript中使用Regex进行相互递归。
例如,识别语言{a ^ n b ^ n}的正则表达式将是/ $ 0b /其中$ 0代表当前正则表达式。这将是基本的递归。
相互递归是相同的,但具有不同的正则表达式。
我们如何使用Javascript完成它?
感谢您的回答!
答案 0 :(得分:0)
不幸的是,Javascript不支持递归正则表达式。
您可以实现一个基本的递归函数,检查第一个和最后一个字母(以确保它们分别是a
和b
)以及对内部字符串的递归调用({{1在你的例子中)。
首先,你会发现这种语言产生的短语具有严格的偶数字母,因此你可以实施支票以便尽早爆发。
其次,你唯一的其他失败案例是两端的字母是否匹配。
您可以将任何其他正则表达式映射到此类测试器功能。要实现相互递归的,只需从另一个函数调用一个函数。
要真正体现有限状态机,请在执行检查时通过令牌进行令牌;对于上面的示例,首先检查您在开头是否有$0
,然后递归,然后在最后检查a
。
您所描述的b
语言甚至不是regular language,因此相互递归的语言将远离它。您不能在Javascript中使用正则表达式引擎来生成相互递归的语言,这就是为什么您需要编写有限状态机来一次获取一个令牌并在遇到匹配时继续进入下一个状态。