Questions tagged «regular-expressions»

有关正则表达式的问题,一种描述正则语言的形式主义。

3
如何不使用NFA从正则表达式创建DFA?
目标是从正则表达式创建DFA,并且不能使用“ Regular exp> NFA> DFA转换”。应该怎么做呢? 我向我们的教授问了这个问题,但他告诉我,我们可以使用直觉,并拒绝提供任何解释。所以我想问你。 不能选择“正则表达式> NFA> DFA转换”,因为这样的转换要花费大量时间来转换一个相当复杂的正则表达式。例如,对于某个正则表达式,“ regex> NFA> DFA”对于人类来说要花费1个小时。我需要在不到30分钟的时间内将正则表达式转换为DFA。

2
正则表达式语言是否需要下推自动机进行解析?
我想将用户输入的正则表达式转换为NFA,以便随后可以对字符串运行NFA以进行匹配。可用于解析正则表达式的最低机器是什么? 我认为它必须是下推式自动机,因为方括号的含义意味着需要计数,而DFA / NFA不能执行任意计数。这个假设正确吗?例如,表达式a(bc *)d需要使用PDA,以便正确处理括号中的子表达式。

3
为什么用联合,串联和星号运算定义正则表达式?
甲定期expresssion递归定义 aaa对某些a∈Σa∈Σa \in \Sigma是正则表达式, εε\varepsilon是一个正则表达式, ∅∅\emptyset是一个正则表达式, (R1∪R2)(R1∪R2)(R_1 \cup R_2),其中R1R1R_1和R2R2R_2是正则表达式是一个正则表达式, (R1∘R2)(R1∘R2)(R_1 \circ R_2),其中R1R1R_1和R2R2R_2是正则表达式是一个正则表达式, (R1)∗(R1)∗(R_1)^*其中R1R1R_1是正则表达式是正则表达式。 该定义摘自第64页的 西普瑟,迈克尔。计算理论导论,第三版。参与学习,2012年。 现在,我有以下问题。 为什么不定义包含intersection,complement或者reverse操作? 如果我们改变了第4项,我们得到一个等价定义,即,对于每个普通的语言,有修改的正则表达式,反之亦然?R1∩R2R1∩R2R_1 \cap R_2 我知道此定义是完整且定义明确的,但是为什么它比其他等效的,定义良好且完整的定义更可取呢?

1
推断优化类型
在工作中,我的任务是推断一些有关动态语言的类型信息。我将语句序列重写为嵌套let表达式,如下所示: return x; Z => x var x; Z => let x = undefined in Z x = y; Z => let x = y in Z if x then T else F; Z => if x then { T; Z } else { F; Z } 由于我从一般类型信息开始,并试图推断出更具体的类型,因此自然的选择是精简类型。例如,条件运算符返回其真假分支类型的并集。在简单的情况下,它效果很好。 但是,在尝试推断以下类型时遇到了障碍: function …
11 programming-languages  logic  type-theory  type-inference  machine-learning  data-mining  clustering  order-theory  reference-request  information-theory  entropy  algorithms  algorithm-analysis  space-complexity  lower-bounds  formal-languages  computability  formal-grammars  context-free  parsing  complexity-theory  time-complexity  terminology  turing-machines  nondeterminism  programming-languages  semantics  operational-semantics  complexity-theory  time-complexity  complexity-theory  reference-request  turing-machines  machine-models  simulation  graphs  probability-theory  data-structures  terminology  distributed-systems  hash-tables  history  terminology  programming-languages  meta-programming  terminology  formal-grammars  compilers  algorithms  search-algorithms  formal-languages  regular-languages  complexity-theory  satisfiability  sat-solvers  factoring  algorithms  randomized-algorithms  streaming-algorithm  in-place  algorithms  numerical-analysis  regular-languages  automata  finite-automata  regular-expressions  algorithms  data-structures  efficiency  coding-theory  algorithms  graph-theory  reference-request  education  books  formal-languages  context-free  proof-techniques  algorithms  graph-theory  greedy-algorithms  matroids  complexity-theory  graph-theory  np-complete  intuition  complexity-theory  np-complete  traveling-salesman  algorithms  graphs  probabilistic-algorithms  weighted-graphs  data-structures  time-complexity  priority-queues  computability  turing-machines  automata  pushdown-automata  algorithms  graphs  binary-trees  algorithms  algorithm-analysis  spanning-trees  terminology  asymptotics  landau-notation  algorithms  graph-theory  network-flow  terminology  computability  undecidability  rice-theorem  algorithms  data-structures  computational-geometry 


2
确定两个正则表达式是否等效的算法
给定两个任意的正则表达式,是否存在一种“高效”算法来确定它们是否与同一组字符串匹配? 更笼统地说,我们可以计算两个匹配集的交集大小吗? 有哪些算法可以做到这一点,它们所处的复杂性等级是什么? 如果我们不允许Kleene星,那是否完全改变了图片?

1
从一组基本语言和闭包属性构造所有无上下文语言?
查看正则表达式的一种方法是对以下事实的结构性证明:可以通过从少量语言开始并通过一组固定的较小闭包属性来组合正则语言来构造正则语言。具体来说,如果我们以空语言,包含空字符串的语言以及所有单字符字符串的语言开始,则可以使用并集,串联和Kleene星号来组合所有可能的常规语言。 是否有一组基本语言和闭包属性可用于生成所有且仅上下文无关的语言?(要澄清:我不是问您是否可以为所有CFL编写正则表达式,我知道这是不可能的。相反,我想知道是否有一种方法可以基于CFL为CFL设计类似正则表达式的框架相同的基本原则。)

3
正则表达式可以是无限的吗?
我知道可以使用正则表达式定义的语言和DFA / NFA(有限自动机)可以识别的语言是等效的。同样,语言也不存在DFA 。但是仍然可以使用正则表达式(就此而言,任何非正则语言都可以)来编写。但是我们知道,每一种具有正则表达式的语言都具有可以识别该正则表达式的DFA(与我之前的声明相矛盾)。我知道这是一件微不足道的事情,但是正则表达式的定义是否包含它应该是有限的条件?{ ε } ∪ { 01 } ∪ { 0011 } 。。。。。。{ 0ñ1个ñ| Ñ≥0}{0n1n|n≥0}\{0^n1^n|n \ge 0\}{ ε } ∪ { 01 } ∪ { 0011 } 。。。。。。{ϵ}∪{01}∪{0011}.....。\{ \epsilon \} \cup \{01\} \cup \{0011\}......

3
DFA用于接受的形式的功率的所有二进制字符串
我们可以形成DFA接受可以被整除的二进制数nnn。 例如,接受DFA的二进制数可以被2整除的格式如下: 类似地,可以将DFA接受可以被3整除的二进制数字,其格式如下: 我们可以按照定义明确的程序来形成这些类型的DFA。但是,是否可以使用任何明确定义的过程或更准确地说形成DFA接受形式的数字的逻辑?nknkn^k 例如,让我们考虑DFA接受格式为所有数字。这个语言是{ 1 ,10 ,100 ,1000 ,。。。},因此有正则表达式10 ∗。我们可以按照以下方式形成DFA: 2k2k2^k{1,10,100,1000,...}{1,10,100,1000,...}\{1,10,100,1000,...\}10∗10∗10^* 我尝试为和类似的对象形成DFA ?但未能做到。还是仅仅是它的2 n个二进制等价物的模式使得创建DFA成为可能,而我们不能形成DFA来接受特定n的所有形式为n k的二进制数?3k3k3^k2n2n2^nnknkn^knnn

1
regexp何时不是正则表达式?
自从我学习我的正式语言大学课程,我偶然发现了这些迷人的职位(一 两),它描述了如何使用一个找到一个素数的正则表达式。正如我所说的,是regexp而不是正则表达式。由于正则表达式可以匹配有限状态自动机计算的字符串,而FSA不能找到素数,因此博客文章中显示的regexp并不完全是正则表达式,因为它会回溯以匹配字符串。 由于我从未真正使用过任何正则表达式,因此,我的问题是: 我如何仅通过查看就可以从“真正的”正则表达式中立即识别出一个正则表达式? 定义:通过正则表达式,我指的是形式语言中定义的概念。regexp是指现代编程语言支持的概念。regexp语法通常包含其他功能,例如反向引用。在编程语言中看到的正则表达式严格比形式语言样式的正则表达式更强大。

3
是正常吗?
几周前,我参加了计算机考试理论考试,这是一个问题: 假设语言L = { (añb米)[R| Ñ ,米,- [R ≥ 0 }大号={(一个ñb米)[R∣ñ,米,[R≥0}L=\{(a^nb^m)^r \mid n,m,r\ge 0\} L是正规的吗?如果是,请为其提供正则表达式或自动机。 在考试后我简短地问了他答案之后,看来它确实是正规的(我相信他说的表达很简单)。但是我似乎无法理解为什么。我看到它的方式,它串联 [R倍,像这样:(一个∗b∗)∗(一个∗b∗)∗(a^*b^*)^*一个ñb米一个ñb米a^nb^m 一个ñb米一个ñb米一个ñb米。。。一个ñb米一个ñb米一个ñb米一个ñb米一个ñb米。。。一个ñb米一个ñb米a^nb^ma^nb^ma^nb^m...a^nb^ma^nb^m, 这是不规则的,因为自动机无法每次都调用n和m。我在哪里错? 编辑:我再次与教授交谈,他承认这是一个错误。该语言的确不正常。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.