Ejemplo n.º 1
0
bool RegEx::star()
{
	FSA_TABLE A;
	if(!pop(A))
		return false;

	State* pStart = Services::memory->alloc<State>();
	new (pStart) State(++m_nNextStateID);
	State* pEnd = Services::memory->alloc<State>();
	new (pEnd) State(++m_nNextStateID);

	pStart->addTransition(0,pEnd);

	pStart->addTransition(0,A[0]);

	A.back()->addTransition(0,pEnd);

	A.back()->addTransition(0,A[0]);

	A.push_back(pEnd);
	A.push_front(pStart);

	m_OperandStack.push(A);
	return true;
}
Ejemplo n.º 2
0
void test_DFA2() {
	vector<char> all_inputs;
	FSA_TABLE NFATable;
	vector<string> patterns;

	all_inputs.push_back('a');
	all_inputs.push_back('b');
	for (int i = 0; i < 9; i++)
		NFATable.push_back(new FA_State(i));

	NFATable[2]->acceptingState = true;
	NFATable[6]->acceptingState = true;
	NFATable[8]->acceptingState = true;

	NFATable[0]->AddTransition(EPSILON, NFATable[1]);
	NFATable[1]->AddTransition('a', NFATable[2]);

	NFATable[0]->AddTransition(EPSILON, NFATable[3]);
	NFATable[3]->AddTransition('a', NFATable[4]);
	NFATable[4]->AddTransition('b', NFATable[5]);
	NFATable[5]->AddTransition('b', NFATable[6]);

	NFATable[0]->AddTransition(EPSILON, NFATable[7]);
	NFATable[7]->AddTransition('a', NFATable[7]);
	NFATable[7]->AddTransition('b', NFATable[8]);
	NFATable[8]->AddTransition('b', NFATable[8]);

	DFA_Builder* DFA = new DFA_Builder(NFATable, patterns, all_inputs);
	cout << " Conversion Function " << endl;
	DFA->NFA_to_DFA();
}
Ejemplo n.º 3
0
void RegEx::push(char c){
	State* s0 = Services::memory->alloc<State>();
	new (s0) State(++m_nNextStateID);
	State* s1 = Services::memory->alloc<State>();
	new (s1) State(++m_nNextStateID);

	s0->addTransition(c,s1);

	FSA_TABLE NFATable;
	NFATable.push_back(s0);
	NFATable.push_back(s1);

	m_OperandStack.push(NFATable);

	m_InputSet.insert(c);
}
Ejemplo n.º 4
0
void CAG_RegEx::Push(char chInput)
{
	// Create 2 new states on the heap
	CAG_State *s0 = new CAG_State(++m_nNextStateID);
	CAG_State *s1 = new CAG_State(++m_nNextStateID);

	// Add the transition from s0->s1 on input character
	s0->AddTransition(chInput, s1);

	// Create a NFA from these 2 states 
	FSA_TABLE NFATable;
	NFATable.push_back(s0);
	NFATable.push_back(s1);

	// push it onto the operand stack
	m_OperandStack.push(NFATable);

	cout<<__FILE__<<__LINE__<<endl;

	vector<FSA_TABLE> tmp;	
	while(!m_OperandStack.empty()) {
		tmp.push_back(m_OperandStack.top());
		m_OperandStack.pop();
	}
	
	vector<FSA_TABLE>::iterator it = tmp.begin();
	for(; it != tmp.end(); it++) {
		m_OperandStack.push(*it);
		deque<CAG_State*>::iterator jt = (*it).begin();
		for(; jt != (*it).end(); jt++) {
			cout<<(**jt).getID()<<" ";
		}
		cout<<"\n\n"<<endl;
	}

	// Add this character to the input character set
	m_InputSet.insert(chInput);

	//TRACE("PUSH %s\n", CString(chInput));
}
Ejemplo n.º 5
0
void CAG_RegEx::Push(char chInput)
{
	// Create 2 new states on the heap
	CAG_State *s0 = new CAG_State(++m_nNextStateID);
	CAG_State *s1 = new CAG_State(++m_nNextStateID);

	// Add the transition from s0->s1 on input character
	s0->AddTransition(chInput, s1);

	// Create a NFA from these 2 states 
	FSA_TABLE NFATable;
	NFATable.push_back(s0);
	NFATable.push_back(s1);

	// push it onto the operand stack
	m_OperandStack.push(NFATable);

	// Add this character to the input character set
	m_InputSet.insert(chInput);

	TRACE("PUSH %s\n", CString(chInput));
}