2023-04-12 09:00:24 +08:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< html xmlns = "http://www.w3.org/1999/xhtml" lang = "en-US" >
< head >
< meta http-equiv = "Content-Type" content = "text/xhtml;charset=UTF-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=11" / >
2023-06-21 05:10:10 +08:00
< meta name = "generator" content = "Doxygen 1.9.7" / >
2023-04-12 09:00:24 +08:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > Algorithms_in_C: misc/mcnaughton_yamada_thompson.c File Reference< / title >
< link href = "../../tabs.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "../../jquery.js" > < / script >
< script type = "text/javascript" src = "../../dynsections.js" > < / script >
< link href = "../../navtree.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "../../resize.js" > < / script >
< script type = "text/javascript" src = "../../navtreedata.js" > < / script >
< script type = "text/javascript" src = "../../navtree.js" > < / script >
< link href = "../../search/search.css" rel = "stylesheet" type = "text/css" / >
< script type = "text/javascript" src = "../../search/searchdata.js" > < / script >
< script type = "text/javascript" src = "../../search/search.js" > < / script >
< script type = "text/x-mathjax-config" >
MathJax.Hub.Config({
extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
jax: ["input/TeX","output/HTML-CSS"],
});
< / script >
< script type = "text/javascript" async = "async" src = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML/MathJax.js" > < / script >
< link href = "../../doxygen.css" rel = "stylesheet" type = "text/css" / >
< / head >
< body >
< div id = "top" > <!-- do not remove this div, it is closed by doxygen! -->
< div id = "titlearea" >
< table cellspacing = "0" cellpadding = "0" >
< tbody >
< tr id = "projectrow" >
< td id = "projectalign" >
< div id = "projectname" > Algorithms_in_C< span id = "projectnumber" >   1.0.0< / span >
< / div >
< div id = "projectbrief" > Set of algorithms implemented in C.< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
<!-- end header part -->
2023-06-21 05:10:10 +08:00
<!-- Generated by Doxygen 1.9.7 -->
2023-04-12 09:00:24 +08:00
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699& dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
/* @license-end */
< / script >
< script type = "text/javascript" src = "../../menudata.js" > < / script >
< script type = "text/javascript" src = "../../menu.js" > < / script >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699& dn=expat.txt MIT */
$(function() {
initMenu('../../',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
< / script >
< div id = "main-nav" > < / div >
< / div > <!-- top -->
< div id = "side-nav" class = "ui-resizable side-nav-resizable" >
< div id = "nav-tree" >
< div id = "nav-tree-contents" >
< div id = "nav-sync" class = "sync" > < / div >
< / div >
< / div >
< div id = "splitbar" style = "-moz-user-select:none;"
class="ui-resizable-handle">
< / div >
< / div >
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699& dn=expat.txt MIT */
$(document).ready(function(){initNavTree('dd/d2e/mcnaughton__yamada__thompson_8c.html','../../'); initResizable(); });
/* @license-end */
< / script >
< div id = "doc-content" >
<!-- window showing the filter options -->
< div id = "MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
< / div >
<!-- iframe showing the search results (closed by default) -->
< div id = "MSearchResultsWindow" >
< div id = "MSearchResults" >
< div class = "SRPage" >
< div id = "SRIndex" >
< div id = "SRResults" > < / div >
< div class = "SRStatus" id = "Loading" > Loading...< / div >
< div class = "SRStatus" id = "Searching" > Searching...< / div >
< div class = "SRStatus" id = "NoMatches" > No Matches< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "header" >
< div class = "summary" >
< a href = "#nested-classes" > Data Structures< / a > |
< a href = "#func-members" > Functions< / a > < / div >
< div class = "headertitle" > < div class = "title" > mcnaughton_yamada_thompson.c File Reference< / div > < / div >
< / div > <!-- header -->
< div class = "contents" >
< p > < a href = "https://en.wikipedia.org/wiki/Thompson%27s_construction" target = "_blank" > McNaughton– Yamada– Thompson algorithm< / a >
< a href = "#details" > More...< / a > < / p >
< div class = "textblock" > < code > #include < assert.h> < / code > < br / >
< code > #include < stdio.h> < / code > < br / >
< code > #include < string.h> < / code > < br / >
< code > #include < stdlib.h> < / code > < br / >
< / div > < div class = "textblock" > < div class = "dynheader" >
Include dependency graph for mcnaughton_yamada_thompson.c:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../d2/d24/mcnaughton__yamada__thompson_8c__incl.svg" width = "339" height = "126" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div > < table class = "memberdecls" >
< tr class = "heading" > < td colspan = "2" > < h2 class = "groupheader" > < a id = "nested-classes" name = "nested-classes" > < / a >
Data Structures< / h2 > < / td > < / tr >
< tr class = "memitem:" > < td class = "memItemLeft" align = "right" valign = "top" > struct   < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > < / td > < / tr >
< tr class = "memdesc:" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > for assert() < a href = "../../d8/d66/struct_a_s_t_node.html#details" > More...< / a > < br / > < / td > < / tr >
< tr class = "separator:" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:" > < td class = "memItemLeft" align = "right" valign = "top" > struct   < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > < / td > < / tr >
< tr class = "memdesc:" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Definition for a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state transition rule. < a href = "../../d9/dd9/structtrans_rule.html#details" > More...< / a > < br / > < / td > < / tr >
< tr class = "separator:" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:" > < td class = "memItemLeft" align = "right" valign = "top" > struct   < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > < / td > < / tr >
< tr class = "memdesc:" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Definition for a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state. < a href = "../../d4/d97/struct_n_f_a_state.html#details" > More...< / a > < br / > < / td > < / tr >
< tr class = "separator:" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:" > < td class = "memItemLeft" align = "right" valign = "top" > struct   < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > < / td > < / tr >
< tr class = "memdesc:" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Definition for the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > itself. < a href = "../../d3/dd7/struct_n_f_a.html#details" > More...< / a > < br / > < / td > < / tr >
< tr class = "separator:" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< / table > < table class = "memberdecls" >
< tr class = "heading" > < td colspan = "2" > < h2 class = "groupheader" > < a id = "func-members" name = "func-members" > < / a >
Functions< / h2 > < / td > < / tr >
< tr class = "memitem:a12df013d848665fdcdcb01870c322af6" > < td class = "memItemLeft" align = "right" valign = "top" > struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a12df013d848665fdcdcb01870c322af6" > createNode< / a > (const char content)< / td > < / tr >
< tr class = "memdesc:a12df013d848665fdcdcb01870c322af6" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > creates and initializes a AST node < br / > < / td > < / tr >
< tr class = "separator:a12df013d848665fdcdcb01870c322af6" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a6a97ab2db6392f262b03370689872348" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6a97ab2db6392f262b03370689872348" > destroyNode< / a > (struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > *< a class = "el" href = "../../d5/da1/structnode.html" > node< / a > )< / td > < / tr >
< tr class = "memdesc:a6a97ab2db6392f262b03370689872348" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > recursively destroys a AST < br / > < / td > < / tr >
< tr class = "separator:a6a97ab2db6392f262b03370689872348" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ae9a5eac7c0d8ac478eb1b97529638fb6" > < td class = "memItemLeft" align = "right" valign = "top" > char *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ae9a5eac7c0d8ac478eb1b97529638fb6" > preProcessing< / a > (const char *input)< / td > < / tr >
< tr class = "memdesc:ae9a5eac7c0d8ac478eb1b97529638fb6" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > performs preprocessing on a regex string, making all implicit concatenations explicit < br / > < / td > < / tr >
< tr class = "separator:ae9a5eac7c0d8ac478eb1b97529638fb6" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a496e9b4e45417ac56dac40bbbb769d7a" > < td class = "memItemLeft" align = "right" valign = "top" > struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (const char *input)< / td > < / tr >
< tr class = "memdesc:a496e9b4e45417ac56dac40bbbb769d7a" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > recursively constructs a AST from a preprocessed regex string < br / > < / td > < / tr >
< tr class = "separator:a496e9b4e45417ac56dac40bbbb769d7a" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a0b8d037bf2841dede90be41f5fe1ccdc" > < td class = "memItemLeft" align = "right" valign = "top" > struct < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *state, char c)< / td > < / tr >
< tr class = "memdesc:a0b8d037bf2841dede90be41f5fe1ccdc" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > creates and initializes a transition rule < br / > < / td > < / tr >
< tr class = "separator:a0b8d037bf2841dede90be41f5fe1ccdc" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ade1398311f666988b895f41c3e36d70e" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ade1398311f666988b895f41c3e36d70e" > destroyRule< / a > (struct < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *rule)< / td > < / tr >
< tr class = "memdesc:ade1398311f666988b895f41c3e36d70e" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > destroys a transition rule object < br / > < / td > < / tr >
< tr class = "separator:ade1398311f666988b895f41c3e36d70e" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:aa87c20bf2b324829943accce4bbff84a" > < td class = "memItemLeft" align = "right" valign = "top" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aa87c20bf2b324829943accce4bbff84a" > createState< / a > (void)< / td > < / tr >
< tr class = "memdesc:aa87c20bf2b324829943accce4bbff84a" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > creates and initializes a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state < br / > < / td > < / tr >
< tr class = "separator:aa87c20bf2b324829943accce4bbff84a" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a9a361f55b51ce6d677e907396fbc1652" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a9a361f55b51ce6d677e907396fbc1652" > destroyState< / a > (struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *state)< / td > < / tr >
< tr class = "memdesc:a9a361f55b51ce6d677e907396fbc1652" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > destroys a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state < br / > < / td > < / tr >
< tr class = "separator:a9a361f55b51ce6d677e907396fbc1652" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a2491d4e9e630ebb9880260379779cf63" > < td class = "memItemLeft" align = "right" valign = "top" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a2491d4e9e630ebb9880260379779cf63" > createNFA< / a > (void)< / td > < / tr >
< tr class = "memdesc:a2491d4e9e630ebb9880260379779cf63" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > creates and initializes a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < br / > < / td > < / tr >
< tr class = "separator:a2491d4e9e630ebb9880260379779cf63" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a684ed3494e22ee17d7b3e19a4d1fe977" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a684ed3494e22ee17d7b3e19a4d1fe977" > destroyNFA< / a > (struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa)< / td > < / tr >
< tr class = "memdesc:a684ed3494e22ee17d7b3e19a4d1fe977" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > recursively destroys a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < br / > < / td > < / tr >
< tr class = "separator:a684ed3494e22ee17d7b3e19a4d1fe977" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a799974b5bc43a844a200715db21b1124" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a799974b5bc43a844a200715db21b1124" > addState< / a > (struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa, struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *state)< / td > < / tr >
< tr class = "memdesc:a799974b5bc43a844a200715db21b1124" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > adds a state to a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < br / > < / td > < / tr >
< tr class = "separator:a799974b5bc43a844a200715db21b1124" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a4ed0049e15d45e0d75a991fbb6f8963c" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa, struct < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *rule, int loc)< / td > < / tr >
< tr class = "memdesc:a4ed0049e15d45e0d75a991fbb6f8963c" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > adds a transition rule to a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < br / > < / td > < / tr >
< tr class = "separator:a4ed0049e15d45e0d75a991fbb6f8963c" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a86e0f235783b005e4e6e951c9603bbe1" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a86e0f235783b005e4e6e951c9603bbe1" > postProcessing< / a > (struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa)< / td > < / tr >
< tr class = "memdesc:a86e0f235783b005e4e6e951c9603bbe1" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > performs postprocessing on a compiled < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > , add circular empty character transition rules where it's needed for the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > to function correctly < br / > < / td > < / tr >
< tr class = "separator:a86e0f235783b005e4e6e951c9603bbe1" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:aebe16fbf12c8ac089501ebcae6f0c050" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aebe16fbf12c8ac089501ebcae6f0c050" > transit< / a > (struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa, char input)< / td > < / tr >
< tr class = "memdesc:aebe16fbf12c8ac089501ebcae6f0c050" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > moves a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > forward < br / > < / td > < / tr >
< tr class = "separator:aebe16fbf12c8ac089501ebcae6f0c050" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a2dabcd5c410a4b0cac1b4ab378c9dcdc" > < td class = "memItemLeft" align = "right" valign = "top" > int  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a2dabcd5c410a4b0cac1b4ab378c9dcdc" > isAccepting< / a > (const struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa)< / td > < / tr >
< tr class = "memdesc:a2dabcd5c410a4b0cac1b4ab378c9dcdc" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > determines whether the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > is currently in its accepting state < br / > < / td > < / tr >
< tr class = "separator:a2dabcd5c410a4b0cac1b4ab378c9dcdc" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a6eaf52853f2b39a1299cc16972a3298e" > < td class = "memItemLeft" align = "right" valign = "top" > int  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (const char ch)< / td > < / tr >
< tr class = "memdesc:a6eaf52853f2b39a1299cc16972a3298e" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > helper function to determine whether a character should be considered a character literal < br / > < / td > < / tr >
< tr class = "separator:a6eaf52853f2b39a1299cc16972a3298e" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:aab463320a19667bd604db2405abefd55" > < td class = "memItemLeft" align = "right" valign = "top" > size_t  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aab463320a19667bd604db2405abefd55" > indexOf< / a > (const char *str, char key)< / td > < / tr >
< tr class = "memdesc:aab463320a19667bd604db2405abefd55" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > utility function to locate the first occurrence of a character in a string while respecting parentheses < br / > < / td > < / tr >
< tr class = "separator:aab463320a19667bd604db2405abefd55" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a072d13f905ab9438d38d7415df222817" > < td class = "memItemLeft" align = "right" valign = "top" > char *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (const char *str, size_t < a class = "el" href = "../../df/dfa/vector_8c.html#a1afee8aaf33d741df31a73048cff4473" > begin< / a > , size_t end)< / td > < / tr >
< tr class = "memdesc:a072d13f905ab9438d38d7415df222817" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > utility function to create a subString < br / > < / td > < / tr >
< tr class = "separator:a072d13f905ab9438d38d7415df222817" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:af1fbbb13a173dbacb0d4195923ab6cb3" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#af1fbbb13a173dbacb0d4195923ab6cb3" > redirect< / a > (struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *nfa, struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *src, struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *dest)< / td > < / tr >
< tr class = "memdesc:af1fbbb13a173dbacb0d4195923ab6cb3" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > helper function to recursively redirect transition rule targets < br / > < / td > < / tr >
< tr class = "separator:af1fbbb13a173dbacb0d4195923ab6cb3" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:ac3ded2c86cae5d238511a1e2d8bf7a80" > < td class = "memItemLeft" align = "right" valign = "top" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ac3ded2c86cae5d238511a1e2d8bf7a80" > compileFromAST< / a > (struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > *root)< / td > < / tr >
< tr class = "separator:ac3ded2c86cae5d238511a1e2d8bf7a80" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a709e32f5905536216abb03efb4f4db2b" > < td class = "memItemLeft" align = "right" valign = "top" > int  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a709e32f5905536216abb03efb4f4db2b" > contains< / a > (struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > **states, int len, struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *state)< / td > < / tr >
< tr class = "memdesc:a709e32f5905536216abb03efb4f4db2b" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > helper function to determine an element's presence in an array < br / > < / td > < / tr >
< tr class = "separator:a709e32f5905536216abb03efb4f4db2b" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a34774f1859a742ea1c3eaf3f6726b66c" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a34774f1859a742ea1c3eaf3f6726b66c" > findEmpty< / a > (struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *target, struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > **states, int *sc)< / td > < / tr >
< tr class = "memdesc:a34774f1859a742ea1c3eaf3f6726b66c" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > helper function to manage empty character transitions < br / > < / td > < / tr >
< tr class = "separator:a34774f1859a742ea1c3eaf3f6726b66c" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a38faadeab39bb48716f1065bc05abec8" > < td class = "memItemLeft" align = "right" valign = "top" > void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (const char *regex, const char *string, const int expected)< / td > < / tr >
< tr class = "memdesc:a38faadeab39bb48716f1065bc05abec8" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Testing helper function. < br / > < / td > < / tr >
< tr class = "separator:a38faadeab39bb48716f1065bc05abec8" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a13eda00dd5efd9440b0eaf5430b73e84" > < td class = "memItemLeft" align = "right" valign = "top" > static void  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a13eda00dd5efd9440b0eaf5430b73e84" > test< / a > (void)< / td > < / tr >
< tr class = "memdesc:a13eda00dd5efd9440b0eaf5430b73e84" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Self-test implementations. < br / > < / td > < / tr >
< tr class = "separator:a13eda00dd5efd9440b0eaf5430b73e84" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< tr class = "memitem:a840291bc02cba5474a4cb46a9b9566fe" > < td class = "memItemLeft" align = "right" valign = "top" > int  < / td > < td class = "memItemRight" valign = "bottom" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a840291bc02cba5474a4cb46a9b9566fe" > main< / a > (void)< / td > < / tr >
< tr class = "memdesc:a840291bc02cba5474a4cb46a9b9566fe" > < td class = "mdescLeft" >   < / td > < td class = "mdescRight" > Main function. < br / > < / td > < / tr >
< tr class = "separator:a840291bc02cba5474a4cb46a9b9566fe" > < td class = "memSeparator" colspan = "2" >   < / td > < / tr >
< / table >
< a name = "details" id = "details" > < / a > < h2 class = "groupheader" > Detailed Description< / h2 >
< div class = "textblock" > < p > < a href = "https://en.wikipedia.org/wiki/Thompson%27s_construction" target = "_blank" > McNaughton– Yamada– Thompson algorithm< / a > < / p >
< p > From Wikipedia: In computer science, Thompson's construction algorithm, also called the McNaughton– Yamada– Thompson algorithm, is a method of transforming a regular expression into an equivalent nondeterministic finite automaton (< a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > ). This implementation implements the all three operations (implicit concatenation, '|' for union, '*' for Kleene star) required by the formal definition of regular expressions. < / p > < dl class = "section author" > < dt > Author< / dt > < dd > < a href = "https://github.com/CascadingCascade" target = "_blank" > Sharon Cassidy< / a > < / dd > < / dl >
< / div > < h2 class = "groupheader" > Function Documentation< / h2 >
< a id = "a4ed0049e15d45e0d75a991fbb6f8963c" name = "a4ed0049e15d45e0d75a991fbb6f8963c" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a4ed0049e15d45e0d75a991fbb6f8963c" > ◆   < / a > < / span > addRule()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void addRule < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *  < / td >
< td class = "paramname" > < em > rule< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > int  < / td >
< td class = "paramname" > < em > loc< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > adds a transition rule to a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< tr > < td class = "paramname" > rule< / td > < td > the rule to be added < / td > < / tr >
< tr > < td class = "paramname" > loc< / td > < td > which state this rule should be added to < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 380< / span > {< / div >
< div class = "line" > < span class = "lineno" > 381< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > rulePool< / a > [nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a7087a5c8f402de41f50d38f7fdf99f74" > ruleCount< / a > ++] = rule;< / div >
< div class = "line" > < span class = "lineno" > 382< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > * state = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [loc];< / div >
< div class = "line" > < span class = "lineno" > 383< / span > state-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > rules< / a > [state-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aab70804a0b5849410e61f51a225d3072" > ruleCount< / a > ++] = rule;< / div >
< div class = "line" > < span class = "lineno" > 384< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "astruct_n_f_a_html_a6d263fee53d282bdb1536ad2134bd532" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > NFA::rulePool< / a > < / div > < div class = "ttdeci" > struct transRule ** rulePool< / div > < div class = "ttdoc" > the pool of all transition rules< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:74< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_a7087a5c8f402de41f50d38f7fdf99f74" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a7087a5c8f402de41f50d38f7fdf99f74" > NFA::ruleCount< / a > < / div > < div class = "ttdeci" > int ruleCount< / div > < div class = "ttdoc" > the total number of transition rules in this NFA< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:73< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_aaf1fe7a48e3990c7cc9ec5cba8c82d02" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > NFA::statePool< / a > < / div > < div class = "ttdeci" > struct NFAState ** statePool< / div > < div class = "ttdoc" > the pool of all available states< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:72< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_state_html" > < div class = "ttname" > < a href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > < / div > < div class = "ttdoc" > Definition for a NFA state.< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:54< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_state_html_aab70804a0b5849410e61f51a225d3072" > < div class = "ttname" > < a href = "../../d4/d97/struct_n_f_a_state.html#aab70804a0b5849410e61f51a225d3072" > NFAState::ruleCount< / a > < / div > < div class = "ttdeci" > int ruleCount< / div > < div class = "ttdoc" > number of transition rules this state have< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:55< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_state_html_aca9718d26eff08bb41418c5ec3442381" > < div class = "ttname" > < a href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > NFAState::rules< / a > < / div > < div class = "ttdeci" > struct transRule ** rules< / div > < div class = "ttdoc" > the transition rules< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:56< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a799974b5bc43a844a200715db21b1124" name = "a799974b5bc43a844a200715db21b1124" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a799974b5bc43a844a200715db21b1124" > ◆   < / a > < / span > addState()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void addState < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > state< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > adds a state to a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< tr > < td class = "paramname" > state< / td > < td > the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state to be added < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 369< / span > {< / div >
< div class = "line" > < span class = "lineno" > 370< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a1f68cf1d2a14e9e3035baba764dd3df7" > stateCount< / a > ++] = state;< / div >
< div class = "line" > < span class = "lineno" > 371< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "astruct_n_f_a_html_a1f68cf1d2a14e9e3035baba764dd3df7" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a1f68cf1d2a14e9e3035baba764dd3df7" > NFA::stateCount< / a > < / div > < div class = "ttdeci" > int stateCount< / div > < div class = "ttdoc" > the total number of states this NFA have< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:71< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a496e9b4e45417ac56dac40bbbb769d7a" name = "a496e9b4e45417ac56dac40bbbb769d7a" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a496e9b4e45417ac56dac40bbbb769d7a" > ◆   < / a > < / span > buildAST()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > * buildAST < / td >
< td > (< / td >
< td class = "paramtype" > const char *  < / td >
< td class = "paramname" > < em > input< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > recursively constructs a AST from a preprocessed regex string < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > input< / td > < td > regex < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the resulting tree < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 189< / span > {< / div >
< div class = "line" > < span class = "lineno" > 190< / span > < / div >
< div class = "line" > < span class = "lineno" > 191< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > * < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a12df013d848665fdcdcb01870c322af6" > createNode< / a > (< span class = "charliteral" > ' \0' < / span > );< / div >
< div class = "line" > < span class = "lineno" > 192< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > = NULL;< / div >
< div class = "line" > < span class = "lineno" > 193< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > = NULL;< / div >
< div class = "line" > < span class = "lineno" > 194< / span > < span class = "keyword" > const< / span > < span class = "keywordtype" > size_t< / span > len = strlen(input);< / div >
< div class = "line" > < span class = "lineno" > 195< / span > < span class = "keywordtype" > size_t< / span > index;< / div >
< div class = "line" > < span class = "lineno" > 196< / span > < / div >
< div class = "line" > < span class = "lineno" > 197< / span > < span class = "comment" > // Empty input< / span > < / div >
< div class = "line" > < span class = "lineno" > 198< / span > < span class = "keywordflow" > if< / span > (len == 0) < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 199< / span > < / div >
< div class = "line" > < span class = "lineno" > 200< / span > < span class = "comment" > // Character literals< / span > < / div >
< div class = "line" > < span class = "lineno" > 201< / span > < span class = "keywordflow" > if< / span > (len == 1) {< / div >
< div class = "line" > < span class = "lineno" > 202< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> content = input[0];< / div >
< div class = "line" > < span class = "lineno" > 203< / span > < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 204< / span > }< / div >
< div class = "line" > < span class = "lineno" > 205< / span > < / div >
< div class = "line" > < span class = "lineno" > 206< / span > < span class = "comment" > // Discard parentheses< / span > < / div >
< div class = "line" > < span class = "lineno" > 207< / span > < span class = "keywordflow" > if< / span > (input[0] == < span class = "charliteral" > ' (' < / span > & & input[len - 1] == < span class = "charliteral" > ' )' < / span > ) {< / div >
< div class = "line" > < span class = "lineno" > 208< / span > < span class = "keywordtype" > char< / span > * temp = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (input, 1, len - 2);< / div >
< div class = "line" > < span class = "lineno" > 209< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6a97ab2db6392f262b03370689872348" > destroyNode< / a > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > );< / div >
< div class = "line" > < span class = "lineno" > 210< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp);< / div >
< div class = "line" > < span class = "lineno" > 211< / span > < / div >
< div class = "line" > < span class = "lineno" > 212< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp);< / div >
< div class = "line" > < span class = "lineno" > 213< / span > < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 214< / span > }< / div >
< div class = "line" > < span class = "lineno" > 215< / span > < / div >
< div class = "line" > < span class = "lineno" > 216< / span > < span class = "comment" > // Union< / span > < / div >
< div class = "line" > < span class = "lineno" > 217< / span > index = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aab463320a19667bd604db2405abefd55" > indexOf< / a > (input, < span class = "charliteral" > ' |' < / span > );< / div >
< div class = "line" > < span class = "lineno" > 218< / span > < span class = "keywordflow" > if< / span > (index) {< / div >
< div class = "line" > < span class = "lineno" > 219< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> content = < span class = "charliteral" > ' |' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 220< / span > < / div >
< div class = "line" > < span class = "lineno" > 221< / span > < span class = "keywordtype" > char< / span > * temp1 = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (input, 0, index - 1);< / div >
< div class = "line" > < span class = "lineno" > 222< / span > < span class = "keywordtype" > char< / span > * temp2 = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (input, index + 1, len - 1);< / div >
< div class = "line" > < span class = "lineno" > 223< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp1);< / div >
< div class = "line" > < span class = "lineno" > 224< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp2);< / div >
< div class = "line" > < span class = "lineno" > 225< / span > < / div >
< div class = "line" > < span class = "lineno" > 226< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp2);< / div >
< div class = "line" > < span class = "lineno" > 227< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp1);< / div >
< div class = "line" > < span class = "lineno" > 228< / span > < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 229< / span > }< / div >
< div class = "line" > < span class = "lineno" > 230< / span > < / div >
< div class = "line" > < span class = "lineno" > 231< / span > < span class = "comment" > // Concatenation< / span > < / div >
< div class = "line" > < span class = "lineno" > 232< / span > index = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aab463320a19667bd604db2405abefd55" > indexOf< / a > (input, < span class = "charliteral" > ' \n' < / span > );< / div >
< div class = "line" > < span class = "lineno" > 233< / span > < span class = "keywordflow" > if< / span > (index) {< / div >
< div class = "line" > < span class = "lineno" > 234< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> content = < span class = "charliteral" > ' \n' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 235< / span > < / div >
< div class = "line" > < span class = "lineno" > 236< / span > < span class = "keywordtype" > char< / span > * temp1 = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (input, 0, index - 1);< / div >
< div class = "line" > < span class = "lineno" > 237< / span > < span class = "keywordtype" > char< / span > * temp2 = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (input, index + 1, len - 1);< / div >
< div class = "line" > < span class = "lineno" > 238< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp1);< / div >
< div class = "line" > < span class = "lineno" > 239< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp2);< / div >
< div class = "line" > < span class = "lineno" > 240< / span > < / div >
< div class = "line" > < span class = "lineno" > 241< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp2);< / div >
< div class = "line" > < span class = "lineno" > 242< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp1);< / div >
< div class = "line" > < span class = "lineno" > 243< / span > < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 244< / span > }< / div >
< div class = "line" > < span class = "lineno" > 245< / span > < / div >
< div class = "line" > < span class = "lineno" > 246< / span > < span class = "comment" > // Kleene star< / span > < / div >
< div class = "line" > < span class = "lineno" > 247< / span > < span class = "comment" > // Testing with indexOf() is unnecessary here,< / span > < / div >
< div class = "line" > < span class = "lineno" > 248< / span > < span class = "comment" > // Since all other possibilities have been exhausted< / span > < / div >
< div class = "line" > < span class = "lineno" > 249< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> content = < span class = "charliteral" > ' *' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 250< / span > < span class = "keywordtype" > char< / span > * temp = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > (input, 0, len - 2);< / div >
< div class = "line" > < span class = "lineno" > 251< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp);< / div >
< div class = "line" > < span class = "lineno" > 252< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > = NULL;< / div >
< div class = "line" > < span class = "lineno" > 253< / span > < / div >
< div class = "line" > < span class = "lineno" > 254< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp);< / div >
< div class = "line" > < span class = "lineno" > 255< / span > < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 256< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amalloc__dbg_8h_html_a9cc854374299a1dd933bf62029761768" > < div class = "ttname" > < a href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > < / div > < div class = "ttdeci" > #define free(ptr)< / div > < div class = "ttdoc" > This macro replace the standard free function with free_dbg.< / div > < div class = "ttdef" > < b > Definition< / b > malloc_dbg.h:26< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a072d13f905ab9438d38d7415df222817" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a072d13f905ab9438d38d7415df222817" > subString< / a > < / div > < div class = "ttdeci" > char * subString(const char *str, size_t begin, size_t end)< / div > < div class = "ttdoc" > utility function to create a subString< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:177< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a12df013d848665fdcdcb01870c322af6" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a12df013d848665fdcdcb01870c322af6" > createNode< / a > < / div > < div class = "ttdeci" > struct ASTNode * createNode(char content)< / div > < div class = "ttdoc" > creates and initializes a AST node< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:606< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a496e9b4e45417ac56dac40bbbb769d7a" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > < / div > < div class = "ttdeci" > struct ASTNode * buildAST(const char *input)< / div > < div class = "ttdoc" > recursively constructs a AST from a preprocessed regex string< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:189< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a6a97ab2db6392f262b03370689872348" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6a97ab2db6392f262b03370689872348" > destroyNode< / a > < / div > < div class = "ttdeci" > void destroyNode(struct ASTNode *node)< / div > < div class = "ttdoc" > recursively destroys a AST< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:619< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_aab463320a19667bd604db2405abefd55" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aab463320a19667bd604db2405abefd55" > indexOf< / a > < / div > < div class = "ttdeci" > size_t indexOf(const char *str, char key)< / div > < div class = "ttdoc" > utility function to locate the first occurrence of a character in a string while respecting parenthes...< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:151< / div > < / div >
< div class = "ttc" id = "astruct_a_s_t_node_html" > < div class = "ttname" > < a href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > < / div > < div class = "ttdoc" > for assert()< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:27< / div > < / div >
< div class = "ttc" id = "astructnode_html" > < div class = "ttname" > < a href = "../../d5/da1/structnode.html" > node< / a > < / div > < div class = "ttdoc" > Node, the basic data structure in the tree.< / div > < div class = "ttdef" > < b > Definition< / b > binary_search_tree.c:15< / div > < / div >
< div class = "ttc" id = "astructnode_html_a51e160f22dc6064bac4a4f9f1d931c2c" > < div class = "ttname" > < a href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > node::right< / a > < / div > < div class = "ttdeci" > struct node * right< / div > < div class = "ttdoc" > right child< / div > < div class = "ttdef" > < b > Definition< / b > binary_search_tree.c:17< / div > < / div >
< div class = "ttc" id = "astructnode_html_af7109e6ffd82cbbb705e486fd0ce92f0" > < div class = "ttname" > < a href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > node::left< / a > < / div > < div class = "ttdeci" > struct node * left< / div > < div class = "ttdoc" > left child< / div > < div class = "ttdef" > < b > Definition< / b > binary_search_tree.c:16< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a496e9b4e45417ac56dac40bbbb769d7a_cgraph.svg" width = "330" height = "208" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "ac3ded2c86cae5d238511a1e2d8bf7a80" name = "ac3ded2c86cae5d238511a1e2d8bf7a80" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ac3ded2c86cae5d238511a1e2d8bf7a80" > ◆   < / a > < / span > compileFromAST()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * compileFromAST < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > *  < / td >
< td class = "paramname" > < em > root< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 279< / span > {< / div >
< div class = "line" > < span class = "lineno" > 280< / span > < / div >
< div class = "line" > < span class = "lineno" > 281< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * nfa = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a2491d4e9e630ebb9880260379779cf63" > createNFA< / a > ();< / div >
< div class = "line" > < span class = "lineno" > 282< / span > < / div >
< div class = "line" > < span class = "lineno" > 283< / span > < span class = "comment" > // Empty input< / span > < / div >
< div class = "line" > < span class = "lineno" > 284< / span > < span class = "keywordflow" > if< / span > (root-> content == < span class = "charliteral" > ' \0' < / span > ) {< / div >
< div class = "line" > < span class = "lineno" > 285< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], < span class = "charliteral" > ' \0' < / span > ), 0);< / div >
< div class = "line" > < span class = "lineno" > 286< / span > < span class = "keywordflow" > return< / span > nfa;< / div >
< div class = "line" > < span class = "lineno" > 287< / span > }< / div >
< div class = "line" > < span class = "lineno" > 288< / span > < / div >
< div class = "line" > < span class = "lineno" > 289< / span > < span class = "comment" > // Character literals< / span > < / div >
< div class = "line" > < span class = "lineno" > 290< / span > < span class = "keywordflow" > if< / span > (< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (root-> content)) {< / div >
< div class = "line" > < span class = "lineno" > 291< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], root-> content), 0);< / div >
< div class = "line" > < span class = "lineno" > 292< / span > < span class = "keywordflow" > return< / span > nfa;< / div >
< div class = "line" > < span class = "lineno" > 293< / span > }< / div >
< div class = "line" > < span class = "lineno" > 294< / span > < / div >
< div class = "line" > < span class = "lineno" > 295< / span > < span class = "keywordflow" > switch< / span > (root-> content) {< / div >
< div class = "line" > < span class = "lineno" > 296< / span > < / div >
< div class = "line" > < span class = "lineno" > 297< / span > < span class = "keywordflow" > case< / span > < span class = "charliteral" > ' \n' < / span > : {< / div >
< div class = "line" > < span class = "lineno" > 298< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * ln = compileFromAST(root-> left);< / div >
< div class = "line" > < span class = "lineno" > 299< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * rn = compileFromAST(root-> right);< / div >
< div class = "line" > < span class = "lineno" > 300< / span > < / div >
< div class = "line" > < span class = "lineno" > 301< / span > < span class = "comment" > // Redirects all rules targeting ln' s accepting state to< / span > < / div >
< div class = "line" > < span class = "lineno" > 302< / span > < span class = "comment" > // target rn' s starting state< / span > < / div >
< div class = "line" > < span class = "lineno" > 303< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#af1fbbb13a173dbacb0d4195923ab6cb3" > redirect< / a > (ln, ln-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], rn-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0]);< / div >
< div class = "line" > < span class = "lineno" > 304< / span > < / div >
< div class = "line" > < span class = "lineno" > 305< / span > < span class = "comment" > // Manually creates and initializes a special< / span > < / div >
< div class = "line" > < span class = "lineno" > 306< / span > < span class = "comment" > // " wrapper" NFA< / span > < / div >
< div class = "line" > < span class = "lineno" > 307< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a684ed3494e22ee17d7b3e19a4d1fe977" > destroyNFA< / a > (nfa);< / div >
< div class = "line" > < span class = "lineno" > 308< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * wrapper = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > ));< / div >
< div class = "line" > < span class = "lineno" > 309< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a1f68cf1d2a14e9e3035baba764dd3df7" > stateCount< / a > = 2;< / div >
< div class = "line" > < span class = "lineno" > 310< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 2);< / div >
< div class = "line" > < span class = "lineno" > 311< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 312< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *) * 2);< / div >
< div class = "line" > < span class = "lineno" > 313< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a7087a5c8f402de41f50d38f7fdf99f74" > ruleCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 314< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > rulePool< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *) * 3);< / div >
< div class = "line" > < span class = "lineno" > 315< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 316< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 2);< / div >
< div class = "line" > < span class = "lineno" > 317< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a46968ad64f39e9c62b8fb7970d494422" > wrapperFlag< / a > = 1;< / div >
< div class = "line" > < span class = "lineno" > 318< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ++] = ln;< / div >
< div class = "line" > < span class = "lineno" > 319< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ++] = rn;< / div >
< div class = "line" > < span class = "lineno" > 320< / span > < / div >
< div class = "line" > < span class = "lineno" > 321< / span > < span class = "comment" > // Maps the wrapper NFA' s starting and ending states< / span > < / div >
< div class = "line" > < span class = "lineno" > 322< / span > < span class = "comment" > // to its sub NFAs< / span > < / div >
< div class = "line" > < span class = "lineno" > 323< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0] = ln-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0];< / div >
< div class = "line" > < span class = "lineno" > 324< / span > wrapper-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1] = rn-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1];< / div >
< div class = "line" > < span class = "lineno" > 325< / span > < / div >
< div class = "line" > < span class = "lineno" > 326< / span > < span class = "keywordflow" > return< / span > wrapper;< / div >
< div class = "line" > < span class = "lineno" > 327< / span > }< / div >
< div class = "line" > < span class = "lineno" > 328< / span > < span class = "keywordflow" > case< / span > < span class = "charliteral" > ' |' < / span > : {< / div >
< div class = "line" > < span class = "lineno" > 329< / span > < / div >
< div class = "line" > < span class = "lineno" > 330< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * ln = compileFromAST(root-> left);< / div >
< div class = "line" > < span class = "lineno" > 331< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * rn = compileFromAST(root-> right);< / div >
< div class = "line" > < span class = "lineno" > 332< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ++] = ln;< / div >
< div class = "line" > < span class = "lineno" > 333< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ++] = rn;< / div >
< div class = "line" > < span class = "lineno" > 334< / span > < / div >
< div class = "line" > < span class = "lineno" > 335< / span > < span class = "comment" > // Adds empty character transition rules< / span > < / div >
< div class = "line" > < span class = "lineno" > 336< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (ln-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0], < span class = "charliteral" > ' \0' < / span > ), 0);< / div >
< div class = "line" > < span class = "lineno" > 337< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (ln, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], < span class = "charliteral" > ' \0' < / span > ), 1);< / div >
< div class = "line" > < span class = "lineno" > 338< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (rn-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0], < span class = "charliteral" > ' \0' < / span > ), 0);< / div >
< div class = "line" > < span class = "lineno" > 339< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (rn, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], < span class = "charliteral" > ' \0' < / span > ), 1);< / div >
< div class = "line" > < span class = "lineno" > 340< / span > < / div >
< div class = "line" > < span class = "lineno" > 341< / span > < span class = "keywordflow" > return< / span > nfa;< / div >
< div class = "line" > < span class = "lineno" > 342< / span > }< / div >
< div class = "line" > < span class = "lineno" > 343< / span > < span class = "keywordflow" > case< / span > < span class = "charliteral" > ' *' < / span > : {< / div >
< div class = "line" > < span class = "lineno" > 344< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * ln = compileFromAST(root-> left);< / div >
< div class = "line" > < span class = "lineno" > 345< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ++] = ln;< / div >
< div class = "line" > < span class = "lineno" > 346< / span > < / div >
< div class = "line" > < span class = "lineno" > 347< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (ln, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (ln-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0], < span class = "charliteral" > ' \0' < / span > ), 1);< / div >
< div class = "line" > < span class = "lineno" > 348< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (ln-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0], < span class = "charliteral" > ' \0' < / span > ), 0);< / div >
< div class = "line" > < span class = "lineno" > 349< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (ln, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], < span class = "charliteral" > ' \0' < / span > ), 1);< / div >
< div class = "line" > < span class = "lineno" > 350< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1], < span class = "charliteral" > ' \0' < / span > ), 0);< / div >
< div class = "line" > < span class = "lineno" > 351< / span > < / div >
< div class = "line" > < span class = "lineno" > 352< / span > < span class = "keywordflow" > return< / span > nfa;< / div >
< div class = "line" > < span class = "lineno" > 353< / span > }< / div >
< div class = "line" > < span class = "lineno" > 354< / span > }< / div >
< div class = "line" > < span class = "lineno" > 355< / span > < / div >
< div class = "line" > < span class = "lineno" > 356< / span > < span class = "comment" > // Fallback, shouldn' t happen in normal operation< / span > < / div >
< div class = "line" > < span class = "lineno" > 357< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a684ed3494e22ee17d7b3e19a4d1fe977" > destroyNFA< / a > (nfa);< / div >
< div class = "line" > < span class = "lineno" > 358< / span > < span class = "keywordflow" > return< / span > NULL;< / div >
< div class = "line" > < span class = "lineno" > 359< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amalloc__dbg_8h_html_a725f50ecaf1959d96de79b36b4788fee" > < div class = "ttname" > < a href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > < / div > < div class = "ttdeci" > #define malloc(bytes)< / div > < div class = "ttdoc" > This macro replace the standard malloc function with malloc_dbg.< / div > < div class = "ttdef" > < b > Definition< / b > malloc_dbg.h:18< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a0b8d037bf2841dede90be41f5fe1ccdc" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > < / div > < div class = "ttdeci" > struct transRule * createRule(struct NFAState *state, char c)< / div > < div class = "ttdoc" > creates and initializes a transition rule< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:637< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a2491d4e9e630ebb9880260379779cf63" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a2491d4e9e630ebb9880260379779cf63" > createNFA< / a > < / div > < div class = "ttdeci" > struct NFA * createNFA(void)< / div > < div class = "ttdoc" > creates and initializes a NFA< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:678< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a4ed0049e15d45e0d75a991fbb6f8963c" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > < / div > < div class = "ttdeci" > void addRule(struct NFA *nfa, struct transRule *rule, int loc)< / div > < div class = "ttdoc" > adds a transition rule to a NFA< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:380< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a684ed3494e22ee17d7b3e19a4d1fe977" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a684ed3494e22ee17d7b3e19a4d1fe977" > destroyNFA< / a > < / div > < div class = "ttdeci" > void destroyNFA(struct NFA *nfa)< / div > < div class = "ttdoc" > recursively destroys a NFA< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:701< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a6eaf52853f2b39a1299cc16972a3298e" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > < / div > < div class = "ttdeci" > int isLiteral(const char ch)< / div > < div class = "ttdoc" > helper function to determine whether a character should be considered a character literal< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:99< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_af1fbbb13a173dbacb0d4195923ab6cb3" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#af1fbbb13a173dbacb0d4195923ab6cb3" > redirect< / a > < / div > < div class = "ttdeci" > void redirect(struct NFA *nfa, struct NFAState *src, struct NFAState *dest)< / div > < div class = "ttdoc" > helper function to recursively redirect transition rule targets< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:267< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > < / div > < div class = "ttdoc" > Definition for the NFA itself.< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:70< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_a38e4fdb290def5942dc14eff7c6211ba" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > NFA::CSCount< / a > < / div > < div class = "ttdeci" > int CSCount< / div > < div class = "ttdoc" > the number of currently active states< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:75< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_a46968ad64f39e9c62b8fb7970d494422" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a46968ad64f39e9c62b8fb7970d494422" > NFA::wrapperFlag< / a > < / div > < div class = "ttdeci" > int wrapperFlag< / div > < div class = "ttdoc" > whether this NFA is a concatenation wrapper< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:79< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_a5e64682c0c21d3f931096b2ef38b5072" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > NFA::subCount< / a > < / div > < div class = "ttdeci" > int subCount< / div > < div class = "ttdoc" > the number of sub NFAs< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:77< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_a9b3eef40ce5b331a6508648b2c32ea00" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > NFA::subs< / a > < / div > < div class = "ttdeci" > struct NFA ** subs< / div > < div class = "ttdoc" > the pool of all sub NFAs< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:78< / div > < / div >
< div class = "ttc" id = "astruct_n_f_a_html_ad400f1830095be00a7fdff804d6405c0" > < div class = "ttname" > < a href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > NFA::currentStates< / a > < / div > < div class = "ttdeci" > struct NFAState ** currentStates< / div > < div class = "ttdoc" > the pool of all active states< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:76< / div > < / div >
< div class = "ttc" id = "astructtrans_rule_html" > < div class = "ttname" > < a href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > < / div > < div class = "ttdoc" > Definition for a NFA state transition rule.< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:41< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a709e32f5905536216abb03efb4f4db2b" name = "a709e32f5905536216abb03efb4f4db2b" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a709e32f5905536216abb03efb4f4db2b" > ◆   < / a > < / span > contains()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > int contains < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > **  < / td >
< td class = "paramname" > < em > states< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > int  < / td >
< td class = "paramname" > < em > len< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > state< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > helper function to determine an element's presence in an array < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > states< / td > < td > target array < / td > < / tr >
< tr > < td class = "paramname" > len< / td > < td > length of the target array < / td > < / tr >
< tr > < td class = "paramname" > state< / td > < td > the element to search for < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > < code > 1< / code > if the element is present, < code > 0< / code > otherwise < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 428< / span > {< / div >
< div class = "line" > < span class = "lineno" > 429< / span > < span class = "keywordtype" > int< / span > f = 0;< / div >
< div class = "line" > < span class = "lineno" > 430< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < len; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 431< / span > < span class = "keywordflow" > if< / span > (states[i] == state) {< / div >
< div class = "line" > < span class = "lineno" > 432< / span > f = 1;< / div >
< div class = "line" > < span class = "lineno" > 433< / span > < span class = "keywordflow" > break< / span > ;< / div >
< div class = "line" > < span class = "lineno" > 434< / span > }< / div >
< div class = "line" > < span class = "lineno" > 435< / span > }< / div >
< div class = "line" > < span class = "lineno" > 436< / span > < span class = "keywordflow" > return< / span > f;< / div >
< div class = "line" > < span class = "lineno" > 437< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a2491d4e9e630ebb9880260379779cf63" name = "a2491d4e9e630ebb9880260379779cf63" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a2491d4e9e630ebb9880260379779cf63" > ◆   < / a > < / span > createNFA()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * createNFA < / td >
< td > (< / td >
< td class = "paramtype" > void  < / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > creates and initializes a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / p >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the newly created < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 678< / span > {< / div >
< div class = "line" > < span class = "lineno" > 679< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * nfa = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > ));< / div >
< div class = "line" > < span class = "lineno" > 680< / span > < / div >
< div class = "line" > < span class = "lineno" > 681< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a1f68cf1d2a14e9e3035baba764dd3df7" > stateCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 682< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 5);< / div >
< div class = "line" > < span class = "lineno" > 683< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a7087a5c8f402de41f50d38f7fdf99f74" > ruleCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 684< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > rulePool< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *) * 10);< / div >
< div class = "line" > < span class = "lineno" > 685< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 686< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 5);< / div >
< div class = "line" > < span class = "lineno" > 687< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 688< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *) * 5);< / div >
< div class = "line" > < span class = "lineno" > 689< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a46968ad64f39e9c62b8fb7970d494422" > wrapperFlag< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 690< / span > < / div >
< div class = "line" > < span class = "lineno" > 691< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a799974b5bc43a844a200715db21b1124" > addState< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aa87c20bf2b324829943accce4bbff84a" > createState< / a > ());< / div >
< div class = "line" > < span class = "lineno" > 692< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a799974b5bc43a844a200715db21b1124" > addState< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aa87c20bf2b324829943accce4bbff84a" > createState< / a > ());< / div >
< div class = "line" > < span class = "lineno" > 693< / span > < span class = "keywordflow" > return< / span > nfa;< / div >
< div class = "line" > < span class = "lineno" > 694< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a799974b5bc43a844a200715db21b1124" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a799974b5bc43a844a200715db21b1124" > addState< / a > < / div > < div class = "ttdeci" > void addState(struct NFA *nfa, struct NFAState *state)< / div > < div class = "ttdoc" > adds a state to a NFA< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:369< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_aa87c20bf2b324829943accce4bbff84a" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aa87c20bf2b324829943accce4bbff84a" > createState< / a > < / div > < div class = "ttdeci" > struct NFAState * createState(void)< / div > < div class = "ttdoc" > creates and initializes a NFA state< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:657< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a2491d4e9e630ebb9880260379779cf63_cgraph.svg" width = "232" height = "86" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "a12df013d848665fdcdcb01870c322af6" name = "a12df013d848665fdcdcb01870c322af6" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a12df013d848665fdcdcb01870c322af6" > ◆   < / a > < / span > createNode()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > * createNode < / td >
< td > (< / td >
< td class = "paramtype" > const char  < / td >
< td class = "paramname" > < em > content< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > creates and initializes a AST node < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > content< / td > < td > data to initializes the node with < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the newly created node < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 606< / span > {< / div >
< div class = "line" > < span class = "lineno" > 607< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > * < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > ));< / div >
< div class = "line" > < span class = "lineno" > 608< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> content = < a class = "code hl_variable" href = "../../d8/d66/struct_a_s_t_node.html#af6ca532deb4e4ae30127449bfe5a1970" > content< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 609< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > = NULL;< / div >
< div class = "line" > < span class = "lineno" > 610< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > = NULL;< / div >
< div class = "line" > < span class = "lineno" > 611< / span > < span class = "keywordflow" > return< / span > < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 612< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "astruct_a_s_t_node_html_af6ca532deb4e4ae30127449bfe5a1970" > < div class = "ttname" > < a href = "../../d8/d66/struct_a_s_t_node.html#af6ca532deb4e4ae30127449bfe5a1970" > ASTNode::content< / a > < / div > < div class = "ttdeci" > char content< / div > < div class = "ttdoc" > the content of this node< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:28< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a0b8d037bf2841dede90be41f5fe1ccdc" name = "a0b8d037bf2841dede90be41f5fe1ccdc" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a0b8d037bf2841dede90be41f5fe1ccdc" > ◆   < / a > < / span > createRule()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > struct < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > * createRule < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > state< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > c< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > creates and initializes a transition rule < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > state< / td > < td > transition target < / td > < / tr >
< tr > < td class = "paramname" > c< / td > < td > transition condition < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the newly created rule < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 637< / span > {< / div >
< div class = "line" > < span class = "lineno" > 638< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > * rule = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > ));< / div >
< div class = "line" > < span class = "lineno" > 639< / span > rule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > = state;< / div >
< div class = "line" > < span class = "lineno" > 640< / span > rule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#abd89c7bca6969150c7bbf7d888e4aa6b" > cond< / a > = c;< / div >
< div class = "line" > < span class = "lineno" > 641< / span > < span class = "keywordflow" > return< / span > rule;< / div >
< div class = "line" > < span class = "lineno" > 642< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "astructtrans_rule_html_a3459db0aa62824b51da3297e431900bd" > < div class = "ttname" > < a href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > transRule::target< / a > < / div > < div class = "ttdeci" > struct NFAState * target< / div > < div class = "ttdoc" > pointer to the state to transit to< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:42< / div > < / div >
< div class = "ttc" id = "astructtrans_rule_html_abd89c7bca6969150c7bbf7d888e4aa6b" > < div class = "ttname" > < a href = "../../d9/dd9/structtrans_rule.html#abd89c7bca6969150c7bbf7d888e4aa6b" > transRule::cond< / a > < / div > < div class = "ttdeci" > char cond< / div > < div class = "ttdoc" > the input required to activate this transition< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:43< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "aa87c20bf2b324829943accce4bbff84a" name = "aa87c20bf2b324829943accce4bbff84a" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#aa87c20bf2b324829943accce4bbff84a" > ◆   < / a > < / span > createState()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > * createState < / td >
< td > (< / td >
< td class = "paramtype" > void  < / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > creates and initializes a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state < / p >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the newly created < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 657< / span > {< / div >
< div class = "line" > < span class = "lineno" > 658< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > * state = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > ));< / div >
< div class = "line" > < span class = "lineno" > 659< / span > state-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aab70804a0b5849410e61f51a225d3072" > ruleCount< / a > = 0;< / div >
< div class = "line" > < span class = "lineno" > 660< / span > state-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > rules< / a > = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *) * 3);< / div >
< div class = "line" > < span class = "lineno" > 661< / span > < span class = "keywordflow" > return< / span > state;< / div >
< div class = "line" > < span class = "lineno" > 662< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a684ed3494e22ee17d7b3e19a4d1fe977" name = "a684ed3494e22ee17d7b3e19a4d1fe977" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a684ed3494e22ee17d7b3e19a4d1fe977" > ◆   < / a > < / span > destroyNFA()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void destroyNFA < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > recursively destroys a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > pointer to the object to be deleted < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 701< / span > {< / div >
< div class = "line" > < span class = "lineno" > 702< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 703< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a684ed3494e22ee17d7b3e19a4d1fe977" > destroyNFA< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [i]);< / div >
< div class = "line" > < span class = "lineno" > 704< / span > }< / div >
< div class = "line" > < span class = "lineno" > 705< / span > < / div >
< div class = "line" > < span class = "lineno" > 706< / span > < span class = "comment" > // In case of a wrapper NFA, do not free its states< / span > < / div >
< div class = "line" > < span class = "lineno" > 707< / span > < span class = "comment" > // because it doesn' t really have any states of its own< / span > < / div >
< div class = "line" > < span class = "lineno" > 708< / span > < span class = "keywordflow" > if< / span > (!nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a46968ad64f39e9c62b8fb7970d494422" > wrapperFlag< / a > ) {< / div >
< div class = "line" > < span class = "lineno" > 709< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a1f68cf1d2a14e9e3035baba764dd3df7" > stateCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 710< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a9a361f55b51ce6d677e907396fbc1652" > destroyState< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [i]);< / div >
< div class = "line" > < span class = "lineno" > 711< / span > }< / div >
< div class = "line" > < span class = "lineno" > 712< / span > }< / div >
< div class = "line" > < span class = "lineno" > 713< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a7087a5c8f402de41f50d38f7fdf99f74" > ruleCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 714< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ade1398311f666988b895f41c3e36d70e" > destroyRule< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > rulePool< / a > [i]);< / div >
< div class = "line" > < span class = "lineno" > 715< / span > }< / div >
< div class = "line" > < span class = "lineno" > 716< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > );< / div >
< div class = "line" > < span class = "lineno" > 717< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > );< / div >
< div class = "line" > < span class = "lineno" > 718< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > rulePool< / a > );< / div >
< div class = "line" > < span class = "lineno" > 719< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > );< / div >
< div class = "line" > < span class = "lineno" > 720< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (nfa);< / div >
< div class = "line" > < span class = "lineno" > 721< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a9a361f55b51ce6d677e907396fbc1652" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a9a361f55b51ce6d677e907396fbc1652" > destroyState< / a > < / div > < div class = "ttdeci" > void destroyState(struct NFAState *state)< / div > < div class = "ttdoc" > destroys a NFA state< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:669< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_ade1398311f666988b895f41c3e36d70e" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ade1398311f666988b895f41c3e36d70e" > destroyRule< / a > < / div > < div class = "ttdeci" > void destroyRule(struct transRule *rule)< / div > < div class = "ttdoc" > destroys a transition rule object< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:649< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a684ed3494e22ee17d7b3e19a4d1fe977_cgraph.svg" width = "246" height = "86" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "a6a97ab2db6392f262b03370689872348" name = "a6a97ab2db6392f262b03370689872348" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a6a97ab2db6392f262b03370689872348" > ◆   < / a > < / span > destroyNode()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void destroyNode < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > *  < / td >
< td class = "paramname" > < em > node< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > recursively destroys a AST < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > node< / td > < td > the root node of the tree to be deleted < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 619< / span > {< / div >
< div class = "line" > < span class = "lineno" > 620< / span > < span class = "keywordflow" > if< / span > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > != NULL) {< / div >
< div class = "line" > < span class = "lineno" > 621< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6a97ab2db6392f262b03370689872348" > destroyNode< / a > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#af7109e6ffd82cbbb705e486fd0ce92f0" > left< / a > );< / div >
< div class = "line" > < span class = "lineno" > 622< / span > }< / div >
< div class = "line" > < span class = "lineno" > 623< / span > < / div >
< div class = "line" > < span class = "lineno" > 624< / span > < span class = "keywordflow" > if< / span > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > != NULL) {< / div >
< div class = "line" > < span class = "lineno" > 625< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6a97ab2db6392f262b03370689872348" > destroyNode< / a > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > -> < a class = "code hl_variable" href = "../../d5/da1/structnode.html#a51e160f22dc6064bac4a4f9f1d931c2c" > right< / a > );< / div >
< div class = "line" > < span class = "lineno" > 626< / span > }< / div >
< div class = "line" > < span class = "lineno" > 627< / span > < / div >
< div class = "line" > < span class = "lineno" > 628< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > );< / div >
< div class = "line" > < span class = "lineno" > 629< / span > }< / div >
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a6a97ab2db6392f262b03370689872348_cgraph.svg" width = "107" height = "60" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "ade1398311f666988b895f41c3e36d70e" name = "ade1398311f666988b895f41c3e36d70e" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ade1398311f666988b895f41c3e36d70e" > ◆   < / a > < / span > destroyRule()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void destroyRule < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *  < / td >
< td class = "paramname" > < em > rule< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > destroys a transition rule object < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > rule< / td > < td > pointer to the object to be deleted < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 649< / span > {< / div >
< div class = "line" > < span class = "lineno" > 650< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (rule);< / div >
< div class = "line" > < span class = "lineno" > 651< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a9a361f55b51ce6d677e907396fbc1652" name = "a9a361f55b51ce6d677e907396fbc1652" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a9a361f55b51ce6d677e907396fbc1652" > ◆   < / a > < / span > destroyState()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void destroyState < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > state< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > destroys a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > state < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > state< / td > < td > pointer to the object to be deleted < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 669< / span > {< / div >
< div class = "line" > < span class = "lineno" > 670< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (state-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > rules< / a > );< / div >
< div class = "line" > < span class = "lineno" > 671< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (state);< / div >
< div class = "line" > < span class = "lineno" > 672< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a34774f1859a742ea1c3eaf3f6726b66c" name = "a34774f1859a742ea1c3eaf3f6726b66c" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a34774f1859a742ea1c3eaf3f6726b66c" > ◆   < / a > < / span > findEmpty()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void findEmpty < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > target< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > **  < / td >
< td class = "paramname" > < em > states< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > int *  < / td >
< td class = "paramname" > < em > sc< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > helper function to manage empty character transitions < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > target< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< tr > < td class = "paramname" > states< / td > < td > pointer to results storage location < / td > < / tr >
< tr > < td class = "paramname" > sc< / td > < td > pointer to results count storage location < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 446< / span > {< / div >
< div class = "line" > < span class = "lineno" > 447< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < target-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aab70804a0b5849410e61f51a225d3072" > ruleCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 448< / span > < span class = "keyword" > const< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *pRule = < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > -> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > rules< / a > [i];< / div >
< div class = "line" > < span class = "lineno" > 449< / span > < / div >
< div class = "line" > < span class = "lineno" > 450< / span > < span class = "keywordflow" > if< / span > (pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#abd89c7bca6969150c7bbf7d888e4aa6b" > cond< / a > == < span class = "charliteral" > ' \0' < / span > & & !< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a709e32f5905536216abb03efb4f4db2b" > contains< / a > (states, *sc, pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > )) {< / div >
< div class = "line" > < span class = "lineno" > 451< / span > states[(*sc)++] = pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 452< / span > < span class = "comment" > // the use of `states` and `sc` is necessary< / span > < / div >
< div class = "line" > < span class = "lineno" > 453< / span > < span class = "comment" > // to sync data across recursion levels< / span > < / div >
< div class = "line" > < span class = "lineno" > 454< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a34774f1859a742ea1c3eaf3f6726b66c" > findEmpty< / a > (pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > , states, sc);< / div >
< div class = "line" > < span class = "lineno" > 455< / span > }< / div >
< div class = "line" > < span class = "lineno" > 456< / span > }< / div >
< div class = "line" > < span class = "lineno" > 457< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a34774f1859a742ea1c3eaf3f6726b66c" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a34774f1859a742ea1c3eaf3f6726b66c" > findEmpty< / a > < / div > < div class = "ttdeci" > void findEmpty(struct NFAState *target, struct NFAState **states, int *sc)< / div > < div class = "ttdoc" > helper function to manage empty character transitions< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:446< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a709e32f5905536216abb03efb4f4db2b" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a709e32f5905536216abb03efb4f4db2b" > contains< / a > < / div > < div class = "ttdeci" > int contains(struct NFAState **states, int len, struct NFAState *state)< / div > < div class = "ttdoc" > helper function to determine an element's presence in an array< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:428< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a34774f1859a742ea1c3eaf3f6726b66c_cgraph.svg" width = "210" height = "60" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "aab463320a19667bd604db2405abefd55" name = "aab463320a19667bd604db2405abefd55" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#aab463320a19667bd604db2405abefd55" > ◆   < / a > < / span > indexOf()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > size_t indexOf < / td >
< td > (< / td >
< td class = "paramtype" > const char *  < / td >
< td class = "paramname" > < em > str< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > key< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > utility function to locate the first occurrence of a character in a string while respecting parentheses < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > str< / td > < td > target string < / td > < / tr >
< tr > < td class = "paramname" > key< / td > < td > the character to be located < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > the index of its first occurrence, < code > 0< / code > if it could not be found < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 151< / span > {< / div >
< div class = "line" > < span class = "lineno" > 152< / span > < span class = "keywordtype" > int< / span > depth = 0;< / div >
< div class = "line" > < span class = "lineno" > 153< / span > < / div >
< div class = "line" > < span class = "lineno" > 154< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > size_t< / span > i = 0; i < strlen(str); ++i) {< / div >
< div class = "line" > < span class = "lineno" > 155< / span > < span class = "keyword" > const< / span > < span class = "keywordtype" > char< / span > c = str[i];< / div >
< div class = "line" > < span class = "lineno" > 156< / span > < / div >
< div class = "line" > < span class = "lineno" > 157< / span > < span class = "keywordflow" > if< / span > (depth == 0 & & c == key) {< / div >
< div class = "line" > < span class = "lineno" > 158< / span > < span class = "keywordflow" > return< / span > i;< / div >
< div class = "line" > < span class = "lineno" > 159< / span > }< / div >
< div class = "line" > < span class = "lineno" > 160< / span > < span class = "keywordflow" > if< / span > (c == < span class = "charliteral" > ' (' < / span > ) depth++;< / div >
< div class = "line" > < span class = "lineno" > 161< / span > < span class = "keywordflow" > if< / span > (c == < span class = "charliteral" > ' )' < / span > ) depth--;< / div >
< div class = "line" > < span class = "lineno" > 162< / span > }< / div >
< div class = "line" > < span class = "lineno" > 163< / span > < span class = "comment" > // Due to the way this function is intended to be used,< / span > < / div >
< div class = "line" > < span class = "lineno" > 164< / span > < span class = "comment" > // it' s safe to assume the character will not appear as< / span > < / div >
< div class = "line" > < span class = "lineno" > 165< / span > < span class = "comment" > // the string' s first character< / span > < / div >
< div class = "line" > < span class = "lineno" > 166< / span > < span class = "comment" > // thus `0` is used as the `not found` value< / span > < / div >
< div class = "line" > < span class = "lineno" > 167< / span > < span class = "keywordflow" > return< / span > 0;< / div >
< div class = "line" > < span class = "lineno" > 168< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a2dabcd5c410a4b0cac1b4ab378c9dcdc" name = "a2dabcd5c410a4b0cac1b4ab378c9dcdc" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a2dabcd5c410a4b0cac1b4ab378c9dcdc" > ◆   < / a > < / span > isAccepting()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > int isAccepting < / td >
< td > (< / td >
< td class = "paramtype" > const struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > determines whether the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > is currently in its accepting state < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > < code > 1< / code > if the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > is in its accepting state < / dd >
< dd >
< code > 0< / code > otherwise < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 522< / span > {< / div >
< div class = "line" > < span class = "lineno" > 523< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 524< / span > < span class = "keywordflow" > if< / span > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > [i] == nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [1]) {< / div >
< div class = "line" > < span class = "lineno" > 525< / span > < span class = "keywordflow" > return< / span > 1;< / div >
< div class = "line" > < span class = "lineno" > 526< / span > }< / div >
< div class = "line" > < span class = "lineno" > 527< / span > }< / div >
< div class = "line" > < span class = "lineno" > 528< / span > < span class = "keywordflow" > return< / span > 0;< / div >
< div class = "line" > < span class = "lineno" > 529< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a6eaf52853f2b39a1299cc16972a3298e" name = "a6eaf52853f2b39a1299cc16972a3298e" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a6eaf52853f2b39a1299cc16972a3298e" > ◆   < / a > < / span > isLiteral()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > int isLiteral < / td >
< td > (< / td >
< td class = "paramtype" > const char  < / td >
< td class = "paramname" > < em > ch< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > helper function to determine whether a character should be considered a character literal < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > ch< / td > < td > the character to be tested < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > < code > 1< / code > if it is a character literal < / dd >
< dd >
< code > 0< / code > otherwise < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 99< / span > {< / div >
< div class = "line" > < span class = "lineno" > 100< / span > < span class = "keywordflow" > return< / span > !(ch == < span class = "charliteral" > ' (' < / span > || ch == < span class = "charliteral" > ' )' < / span > || ch == < span class = "charliteral" > ' *' < / span > || ch == < span class = "charliteral" > ' \n' < / span > || ch == < span class = "charliteral" > ' |' < / span > );< / div >
< div class = "line" > < span class = "lineno" > 101< / span > }< / div >
< / div > <!-- fragment -->
< / div >
< / div >
< a id = "a840291bc02cba5474a4cb46a9b9566fe" name = "a840291bc02cba5474a4cb46a9b9566fe" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a840291bc02cba5474a4cb46a9b9566fe" > ◆   < / a > < / span > main()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > int main < / td >
< td > (< / td >
< td class = "paramtype" > void  < / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Main function. < / p >
< dl class = "section return" > < dt > Returns< / dt > < dd > 0 on exit < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 593< / span > {< / div >
< div class = "line" > < span class = "lineno" > 594< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a13eda00dd5efd9440b0eaf5430b73e84" > test< / a > (); < span class = "comment" > // run self-test implementations< / span > < / div >
< div class = "line" > < span class = "lineno" > 595< / span > < span class = "keywordflow" > return< / span > 0;< / div >
< div class = "line" > < span class = "lineno" > 596< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a13eda00dd5efd9440b0eaf5430b73e84" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a13eda00dd5efd9440b0eaf5430b73e84" > test< / a > < / div > < div class = "ttdeci" > static void test(void)< / div > < div class = "ttdoc" > Self-test implementations.< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:572< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < div class = "zoom" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a840291bc02cba5474a4cb46a9b9566fe_cgraph.svg" width = "100%" height = "600" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "a86e0f235783b005e4e6e951c9603bbe1" name = "a86e0f235783b005e4e6e951c9603bbe1" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a86e0f235783b005e4e6e951c9603bbe1" > ◆   < / a > < / span > postProcessing()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void postProcessing < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > performs postprocessing on a compiled < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > , add circular empty character transition rules where it's needed for the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > to function correctly < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 393< / span > {< / div >
< div class = "line" > < span class = "lineno" > 394< / span > < span class = "comment" > // Since the sub NFA' s states and rules are managed< / span > < / div >
< div class = "line" > < span class = "lineno" > 395< / span > < span class = "comment" > // through their own pools, recursion is necessary< / span > < / div >
< div class = "line" > < span class = "lineno" > 396< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 397< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a86e0f235783b005e4e6e951c9603bbe1" > postProcessing< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [i]);< / div >
< div class = "line" > < span class = "lineno" > 398< / span > }< / div >
< div class = "line" > < span class = "lineno" > 399< / span > < / div >
< div class = "line" > < span class = "lineno" > 400< / span > < span class = "comment" > // If a state does not have any empty character accepting rule,< / span > < / div >
< div class = "line" > < span class = "lineno" > 401< / span > < span class = "comment" > // we add a rule that circles back to itself< / span > < / div >
< div class = "line" > < span class = "lineno" > 402< / span > < span class = "comment" > // So this state will be preserved when< / span > < / div >
< div class = "line" > < span class = "lineno" > 403< / span > < span class = "comment" > // empty characters are inputted< / span > < / div >
< div class = "line" > < span class = "lineno" > 404< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a1f68cf1d2a14e9e3035baba764dd3df7" > stateCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 405< / span > < / div >
< div class = "line" > < span class = "lineno" > 406< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > * pState = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [i];< / div >
< div class = "line" > < span class = "lineno" > 407< / span > < span class = "keywordtype" > int< / span > f = 0;< / div >
< div class = "line" > < span class = "lineno" > 408< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > j = 0; j < pState-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aab70804a0b5849410e61f51a225d3072" > ruleCount< / a > ; ++j) {< / div >
< div class = "line" > < span class = "lineno" > 409< / span > < span class = "keywordflow" > if< / span > (pState-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > rules< / a > [j]-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#abd89c7bca6969150c7bbf7d888e4aa6b" > cond< / a > == < span class = "charliteral" > ' \0' < / span > ) {< / div >
< div class = "line" > < span class = "lineno" > 410< / span > f = 1;< / div >
< div class = "line" > < span class = "lineno" > 411< / span > < span class = "keywordflow" > break< / span > ;< / div >
< div class = "line" > < span class = "lineno" > 412< / span > }< / div >
< div class = "line" > < span class = "lineno" > 413< / span > }< / div >
< div class = "line" > < span class = "lineno" > 414< / span > < / div >
< div class = "line" > < span class = "lineno" > 415< / span > < span class = "keywordflow" > if< / span > (!f) {< / div >
< div class = "line" > < span class = "lineno" > 416< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a4ed0049e15d45e0d75a991fbb6f8963c" > addRule< / a > (nfa, < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a0b8d037bf2841dede90be41f5fe1ccdc" > createRule< / a > (pState, < span class = "charliteral" > ' \0' < / span > ), i);< / div >
< div class = "line" > < span class = "lineno" > 417< / span > }< / div >
< div class = "line" > < span class = "lineno" > 418< / span > }< / div >
< div class = "line" > < span class = "lineno" > 419< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a86e0f235783b005e4e6e951c9603bbe1" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a86e0f235783b005e4e6e951c9603bbe1" > postProcessing< / a > < / div > < div class = "ttdeci" > void postProcessing(struct NFA *nfa)< / div > < div class = "ttdoc" > performs postprocessing on a compiled NFA, add circular empty character transition rules where it's n...< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:393< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a86e0f235783b005e4e6e951c9603bbe1_cgraph.svg" width = "255" height = "86" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "ae9a5eac7c0d8ac478eb1b97529638fb6" name = "ae9a5eac7c0d8ac478eb1b97529638fb6" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ae9a5eac7c0d8ac478eb1b97529638fb6" > ◆   < / a > < / span > preProcessing()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > char * preProcessing < / td >
< td > (< / td >
< td class = "paramtype" > const char *  < / td >
< td class = "paramname" > < em > input< / em > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > performs preprocessing on a regex string, making all implicit concatenations explicit < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > input< / td > < td > target regex string < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the processing result < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 109< / span > {< / div >
< div class = "line" > < span class = "lineno" > 110< / span > < span class = "keyword" > const< / span > < span class = "keywordtype" > size_t< / span > len = strlen(input);< / div >
< div class = "line" > < span class = "lineno" > 111< / span > < span class = "keywordflow" > if< / span > (len == 0) {< / div >
< div class = "line" > < span class = "lineno" > 112< / span > < span class = "keywordtype" > char< / span > * str = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (1);< / div >
< div class = "line" > < span class = "lineno" > 113< / span > str[0] = < span class = "charliteral" > ' \0' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 114< / span > < span class = "keywordflow" > return< / span > str;< / div >
< div class = "line" > < span class = "lineno" > 115< / span > }< / div >
< div class = "line" > < span class = "lineno" > 116< / span > < / div >
< div class = "line" > < span class = "lineno" > 117< / span > < span class = "keywordtype" > char< / span > * str = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (len * 2);< / div >
< div class = "line" > < span class = "lineno" > 118< / span > < span class = "keywordtype" > size_t< / span > op = 0;< / div >
< div class = "line" > < span class = "lineno" > 119< / span > < / div >
< div class = "line" > < span class = "lineno" > 120< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > size_t< / span > i = 0; i < len - 1; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 121< / span > < span class = "keywordtype" > char< / span > c = input[i];< / div >
< div class = "line" > < span class = "lineno" > 122< / span > str[op++] = c;< / div >
< div class = "line" > < span class = "lineno" > 123< / span > < span class = "comment" > // one character lookahead< / span > < / div >
< div class = "line" > < span class = "lineno" > 124< / span > < span class = "keywordtype" > char< / span > c1 = input[i + 1];< / div >
< div class = "line" > < span class = "lineno" > 125< / span > < / div >
< div class = "line" > < span class = "lineno" > 126< / span > < span class = "keywordflow" > if< / span > ( (< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (c) & & < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (c1)) ||< / div >
< div class = "line" > < span class = "lineno" > 127< / span > (< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (c) & & c1 == < span class = "charliteral" > ' (' < / span > ) ||< / div >
< div class = "line" > < span class = "lineno" > 128< / span > (c == < span class = "charliteral" > ' )' < / span > & & c1 == < span class = "charliteral" > ' (' < / span > ) ||< / div >
< div class = "line" > < span class = "lineno" > 129< / span > (c == < span class = "charliteral" > ' )' < / span > & & < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (c1)) ||< / div >
< div class = "line" > < span class = "lineno" > 130< / span > (c == < span class = "charliteral" > ' *' < / span > & & < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6eaf52853f2b39a1299cc16972a3298e" > isLiteral< / a > (c1)) ||< / div >
< div class = "line" > < span class = "lineno" > 131< / span > (c == < span class = "charliteral" > ' *' < / span > & & c1 == < span class = "charliteral" > ' (' < / span > )< / div >
< div class = "line" > < span class = "lineno" > 132< / span > ) {< / div >
< div class = "line" > < span class = "lineno" > 133< / span > < span class = "comment" > // ' \n' is used to represent concatenation< / span > < / div >
< div class = "line" > < span class = "lineno" > 134< / span > < span class = "comment" > // in this implementation< / span > < / div >
< div class = "line" > < span class = "lineno" > 135< / span > str[op++] = < span class = "charliteral" > ' \n' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 136< / span > }< / div >
< div class = "line" > < span class = "lineno" > 137< / span > }< / div >
< div class = "line" > < span class = "lineno" > 138< / span > < / div >
< div class = "line" > < span class = "lineno" > 139< / span > str[op++] = input[len - 1];< / div >
< div class = "line" > < span class = "lineno" > 140< / span > str[op] = < span class = "charliteral" > ' \0' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 141< / span > < span class = "keywordflow" > return< / span > str;< / div >
< div class = "line" > < span class = "lineno" > 142< / span > }< / div >
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_ae9a5eac7c0d8ac478eb1b97529638fb6_cgraph.svg" width = "230" height = "36" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "af1fbbb13a173dbacb0d4195923ab6cb3" name = "af1fbbb13a173dbacb0d4195923ab6cb3" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#af1fbbb13a173dbacb0d4195923ab6cb3" > ◆   < / a > < / span > redirect()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void redirect < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > src< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *  < / td >
< td class = "paramname" > < em > dest< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > helper function to recursively redirect transition rule targets < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< tr > < td class = "paramname" > src< / td > < td > the state to redirect away from < / td > < / tr >
< tr > < td class = "paramname" > dest< / td > < td > the state to redirect to < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 267< / span > {< / div >
< div class = "line" > < span class = "lineno" > 268< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a5e64682c0c21d3f931096b2ef38b5072" > subCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 269< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#af1fbbb13a173dbacb0d4195923ab6cb3" > redirect< / a > (nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a9b3eef40ce5b331a6508648b2c32ea00" > subs< / a > [i], src, dest);< / div >
< div class = "line" > < span class = "lineno" > 270< / span > }< / div >
< div class = "line" > < span class = "lineno" > 271< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a7087a5c8f402de41f50d38f7fdf99f74" > ruleCount< / a > ; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 272< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > * rule = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a6d263fee53d282bdb1536ad2134bd532" > rulePool< / a > [i];< / div >
< div class = "line" > < span class = "lineno" > 273< / span > < span class = "keywordflow" > if< / span > (rule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > == src) {< / div >
< div class = "line" > < span class = "lineno" > 274< / span > rule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > = dest;< / div >
< div class = "line" > < span class = "lineno" > 275< / span > }< / div >
< div class = "line" > < span class = "lineno" > 276< / span > }< / div >
< div class = "line" > < span class = "lineno" > 277< / span > }< / div >
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_af1fbbb13a173dbacb0d4195923ab6cb3_cgraph.svg" width = "75" height = "60" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "a072d13f905ab9438d38d7415df222817" name = "a072d13f905ab9438d38d7415df222817" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a072d13f905ab9438d38d7415df222817" > ◆   < / a > < / span > subString()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > char * subString < / td >
< td > (< / td >
< td class = "paramtype" > const char *  < / td >
< td class = "paramname" > < em > str< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > size_t  < / td >
< td class = "paramname" > < em > begin< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > size_t  < / td >
< td class = "paramname" > < em > end< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > utility function to create a subString < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > str< / td > < td > target string < / td > < / tr >
< tr > < td class = "paramname" > begin< / td > < td > starting index, inclusive < / td > < / tr >
< tr > < td class = "paramname" > end< / td > < td > ending index, inclusive < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > pointer to the newly created subString < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 177< / span > {< / div >
< div class = "line" > < span class = "lineno" > 178< / span > < span class = "keywordtype" > char< / span > * res = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (end - < a class = "code hl_function" href = "../../df/dfa/vector_8c.html#a1afee8aaf33d741df31a73048cff4473" > begin< / a > + 2);< / div >
< div class = "line" > < span class = "lineno" > 179< / span > strncpy(res, str + < a class = "code hl_function" href = "../../df/dfa/vector_8c.html#a1afee8aaf33d741df31a73048cff4473" > begin< / a > , end - < a class = "code hl_function" href = "../../df/dfa/vector_8c.html#a1afee8aaf33d741df31a73048cff4473" > begin< / a > + 1);< / div >
< div class = "line" > < span class = "lineno" > 180< / span > res[end - < a class = "code hl_function" href = "../../df/dfa/vector_8c.html#a1afee8aaf33d741df31a73048cff4473" > begin< / a > + 1] = < span class = "charliteral" > ' \0' < / span > ;< / div >
< div class = "line" > < span class = "lineno" > 181< / span > < span class = "keywordflow" > return< / span > res;< / div >
< div class = "line" > < span class = "lineno" > 182< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "avector_8c_html_a1afee8aaf33d741df31a73048cff4473" > < div class = "ttname" > < a href = "../../df/dfa/vector_8c.html#a1afee8aaf33d741df31a73048cff4473" > begin< / a > < / div > < div class = "ttdeci" > void * begin(Vector *vec)< / div > < div class = "ttdoc" > This function returns the pointer to the begining of the Vector.< / div > < div class = "ttdef" > < b > Definition< / b > vector.c:116< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a072d13f905ab9438d38d7415df222817_cgraph.svg" width = "188" height = "36" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "a13eda00dd5efd9440b0eaf5430b73e84" name = "a13eda00dd5efd9440b0eaf5430b73e84" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a13eda00dd5efd9440b0eaf5430b73e84" > ◆   < / a > < / span > test()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "mlabels" >
< tr >
< td class = "mlabels-left" >
< table class = "memname" >
< tr >
< td class = "memname" > static void test < / td >
< td > (< / td >
< td class = "paramtype" > void  < / td >
< td class = "paramname" > < / td > < td > )< / td >
< td > < / td >
< / tr >
< / table >
< / td >
< td class = "mlabels-right" >
< span class = "mlabels" > < span class = "mlabel" > static< / span > < / span > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Self-test implementations. < / p >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 572< / span > {< / div >
< div class = "line" > < span class = "lineno" > 573< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (c|a*b)" < / span > , < span class = "stringliteral" > " c" < / span > , 1);< / div >
< div class = "line" > < span class = "lineno" > 574< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (c|a*b)" < / span > , < span class = "stringliteral" > " aab" < / span > , 1);< / div >
< div class = "line" > < span class = "lineno" > 575< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (c|a*b)" < / span > , < span class = "stringliteral" > " ca" < / span > , 0);< / div >
< div class = "line" > < span class = "lineno" > 576< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (c|a*b)*" < / span > , < span class = "stringliteral" > " caaab" < / span > , 1);< / div >
< div class = "line" > < span class = "lineno" > 577< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (c|a*b)*" < / span > , < span class = "stringliteral" > " caba" < / span > , 0);< / div >
< div class = "line" > < span class = "lineno" > 578< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " " < / span > , < span class = "stringliteral" > " " < / span > , 1);< / div >
< div class = "line" > < span class = "lineno" > 579< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " " < / span > , < span class = "stringliteral" > " 1" < / span > , 0);< / div >
< div class = "line" > < span class = "lineno" > 580< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (0|(1(01*(00)*0)*1)*)*" < / span > ,< span class = "stringliteral" > " 11" < / span > ,1);< / div >
< div class = "line" > < span class = "lineno" > 581< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (0|(1(01*(00)*0)*1)*)*" < / span > ,< span class = "stringliteral" > " 110" < / span > ,1);< / div >
< div class = "line" > < span class = "lineno" > 582< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (0|(1(01*(00)*0)*1)*)*" < / span > ,< span class = "stringliteral" > " 1100" < / span > ,1);< / div >
< div class = "line" > < span class = "lineno" > 583< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (0|(1(01*(00)*0)*1)*)*" < / span > ,< span class = "stringliteral" > " 10000" < / span > ,0);< / div >
< div class = "line" > < span class = "lineno" > 584< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > (< span class = "stringliteral" > " (0|(1(01*(00)*0)*1)*)*" < / span > ,< span class = "stringliteral" > " 00000" < / span > ,1);< / div >
< div class = "line" > < span class = "lineno" > 585< / span > < / div >
< div class = "line" > < span class = "lineno" > 586< / span > printf(< span class = "stringliteral" > " All tests have successfully passed!\n" < / span > );< / div >
< div class = "line" > < span class = "lineno" > 587< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a38faadeab39bb48716f1065bc05abec8" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a38faadeab39bb48716f1065bc05abec8" > testHelper< / a > < / div > < div class = "ttdeci" > void testHelper(const char *regex, const char *string, const int expected)< / div > < div class = "ttdoc" > Testing helper function.< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:540< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a13eda00dd5efd9440b0eaf5430b73e84_cgraph.svg" width = "604" height = "580" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "a38faadeab39bb48716f1065bc05abec8" name = "a38faadeab39bb48716f1065bc05abec8" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a38faadeab39bb48716f1065bc05abec8" > ◆   < / a > < / span > testHelper()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void testHelper < / td >
< td > (< / td >
< td class = "paramtype" > const char *  < / td >
< td class = "paramname" > < em > regex< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > const char *  < / td >
< td class = "paramname" > < em > string< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > const int  < / td >
< td class = "paramname" > < em > expected< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > Testing helper function. < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > regex< / td > < td > the regular expression to be used < / td > < / tr >
< tr > < td class = "paramname" > string< / td > < td > the string to match against < / td > < / tr >
< tr > < td class = "paramname" > expected< / td > < td > expected results < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 540< / span > {< / div >
< div class = "line" > < span class = "lineno" > 541< / span > < span class = "keywordtype" > char< / span > * temp = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ae9a5eac7c0d8ac478eb1b97529638fb6" > preProcessing< / a > (regex);< / div >
< div class = "line" > < span class = "lineno" > 542< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d8/d66/struct_a_s_t_node.html" > ASTNode< / a > * < a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > = < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a496e9b4e45417ac56dac40bbbb769d7a" > buildAST< / a > (temp);< / div >
< div class = "line" > < span class = "lineno" > 543< / span > < / div >
< div class = "line" > < span class = "lineno" > 544< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > * nfa = compileFromAST(< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > );< / div >
< div class = "line" > < span class = "lineno" > 545< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a86e0f235783b005e4e6e951c9603bbe1" > postProcessing< / a > (nfa);< / div >
< div class = "line" > < span class = "lineno" > 546< / span > < / div >
< div class = "line" > < span class = "lineno" > 547< / span > < span class = "comment" > // reallocates the outermost NFA' s current states pool< / span > < / div >
< div class = "line" > < span class = "lineno" > 548< / span > < span class = "comment" > // because it will actually be used to store all the states< / span > < / div >
< div class = "line" > < span class = "lineno" > 549< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > = realloc(nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > , < span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 100);< / div >
< div class = "line" > < span class = "lineno" > 550< / span > < span class = "comment" > // Starts the NFA by adding its starting state to the pool< / span > < / div >
< div class = "line" > < span class = "lineno" > 551< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > [nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > ++] = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#aaf1fe7a48e3990c7cc9ec5cba8c82d02" > statePool< / a > [0];< / div >
< div class = "line" > < span class = "lineno" > 552< / span > < / div >
< div class = "line" > < span class = "lineno" > 553< / span > < span class = "comment" > // feeds empty characters into the NFA before and after< / span > < / div >
< div class = "line" > < span class = "lineno" > 554< / span > < span class = "comment" > // every normal character< / span > < / div >
< div class = "line" > < span class = "lineno" > 555< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > size_t< / span > i = 0; i < strlen(< span class = "keywordtype" > string< / span > ); ++i) {< / div >
< div class = "line" > < span class = "lineno" > 556< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aebe16fbf12c8ac089501ebcae6f0c050" > transit< / a > (nfa, < span class = "charliteral" > ' \0' < / span > );< / div >
< div class = "line" > < span class = "lineno" > 557< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aebe16fbf12c8ac089501ebcae6f0c050" > transit< / a > (nfa, < span class = "keywordtype" > string< / span > [i]);< / div >
< div class = "line" > < span class = "lineno" > 558< / span > }< / div >
< div class = "line" > < span class = "lineno" > 559< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aebe16fbf12c8ac089501ebcae6f0c050" > transit< / a > (nfa, < span class = "charliteral" > ' \0' < / span > );< / div >
< div class = "line" > < span class = "lineno" > 560< / span > < / div >
< div class = "line" > < span class = "lineno" > 561< / span > assert(< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a2dabcd5c410a4b0cac1b4ab378c9dcdc" > isAccepting< / a > (nfa) == expected);< / div >
< div class = "line" > < span class = "lineno" > 562< / span > < / div >
< div class = "line" > < span class = "lineno" > 563< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a684ed3494e22ee17d7b3e19a4d1fe977" > destroyNFA< / a > (nfa);< / div >
< div class = "line" > < span class = "lineno" > 564< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a6a97ab2db6392f262b03370689872348" > destroyNode< / a > (< a class = "code hl_struct" href = "../../d5/da1/structnode.html" > node< / a > );< / div >
< div class = "line" > < span class = "lineno" > 565< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (temp);< / div >
< div class = "line" > < span class = "lineno" > 566< / span > }< / div >
2023-06-21 05:10:10 +08:00
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_a2dabcd5c410a4b0cac1b4ab378c9dcdc" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a2dabcd5c410a4b0cac1b4ab378c9dcdc" > isAccepting< / a > < / div > < div class = "ttdeci" > int isAccepting(const struct NFA *nfa)< / div > < div class = "ttdoc" > determines whether the NFA is currently in its accepting state< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:522< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_ae9a5eac7c0d8ac478eb1b97529638fb6" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#ae9a5eac7c0d8ac478eb1b97529638fb6" > preProcessing< / a > < / div > < div class = "ttdeci" > char * preProcessing(const char *input)< / div > < div class = "ttdoc" > performs preprocessing on a regex string, making all implicit concatenations explicit< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:109< / div > < / div >
< div class = "ttc" id = "amcnaughton__yamada__thompson_8c_html_aebe16fbf12c8ac089501ebcae6f0c050" > < div class = "ttname" > < a href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#aebe16fbf12c8ac089501ebcae6f0c050" > transit< / a > < / div > < div class = "ttdeci" > void transit(struct NFA *nfa, char input)< / div > < div class = "ttdoc" > moves a NFA forward< / div > < div class = "ttdef" > < b > Definition< / b > mcnaughton_yamada_thompson.c:465< / div > < / div >
2023-04-12 09:00:24 +08:00
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_a38faadeab39bb48716f1065bc05abec8_cgraph.svg" width = "514" height = "580" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< a id = "aebe16fbf12c8ac089501ebcae6f0c050" name = "aebe16fbf12c8ac089501ebcae6f0c050" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#aebe16fbf12c8ac089501ebcae6f0c050" > ◆   < / a > < / span > transit()< / h2 >
< div class = "memitem" >
< div class = "memproto" >
< table class = "memname" >
< tr >
< td class = "memname" > void transit < / td >
< td > (< / td >
< td class = "paramtype" > struct < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" > NFA< / a > *  < / td >
< td class = "paramname" > < em > nfa< / em > , < / td >
< / tr >
< tr >
< td class = "paramkey" > < / td >
< td > < / td >
< td class = "paramtype" > char  < / td >
< td class = "paramname" > < em > input< / em >   < / td >
< / tr >
< tr >
< td > < / td >
< td > )< / td >
< td > < / td > < td > < / td >
< / tr >
< / table >
< / div > < div class = "memdoc" >
< p > moves a < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > forward < / p >
< dl class = "params" > < dt > Parameters< / dt > < dd >
< table class = "params" >
< tr > < td class = "paramname" > nfa< / td > < td > target < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< tr > < td class = "paramname" > input< / td > < td > the character to be fed into the < a class = "el" href = "../../d3/dd7/struct_n_f_a.html" title = "Definition for the NFA itself." > NFA< / a > < / td > < / tr >
< / table >
< / dd >
< / dl >
< dl class = "section return" > < dt > Returns< / dt > < dd > void < / dd > < / dl >
< div class = "fragment" > < div class = "line" > < span class = "lineno" > 465< / span > {< / div >
< div class = "line" > < span class = "lineno" > 466< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > ** newStates = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 10);< / div >
< div class = "line" > < span class = "lineno" > 467< / span > < span class = "keywordtype" > int< / span > NSCount = 0;< / div >
< div class = "line" > < span class = "lineno" > 468< / span > < / div >
< div class = "line" > < span class = "lineno" > 469< / span > < span class = "keywordflow" > if< / span > (input == < span class = "charliteral" > ' \0' < / span > ) {< / div >
< div class = "line" > < span class = "lineno" > 470< / span > < span class = "comment" > // In case of empty character input, it' s possible for< / span > < / div >
< div class = "line" > < span class = "lineno" > 471< / span > < span class = "comment" > // a state to transit to another state that' s more than< / span > < / div >
< div class = "line" > < span class = "lineno" > 472< / span > < span class = "comment" > // one rule away, we need to take that into account< / span > < / div >
< div class = "line" > < span class = "lineno" > 473< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > - 1; i > -1; --i) {< / div >
< div class = "line" > < span class = "lineno" > 474< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *pState = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > [i];< / div >
< div class = "line" > < span class = "lineno" > 475< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > --;< / div >
< div class = "line" > < span class = "lineno" > 476< / span > < / div >
< div class = "line" > < span class = "lineno" > 477< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > ** states = < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a725f50ecaf1959d96de79b36b4788fee" > malloc< / a > (< span class = "keyword" > sizeof< / span > (< span class = "keyword" > struct< / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *) * 10);< / div >
< div class = "line" > < span class = "lineno" > 478< / span > < span class = "keywordtype" > int< / span > sc = 0;< / div >
< div class = "line" > < span class = "lineno" > 479< / span > < a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a34774f1859a742ea1c3eaf3f6726b66c" > findEmpty< / a > (pState, states, & sc);< / div >
< div class = "line" > < span class = "lineno" > 480< / span > < / div >
< div class = "line" > < span class = "lineno" > 481< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > j = 0; j < sc; ++j) {< / div >
< div class = "line" > < span class = "lineno" > 482< / span > < span class = "keywordflow" > if< / span > (!< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a709e32f5905536216abb03efb4f4db2b" > contains< / a > (newStates,NSCount, states[j])) {< / div >
< div class = "line" > < span class = "lineno" > 483< / span > newStates[NSCount++] = states[j];< / div >
< div class = "line" > < span class = "lineno" > 484< / span > }< / div >
< div class = "line" > < span class = "lineno" > 485< / span > }< / div >
< div class = "line" > < span class = "lineno" > 486< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (states);< / div >
< div class = "line" > < span class = "lineno" > 487< / span > }< / div >
< div class = "line" > < span class = "lineno" > 488< / span > } < span class = "keywordflow" > else< / span > {< / div >
< div class = "line" > < span class = "lineno" > 489< / span > < span class = "comment" > // Iterates through all current states< / span > < / div >
< div class = "line" > < span class = "lineno" > 490< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > - 1; i > -1; --i) {< / div >
< div class = "line" > < span class = "lineno" > 491< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d4/d97/struct_n_f_a_state.html" > NFAState< / a > *pState = nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > [i];< / div >
< div class = "line" > < span class = "lineno" > 492< / span > < span class = "comment" > // Gradually empties the current states pool, so< / span > < / div >
< div class = "line" > < span class = "lineno" > 493< / span > < span class = "comment" > // it can be refilled< / span > < / div >
< div class = "line" > < span class = "lineno" > 494< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > --;< / div >
< div class = "line" > < span class = "lineno" > 495< / span > < / div >
< div class = "line" > < span class = "lineno" > 496< / span > < span class = "comment" > // Iterates through rules of this state< / span > < / div >
< div class = "line" > < span class = "lineno" > 497< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > j = 0; j < pState-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aab70804a0b5849410e61f51a225d3072" > ruleCount< / a > ; ++j) {< / div >
< div class = "line" > < span class = "lineno" > 498< / span > < span class = "keyword" > const< / span > < span class = "keyword" > struct < / span > < a class = "code hl_struct" href = "../../d9/dd9/structtrans_rule.html" > transRule< / a > *pRule = pState-> < a class = "code hl_variable" href = "../../d4/d97/struct_n_f_a_state.html#aca9718d26eff08bb41418c5ec3442381" > rules< / a > [j];< / div >
< div class = "line" > < span class = "lineno" > 499< / span > < / div >
< div class = "line" > < span class = "lineno" > 500< / span > < span class = "keywordflow" > if< / span > (pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#abd89c7bca6969150c7bbf7d888e4aa6b" > cond< / a > == input) {< / div >
< div class = "line" > < span class = "lineno" > 501< / span > < span class = "keywordflow" > if< / span > (!< a class = "code hl_function" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html#a709e32f5905536216abb03efb4f4db2b" > contains< / a > (newStates, NSCount, pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > )) {< / div >
< div class = "line" > < span class = "lineno" > 502< / span > newStates[NSCount++] = pRule-> < a class = "code hl_variable" href = "../../d9/dd9/structtrans_rule.html#a3459db0aa62824b51da3297e431900bd" > target< / a > ;< / div >
< div class = "line" > < span class = "lineno" > 503< / span > }< / div >
< div class = "line" > < span class = "lineno" > 504< / span > }< / div >
< div class = "line" > < span class = "lineno" > 505< / span > }< / div >
< div class = "line" > < span class = "lineno" > 506< / span > }< / div >
< div class = "line" > < span class = "lineno" > 507< / span > }< / div >
< div class = "line" > < span class = "lineno" > 508< / span > < / div >
< div class = "line" > < span class = "lineno" > 509< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#a38e4fdb290def5942dc14eff7c6211ba" > CSCount< / a > = NSCount;< / div >
< div class = "line" > < span class = "lineno" > 510< / span > < span class = "keywordflow" > for< / span > (< span class = "keywordtype" > int< / span > i = 0; i < NSCount; ++i) {< / div >
< div class = "line" > < span class = "lineno" > 511< / span > nfa-> < a class = "code hl_variable" href = "../../d3/dd7/struct_n_f_a.html#ad400f1830095be00a7fdff804d6405c0" > currentStates< / a > [i] = newStates[i];< / div >
< div class = "line" > < span class = "lineno" > 512< / span > }< / div >
< div class = "line" > < span class = "lineno" > 513< / span > < a class = "code hl_define" href = "../../d2/ddd/malloc__dbg_8h.html#a9cc854374299a1dd933bf62029761768" > free< / a > (newStates);< / div >
< div class = "line" > < span class = "lineno" > 514< / span > }< / div >
< / div > <!-- fragment --> < div class = "dynheader" >
Here is the call graph for this function:< / div >
< div class = "dyncontent" >
2023-06-21 05:10:10 +08:00
< div class = "center" > < iframe scrolling = "no" frameborder = "0" src = "../../dd/d2e/mcnaughton__yamada__thompson_8c_aebe16fbf12c8ac089501ebcae6f0c050_cgraph.svg" width = "315" height = "75" > < p > < b > This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.< / b > < / p > < / iframe > < / div >
2023-04-12 09:00:24 +08:00
< / div >
< / div >
< / div >
< / div > <!-- contents -->
< / div > <!-- doc - content -->
<!-- start footer part -->
< div id = "nav-path" class = "navpath" > <!-- id is needed for treeview function! -->
< ul >
< li class = "navelem" > < a class = "el" href = "../../dir_a52f4d3d586a58b02f3a4ddf0a992157.html" > misc< / a > < / li > < li class = "navelem" > < a class = "el" href = "../../dd/d2e/mcnaughton__yamada__thompson_8c.html" > mcnaughton_yamada_thompson.c< / a > < / li >
2023-06-21 05:10:10 +08:00
< li class = "footer" > Generated by < a href = "https://www.doxygen.org/index.html" > < img class = "footer" src = "../../doxygen.svg" width = "104" height = "31" alt = "doxygen" / > < / a > 1.9.7 < / li >
2023-04-12 09:00:24 +08:00
< / ul >
< / div >
< / body >
< / html >