本文整理汇总了C++中NFA::get_transitions方法的典型用法代码示例。如果您正苦于以下问题:C++ NFA::get_transitions方法的具体用法?C++ NFA::get_transitions怎么用?C++ NFA::get_transitions使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NFA
的用法示例。
在下文中一共展示了NFA::get_transitions方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: NFA
NFA *regex_parser::parse(FILE *file, int from, int to){
rewind(file);
char *re=allocate_char_array(4000);
char cmd[4000];
int i=0;
int j=0;
unsigned int c=fgetc(file);
// NFA
NFA *nfa=new NFA();
NFA *non_anchored = nfa->add_epsilon(); // for .* RegEx
NFA *anchored = nfa->add_epsilon(); // for anchored RegEx (^)
fprintf(stdout,"\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
//parsing the RegEx and putting them in a NFA
while(c!=EOF){
if (c=='\n' || c=='\r'){
if(i!=0){
re[i]='\0';
if (re[0]!='#'){
j++;
if (j>=from && (to==-1 || j<=to)){
fprintf(stdout,"%dth regex: %s\n",j,re);
if (DEBUG) fprintf(stdout,"\n%d) processing regex:: <%s> ...\n",j,re);
parse_re(nfa, re);
}
}
i=0;
free(re);
re=allocate_char_array(4000);
}
}else{
re[i++]=c;
}
c=fgetc(file);
} //end while
if(i!=0){
re[i]='\0';
if (re[0]!= '#'){
j++;
if (j>=from && (to==-1 || j<=to)){
fprintf(stdout,"%dth regex: %s\n",j,re);
if (DEBUG) fprintf(stdout,"\n%d) processing regex:: <%s> ...\n",j,re);
parse_re(nfa,re);
}
}
free(re);
}
if (DEBUG) fprintf(stdout, "\nAll RegEx processed\n");
//if (re!=NULL) free(re);
//handle -m modifier
if (m_modifier && (!anchored->get_epsilon()->empty() || !anchored->get_transitions()->empty())){
non_anchored->add_transition('\n',anchored);
non_anchored->add_transition('\r',anchored);
}
//delete non_anchored, if necessary
if(non_anchored->get_epsilon()->empty() && non_anchored->get_transitions()->empty()){
nfa->get_epsilon()->remove(non_anchored);
delete non_anchored;
}else{
non_anchored->add_any(non_anchored);
}
return nfa->get_first();
}