<!DOCTYPE html><htmllang="en"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><metaname="generator"content="rustdoc"><metaname="description"content="A builder for compiling an NFA from a regex’s high-level intermediate representation (HIR)."><title>Compiler in regex_automata::nfa::thompson - Rust</title><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../../static.files/SourceSerif4-Regular-46f98efaafac5295.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../../static.files/FiraSans-Regular-018c141bf0843ffd.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../../static.files/FiraSans-Medium-8f9a781e4970d388.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../../static.files/SourceCodePro-Regular-562dcc5011b6de7d.ttf.woff2"><linkrel="preload"as="font"type="font/woff2"crossoriginhref="../../../static.files/SourceCodePro-Semibold-d899c5a5c4aeb14a.ttf.woff2"><linkrel="stylesheet"href="../../../static.files/normalize-76eba96aa4d2e634.css"><linkrel="stylesheet"href="../../../static.files/rustdoc-ac92e1bbe349e143.css"><metaname="rustdoc-vars"data-root-path="../../../"data-static-root-path="../../../static.files/"data-current-crate="regex_automata"data-themes=""data-resource-suffix=""data-rustdoc-version="1.76.0 (07dca489a 2024-02-04)"data-channel="1.76.0"data-search-js="search-2b6ce74ff89ae146.js"data-settings-js="settings-4313503d2e1961c2.js"><scriptsrc="../../../static.files/storage-f2adc0d6ca4d09fb.js"></script><scriptdefersrc="sidebar-items.js"></script><scriptdefersrc="../../../static.files/main-305769736d49e732.js"></script><noscript><linkrel="stylesheet"href="../../../static.files/noscript-feafe1bb7466e4bd.css"></noscript><linkrel="alternate icon"type="image/png"href="../../../static.files/favicon-16x16-8b506e7a72182f1c.png"><linkrel="alternate icon"type="image/png"href="../../../static.files/favicon-32x32-422f7d1d52889060.png"><linkrel="icon"type="image/svg+xml"href="../../../static.files/favicon-2c020d218678b618.svg"></head><bodyclass="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="mobile-topbar"><buttonclass="sidebar-menu-toggle">☰</button></nav><navclass="sidebar"><divclass="sidebar-crate"><h2><ahref="../../../regex_automata/index.html">regex_automata</a><spanclass="version">0.4.6</span></h2></div><h2class="location"><ahref="#">Compiler</a></h2><divclass="sidebar-elems"><section><h3><ahref="#implementations">Methods</a></h3><ulclass="block method"><li><ahref="#method.build">build</a></li><li><ahref="#method.build_from_hir">build_from_hir</a></li><li><ahref="#method.build_many">build_many</a></li><li><ahref="#method.build_many_from_hir">build_many_from_hir</a></li><li><ahref="#method.configure">configure</a></li><li><ahref="#method.new">new</a></li><li><ahref="#method.syntax">syntax</a></li></ul><h3><ahref="#trait-implementations">Trait Implementations</a></h3><ulclass="block trait-implementation"><li><ahref="#impl-Clone-for-Compiler">Clone</a></li><li><ahref="#impl-Debug-for-Compiler">Debug</a></li></ul><h3><ahref="#synthetic-implementations">Auto Trait Implementations</a></h3><ulclass="block synthetic-implementation"><li><ahref="#impl-RefUnwindSafe-for-Compiler">!RefUnwindSafe</a></li><li><ahref="#impl-Sync-for-Compiler">!Sync</a></li><li><ahref="#impl-Send-for-Compiler">Send</a></li><li><ahref="#impl-Unpin-for-Compiler">Unpin</a></li><li><ahref="#impl-UnwindSafe-for-Compiler">UnwindSafe</a></li></ul><h3><ahref="#blanket-implementations">Blanket Implementations</a></h3><ulclass="block blanket-implementation"><li><ahref="#impl-Any-for-T">Any</a></li><li><ahref="#impl-Borrow%3CT%3E-for-T">Borrow<T></a></li><li><ahref="#impl-BorrowMut%3CT%3E-for-T">BorrowMut<T></a></li><li><ahref="#impl-From%3CT%3E-for-T">From<T></a></li><li><ahref="#impl-Into%3CU%3E-for-
<main><divclass="width-limiter"><navclass="sub"><formclass="search-form"><span></span><divid="sidebar-button"tabindex="-1"><ahref="../../../regex_automata/all.html"title="show sidebar"></a></div><inputclass="search-input"name="search"aria-label="Run search in the documentation"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"><divid="help-button"tabindex="-1"><ahref="../../../help.html"title="help">?</a></div><divid="settings-menu"tabindex="-1"><ahref="../../../settings.html"title="settings"><imgwidth="22"height="22"alt="Change settings"src="../../../static.files/wheel-7b819b6101059cd0.svg"></a></div></form></nav><sectionid="main-content"class="content"><divclass="main-heading"><h1>Struct <ahref="../../index.html">regex_automata</a>::<wbr><ahref="../index.html">nfa</a>::<wbr><ahref="index.html">thompson</a>::<wbr><aclass="struct"href="#">Compiler</a><buttonid="copy-path"title="Copy item path to clipboard"><imgsrc="../../../static.files/clipboard-7571035ce49a181d.svg"width="19"height="18"alt="Copy item path"></button></h1><spanclass="out-of-band"><aclass="src"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#696-714">source</a> · <buttonid="toggle-all-docs"title="collapse all docs">[<span>−</span>]</button></span></div><preclass="rust item-decl"><code>pub struct Compiler { <spanclass="comment">/* private fields */</span> }</code></pre><detailsclass="toggle top-doc"open><summaryclass="hideme"><span>Expand description</span></summary><divclass="docblock"><p>A builder for compiling an NFA from a regex’s high-level intermediate
representation (HIR).</p>
<p>This compiler provides a way to translate a parsed regex pattern into an
NFA state graph. The NFA state graph can either be used directly to execute
a search (e.g., with a Pike VM), or it can be further used to build a DFA.</p>
<p>This compiler provides APIs both for compiling regex patterns directly from
their concrete syntax, or via a <ahref="../../../regex_syntax/hir/struct.Hir.html"title="struct regex_syntax::hir::Hir"><code>regex_syntax::hir::Hir</code></a>.</p>
<p>This compiler has various options that may be configured via
<p>Note that a compiler is not the same as a <ahref="struct.Builder.html"title="struct regex_automata::nfa::thompson::Builder"><code>thompson::Builder</code></a>.
A <code>Builder</code> provides a lower level API that is uncoupled from a regex
pattern’s concrete syntax or even its HIR. Instead, it permits stitching
together an NFA by hand. See its docs for examples.</p>
<h2id="example-compilation-from-concrete-syntax"><ahref="#example-compilation-from-concrete-syntax">Example: compilation from concrete syntax</a></h2>
<p>This shows how to compile an NFA from a pattern string while setting a size
limit on how big the NFA is allowed to be (in terms of bytes of heap used).</p>
</div></details><h2id="implementations"class="section-header">Implementations<ahref="#implementations"class="anchor">§</a></h2><divid="implementations-list"><detailsclass="toggle implementors-toggle"open><summary><sectionid="impl-Compiler"class="impl"><aclass="src rightside"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#716-931">source</a><ahref="#impl-Compiler"class="anchor">§</a><h3class="code-header">impl <aclass="struct"href="struct.Compiler.html"title="struct regex_automata::nfa::thompson::Compiler">Compiler</a></h3></section></summary><divclass="impl-items"><detailsclass="toggle method-toggle"open><summary><sectionid="method.new"class="method"><aclass="src rightside"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#718-727">source</a><h4class="code-header">pub fn <ahref="#method.new"class="fn">new</a>() -><aclass="struct"href="struct.Compiler.html"title="struct regex_automata::nfa::thompson::Compiler">Compiler</a></h4></section></summary><divclass="docblock"><p>Create a new NFA builder with its default configuration.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.build"class="method"><aclass="src rightside"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#756-758">source</a><h4class="code-header">pub fn <ahref="#method.build"class="fn">build</a>(&self, pattern: &<aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.str.html">str</a>) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><<aclass="struct"href="struct.NFA.html"title="struct regex_automata::nfa::thompson::NFA">NFA</a>, <aclass="struct"href="struct.BuildError.html"title="struct regex_automata::nfa::thompson::BuildError">BuildError</a>></h4></section></summary><divclass="docblock"><p>Compile the given regular expression pattern into an NFA.</p>
<p>If there was a problem parsing the regex, then that error is returned.</p>
<p>Otherwise, if there was a problem building the NFA, then an error is
returned. The only error that can occur is if the compiled regex would
exceed the size limits configured on this builder, or if any part of
the NFA would exceed the integer representations used. (For example,
too many states might plausibly occur on a 16-bit target.)</p>
) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><<aclass="struct"href="struct.NFA.html"title="struct regex_automata::nfa::thompson::NFA">NFA</a>, <aclass="struct"href="struct.BuildError.html"title="struct regex_automata::nfa::thompson::BuildError">BuildError</a>></h4></section></summary><divclass="docblock"><p>Compile the given regular expression patterns into a single NFA.</p>
<p>When matches are returned, the pattern ID corresponds to the index of
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.build_from_hir"class="method"><aclass="src rightside"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#836-838">source</a><h4class="code-header">pub fn <ahref="#method.build_from_hir"class="fn">build_from_hir</a>(&self, expr: &<aclass="struct"href="../../../regex_syntax/hir/struct.Hir.html"title="struct regex_syntax::hir::Hir">Hir</a>) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><<aclass="struct"href="struct.NFA.html"title="struct regex_automata::nfa::thompson::NFA">NFA</a>, <aclass="struct"href="struct.BuildError.html"title="struct regex_automata::nfa::thompson::BuildError">BuildError</a>></h4></section></summary><divclass="docblock"><p>Compile the given high level intermediate representation of a regular
expression into an NFA.</p>
<p>If there was a problem building the NFA, then an error is returned. The
only error that can occur is if the compiled regex would exceed the
size limits configured on this builder, or if any part of the NFA would
exceed the integer representations used. (For example, too many states
) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><<aclass="struct"href="struct.NFA.html"title="struct regex_automata::nfa::thompson::NFA">NFA</a>, <aclass="struct"href="struct.BuildError.html"title="struct regex_automata::nfa::thompson::BuildError">BuildError</a>></h4></section></summary><divclass="docblock"><p>Compile the given high level intermediate representations of regular
expressions into a single NFA.</p>
<p>When matches are returned, the pattern ID corresponds to the index of
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.configure"class="method"><aclass="src rightside"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#897-900">source</a><h4class="code-header">pub fn <ahref="#method.configure"class="fn">configure</a>(&mut self, config: <aclass="struct"href="struct.Config.html"title="struct regex_automata::nfa::thompson::Config">Config</a>) ->&mut <aclass="struct"href="struct.Compiler.html"title="struct regex_automata::nfa::thompson::Compiler">Compiler</a></h4></section></summary><divclass="docblock"><p>Apply the given NFA configuration options to this builder.</p>
</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.syntax"class="method"><aclass="src rightside"href="../../../src/regex_automata/nfa/thompson/compiler.rs.html#924-930">source</a><h4class="code-header">pub fn <ahref="#method.syntax"class="fn">syntax</a>(&mut self, config: <aclass="struct"href="../../util/syntax/struct.Config.html"title="struct regex_automata::util::syntax::Config">Config</a>) ->&mut <aclass="struct"href="struct.Compiler.html"title="struct regex_automata::nfa::thompson::Compiler">Compiler</a></h4></section></summary><divclass="docblock"><p>Set the syntax configuration for this builder using
<p>That is, this conversion is whatever the implementation of
<code><ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.From.html"title="trait core::convert::From">From</a><T> for U</code> chooses to do.</p>
</div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-ToOwned-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/borrow.rs.html#83-85">source</a><ahref="#impl-ToOwned-for-T"class="anchor">§</a><h3class="code-header">impl<T><aclass="trait"href="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html"title="trait alloc::borrow::ToOwned">ToOwned</a> for T<divclass="where">where
T: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/clone/trait.Clone.html"title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle"open><summary><sectionid="associatedtype.Owned"class="associatedtype trait-impl"><ahref="#associatedtype.Owned"class="anchor">§</a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#associatedtype.Owned"class="associatedtype">Owned</a> = T</h4></section></summary><divclass='docblock'>The resulting type after obtaining ownership.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.to_owned"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/borrow.rs.html#88">source</a><ahref="#method.to_owned"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned"class="fn">to_owned</a>(&self) -> T</h4></section></summary><divclass='docblock'>Creates owned data from borrowed data, usually by cloning. <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#tymethod.to_owned">Read more</a></div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.clone_into"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/alloc/borrow.rs.html#92">source</a><ahref="#method.clone_into"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#method.clone_into"class="fn">clone_into</a>(&self, target: <aclass="primitive"href="https://doc.rust-lang.org/1.76.0/std/primitive.reference.html">&mut T</a>)</h4></section></summary><divclass='docblock'>Uses borrowed data to replace owned data, usually by cloning. <ahref="https://doc.rust-lang.org/1.76.0/alloc/borrow/trait.ToOwned.html#method.clone_into">Read more</a></div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-TryFrom%3CU%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#803-805">source</a><ahref="#impl-TryFrom%3CU%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><U> for T<divclass="where">where
U: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.Into.html"title="trait core::convert::Into">Into</a><T>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle"open><summary><sectionid="associatedtype.Error"class="associatedtype trait-impl"><ahref="#associatedtype.Error"class="anchor">§</a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"class="associatedtype">Error</a> = <aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/convert/enum.Infallible.html"title="enum core::convert::Infallible">Infallible</a></h4></section></summary><divclass='docblock'>The type returned in the event of a conversion error.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.try_from"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#810">source</a><ahref="#method.try_from"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#tymethod.try_from"class="fn">try_from</a>(value: U) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><T, <T as <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><U>>::<aclass="associatedtype"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><divclass='docblock'>Performs the conversion.</div></details></div></details><detailsclass="toggle implementors-toggle"><summary><sectionid="impl-TryInto%3CU%3E-for-T"class="impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#788-790">source</a><ahref="#impl-TryInto%3CU%3E-for-T"class="anchor">§</a><h3class="code-header">impl<T, U><aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html"title="trait core::convert::TryInto">TryInto</a><U> for T<divclass="where">where
U: <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>,</div></h3></section></summary><divclass="impl-items"><detailsclass="toggle"open><summary><sectionid="associatedtype.Error-1"class="associatedtype trait-impl"><ahref="#associatedtype.Error-1"class="anchor">§</a><h4class="code-header">type <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html#associatedtype.Error"class="associatedtype">Error</a> = <U as <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>>::<aclass="associatedtype"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><divclass='docblock'>The type returned in the event of a conversion error.</div></details><detailsclass="toggle method-toggle"open><summary><sectionid="method.try_into"class="method trait-impl"><aclass="src rightside"href="https://doc.rust-lang.org/1.76.0/src/core/convert/mod.rs.html#795">source</a><ahref="#method.try_into"class="anchor">§</a><h4class="code-header">fn <ahref="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryInto.html#tymethod.try_into"class="fn">try_into</a>(self) -><aclass="enum"href="https://doc.rust-lang.org/1.76.0/core/result/enum.Result.html"title="enum core::result::Result">Result</a><U, <U as <aclass="trait"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html"title="trait core::convert::TryFrom">TryFrom</a><T>>::<aclass="associatedtype"href="https://doc.rust-lang.org/1.76.0/core/convert/trait.TryFrom.html#associatedtype.Error"title="type core::convert::TryFrom::Error">Error</a>></h4></section></summary><divclass='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>