Javascript 我可以用交集缩短这个正则表达式吗?

Javascript 我可以用交集缩短这个正则表达式吗?,javascript,regular-language,string-length,Javascript,Regular Language,String Length,我的语言L只包含一个字符串: 写得更简洁 此字符串有2(2^n−1) 角色,我想减少它。 我在考虑使用交集,如果我能找到一些正则语言,它们的正则表达式的交集将产生这个字符串 我这里有一个递归函数,以防有帮助: function recursiveRegex(charset) { if(charset.length == 0) { return []; } else { var char = charset.splice(charset.length - 1, 1); va

我的语言L只包含一个字符串: 写得更简洁

此字符串有2(2^n−1) 角色,我想减少它。 我在考虑使用交集,如果我能找到一些正则语言,它们的正则表达式的交集将产生这个字符串

我这里有一个递归函数,以防有帮助:

function recursiveRegex(charset) {
if(charset.length == 0) {
    return [];
} else {
    var char = charset.splice(charset.length - 1, 1);
    var returnVal = recursiveRegex(charset);
    return returnVal.concat(returnVal) + char ;
}
}

console.log(recursiveRegex(['a1', 'a2', 'a3', 'a4']));

这不是常规语言,因此您无法找到常规语法来定义它

因此,这种语言没有正则表达式

A_1: a_1

A_2: A_1 A_1 a_2

A_3: A_2 A_2 a_3

A_n: A_{n-1} A_{n-1} a_n
该语法定义了您的语言,它不是常规语法

这种语法没有定义常规语言的一个直接证据是,定义这种语言需要的内存位置不止是一个常量。对于给定的
N
,需要一个取决于
N
的数字来保留
N
第个单词


将每个左符号视为内存的一个位置。如果你想让它规则化,你应该有有限的规则。如果需要将其设为有限,则应这样做:

原子:a1

规则{n+1}:原子{124n规则{n+1}


要正确创建这种语言,您需要一个计数器,以便知道在每一时刻插入什么内容。但是不可能使用正则语法创建任何类型的计数器。

您的问题是什么?您能告诉我们使用交集来描述您的语言的语法吗?假设您可以在正则表达式中使用交集运算符。我想通过使用这n个符号交叉不同种类的语言来生成字符串来缩短此正则表达式。为什么不将函数的参数设置为
函数f(begin,end)
?您能详细说明一下吗?嗯,您确定不是吗。该语言仅包含该字符串。如果你能提供证据的话。我只是想用一种更短的方式来描述这种语言,使用标准操作(串联、并集和Kleene星形)和交集来减少字符串的长度。这种语法是如何生成字符串的呢?那里只有两个符号a1和a2,而字符串只有a1,直到