タグ付けされた質問 「regular-expressions」

正規表現に関する質問、正規言語を記述するための形式主義。

3
NFAを使用せずに正規表現からDFAを作成する方法は?
目的は、正規表現からDFAを作成することであり、「通常のexp> NFA> DFA変換」を使用することはオプションではありません。それをどのように行うべきですか? 私は教授にこの質問をしましたが、彼は私たちが直観を使うことができると言って、親切に説明を拒否しました。だから私はあなたに尋ねたかった。 「通常のexp> NFA> DFA変換」はオプションではありません。そのような変換は、かなり複雑な正規表現を変換するのに多くの時間がかかるからです。たとえば、特定の正規表現「regex> NFA> DFA」の場合、人間には1時間かかります。30分以内に正規表現をDFAに変換する必要があります。

2
正規表現の言語は、それを解析するためにプッシュダウンオートマトンを必要としますか?
ユーザーが入力した正規表現をNFAに変換して、マッチングのために文字列に対してNFAを実行できるようにします。正規表現の解析に使用できる最小マシンは何ですか? 括弧の意味はカウントの必要性を意味し、DFA / NFAは任意のカウントを実行できないため、プッシュダウンオートマトンである必要があると思います。この仮定は正しいですか?たとえば、式a(bc *)dはPDAを必要とするため、括弧内の部分式が正しく処理されます。

3
なぜ正規表現は共用体、連結、スター演算で定義されているのですか?
定期expresssionは再帰的に定義されます いくつかのために、A ∈ Σは、正規表現ですaaaa∈Σa∈Σa \in \Sigma は正規表現です。εε\varepsilon は正規表現です。∅∅\emptyset ここで、 R 1及び R 2は、正規表現では、正規表現であります(R1∪R2)(R1∪R2)(R_1 \cup R_2)R1R1R_1R2R2R_2 ここで、 R 1及び R 2は、正規表現では、正規表現であります(R1∘R2)(R1∘R2)(R_1 \circ R_2)R1R1R_1R2R2R_2 ここで、 R 1は正規表現であり、正規表現です。(R1)∗(R1)∗(R_1)^*R1R1R_1 この定義は、64ページの シプサー、マイケル。計算理論入門、第3版。Cengage Learning、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 } 一般的なタイプ情報から始めて、より具体的なタイプを推測しようとしているので、自然な選択は絞り込みタイプです。たとえば、条件演算子は、trueブランチとfalseブランチの型の和集合を返します。単純なケースでは、非常にうまく機能します。 ただし、次のタイプを推測しようとしたときに、思わぬ障害に遭遇しました。 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 

3
重複するサイクルを持つNFAを正規表現に変換する方法は?
私が正しく理解すれば、NFAには正規表現と同じ表現力があります。多くの場合、NFAから同等の正規表現を読み取るのは簡単です。サイクルを星に変換したり、ジャンクションを代替として変換したりします。しかし、この場合何をすべきか: [ ソース ] オーバーラップするサイクルにより、このオートマトンが何を受け入れるか(正規表現に関して)がわかりにくくなります。トリックはありますか?

2
2つの正規表現が等しいかどうかを判断するアルゴリズム
2つの任意の正規表現が与えられた場合、それらが同じ文字列のセットと一致するかどうかを判断するための「効率的な」アルゴリズムはありますか? より一般的には、2つの一致セットの共通部分のサイズを計算できますか? これを行うにはどのアルゴリズムがあり、それらはどの複雑なクラスに住んでいますか? クリーネスターを許可しない場合、それによって画像が変更されますか?

1
基本言語とクロージャプロパティのセットからすべての文脈自由言語を構築しますか?
正規表現を見る1つの方法は、次の事実の建設的な証明としてです。小さな言語のセットから始めて、小さな固定された一連のクロージャープロパティを介してそれらを組み合わせることにより、正規言語を構築することが可能です。具体的には、空の言語、空の文字列を含む言語、およびすべての1文字の文字列の言語から始める場合、ユニオン、連結、およびKleeneスターを使用して、すべての可能な通常の言語を組み立てることができます。 すべてのコンテキストフリー言語のみを生成するために使用できる基本言語とクロージャープロパティのセットはありますか?(明確にするために、私はすべてのCFLに正規表現を記述できるかどうかを尋ねていませんが、不可能であることを知っています。代わりに、CFLの正規表現のようなフレームワークを設計する方法があるかどうか疑問に思っています。同じ基本原則。)

3
正規表現は無限にできますか?
正規表現を使用して定義できる言語とDFA / NFA(有限オートマトン)で認識できる言語は同等であることを知っています。また、言語のDFAも存在しません{0n1n|n≥0}{0n1n|n≥0}\{0^n1^n|n \ge 0\}。しかし、それでも、正規表現を使用して(つまり、非正規言語を使用できます)、{ ϵ } ∪ { 01 } ∪ { 0011 }として記述できます。。。。。。{ϵ}∪{01}∪{0011}......{ϵ}∪{01}∪{0011}......\{ \epsilon \} \cup \{01\} \cup \{0011\}......。しかし、正規表現を持つすべての言語には、それを認識するDFAがあることがわかっています(以前のステートメントとは矛盾します)。これは簡単なことですが、正規表現の定義には、有限であるべきという条件が含まれていますか?

3
フォームの力のすべてのバイナリストリング受け付けるDFA
割り切れる2進数を受け入れるDFAを形成できnnnます。 たとえば、2で割り切れる2進数を受け入れるDFAは、次のように形成できます。 同様に、3で割り切れる2進数を受け入れるDFAは、次のように形成できます。 明確に定義された手順に従って、これらのタイプの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を作成してみましたか?しかし、そうすることができませんでした。または、DFAの作成を可能にし、特定のnに対してn kの形式のすべての2進数を受け入れるDFAを形成できないという、2 nのバイナリの同等のパターンだけですか?3k3k3^k2n2n2^nnknkn^knnn

1
正規表現が正規表現ではないのはいつですか?
私は正式な言語の大学のコースで勉強しているので、正規表現を使用して素数を見つける方法を説明するこれらの魅力的な投稿(One Two)に出会いました。言ったように、正規表現ではなく、正規表現。正規表現は有限状態オートマトンによって計算された文字列に一致でき、素数を見つけることはFSAでは実行できないため、ブログの投稿に示されている正規表現は、文字列に一致するようにバックトラックするため、完全に正規表現ではありません。 私は正規表現を実際に使用したことがないので、今、私の質問: 「真の」正規表現から見ただけで、すぐに正規表現を認識するにはどうすればよいですか? 定義:正規表現では、正式な言語で定義されている概念を指します。正規表現とは、現代のプログラミング言語でサポートされている概念を意味します。regexp構文には、多くの場合、後方参照などの追加機能が含まれています。プログラミング言語で見られる正規表現は、正式な言語スタイルの正規表現よりも厳密に強力です。

3
される
私は数週間前に計算試験の理論を受験しましたが、これは問題の1つでした。 言語仮定L={(anbm)r∣n,m,r≥0}L={(anbm)r∣n,m,r≥0}L=\{(a^nb^m)^r \mid n,m,r\ge 0\} Lは定期的ですか?はいの場合、正規表現またはオートマトンを提供します。 試験後に簡単に彼に答えたところ、それは本当に規則的であるように見えます(式は単純と彼は言ったと思います)。しかし、それがなぜなのか理解できないようです。私がそれを見る方法、それはこのようにa n b m r回連結します:(a∗b∗)∗(a∗b∗)∗(a^*b^*)^*anbmanbma^nb^m 、anbmanbmanbm...anbmanbmanbmanbmanbm...anbmanbma^nb^ma^nb^ma^nb^m...a^nb^ma^nb^m これは、オートマトンが毎回nとmを呼び出す方法がないため、規則的ではありません。ここで私はどこに問題がありますか? 編集:私は再び教授と話しました、彼はそれが間違いだったと認めました。言語は確かに規則的ではありません。

3
通常の言語の単語数を数えるのはなぜ簡単ではないのですか?
DFA、Aが与えられた場合、L(A)がAが受け入れる単語数を示すものとします。L(A)を計算するのは簡単だと思います。Aのエンコーディングを正規表現に変換します。クリーネの星が式のどこかに現れる場合-言語は無限です。それ以外の場合:式を使用して作成できるすべての単語の組み合わせを調べて数えます(基本的に、式に+演算子がある場合は、有効な単語の量に+で接続された文字列の量を掛けます。) これは間違っていますか?前もって感謝します


1
昨日のStackOverflowの停止に続いて-正規表現のマッチングは本当に難しいですか、それとも実装は単に非効率的ですか?
昨日、StackOverflowが30分ダウンしました。その後、彼らはそれについてブログの投稿を書き、問題が正規表現マッチングの予想外に高い複雑さから生じたことを詳述しました。 つまり、正規表現a+bは、文字列aaaaaaaaaaaaaacで実行される場合、バックトラックを使用するため、時間で実行されますは文字数です。O (ん2)O(ん2)O(n^2)んんna 次のPythonコードで問題を再現できます。私のコンピューターでは、実行に4秒以上かかります。 import re, time start = time.time() re.findall(r'\s+$', ' '*20000 + 'x') print(time.time() - start) これは私にとって非常に驚きました。私が考えたのだろう必要があるだろうこれ、正規表現からDFAを構築し、それを通じて、希望の文字列を実行することにより、例えば、正規表現マッチャがより効率的に動作することを考えていると思います(DFA工事は含みません)。O (n )O(ん)O(n) (たとえば、Cormen、Leiserson、Rivestによる本のアルゴリズムの紹介は、Knuth-Morris-Prattアルゴリズムを導入する方法について同様のアルゴリズムを通過します)。 私の質問:アルゴリズムを許可しない正規表現マッチングに本質的に難しいものはありますかO (n )O(ん)O(n)、または単に非効率的な実装(Pythonで、StackOverflowが使用するものなど)について話しているだけですか?

4
正規表現と「後方参照」を使用した「括弧のキャプチャ」
正規表現(RE)は有限オートマトン(FA)で実装されています。REの一部の言語(JavaScriptなど)には、「後方参照」を使用した「括弧のキャプチャ」などの機能があります。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#special-capturing-parentheses (x)次の例に示すように、「x」に一致し、一致を記憶します。括弧はキャプチャ括弧と呼ばれます。パターン/(foo)(bar)\ 1 \ 2 /の「(foo)」と「(bar)」は、文字列「foo bar foo bar」の最初の2つの単語と一致し、覚えています。パターンの\ 1と\ 2は、文字列の最後の2つの単語と一致します。 このパターン/(foo) (bar) \1 \2/が実際に、私たちが理論的な形式言語で持っているREの定義に従ったREであるのか、それともより強力なものであるのかを知りたいのです。そうであれば、この種の機能がFAでも実装されているのか、それとも別の方法で実装されているのか(特に、実装方法)を知りたいと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.