int Lex_analyzer_construct() { struct Node *root=NULL; init(); memset(isinput,0,sizeof(isinput)); for(int i=0;i<token_n;i++) { struct Node *x=bds(tokens[i].regular); if(x==NULL) { printf("Token #%d:%s Is Wrong\n",i,tokens[i].name); printf("Lex analyzer construct failed.\n"); return -1; } x->right->token=i; acposition[i]=x->right->n; if(root==NULL)root=x; else root=newNode('|'+256,root,x); } memset(followpos,0,sizeof(followpos)); nfl(root); ptr(root,0); putchar('\n'); print_followpos(); DFA_from_regular(root); print_DFA(); Minimizing_DFA(); print_Minimized_DFA(); return 0; }
/********************************************************************** * * calcpos */ bool calcpos(void) { rbuf.setsize = set_bytesize(rbuf.root+1); if (!set_pos() || !followpos()) { free_posmem(); return FALSE; } #ifdef TEST if (debug > 1) { print_tree(); print_followpos(); } #endif free_posmem(); return TRUE; }
int Test() { char s[200]; while(gets(s)) { init(); struct Node *x=bds(s); if(x) { memset(followpos,0,sizeof(followpos)); nfl(x); ptr(x,0); putchar('\n'); print_followpos(); DFA_from_regular(x); print_DFA(); Minimizing_DFA(); print_Minimized_DFA(); } } return 0; }