• 大小: 241KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: 其他
  • 标签: 编译原理  

资源简介

编译原理 包括核心代码和可视化的代码,实现了指定状态下识别活前缀的DFA

资源截图

代码片段和文件信息

#include “StdAfx.h“
#define _TEST_G_TO_DEF
#include 
#include 
#include 
using namespace std;


GDFA::GDFA ( vector vn vector vt vector produce_expr char s ):\
m_VN(vn) m_VT(vt) m_produce_expr(produce_expr) m_S(s)
{ }
bool GDFA::composite_produce_expr_to_single_produce_expr () 
// 将文法中的复合产生式转换为单个产生式,即消除“|“符号
{
//cout << “对方法进行拓展“ << endl;
string g_begin;
g_begin = “S->“;
g_begin += m_S;
//cout << g_begin << endl;
m_produce_expr.push_back (g_begin);

string left;//产生式的部+“->“
string right;
for (vector::iterator itr=m_produce_expr.begin(); itr!=m_produce_expr.end(); ++itr)
{ // 找“->“
//cout << itr->find_first_of(‘|‘) << endl;
for (size_t st=0; st!=itr->length(); ++st )
if ( itr->at(st) == ‘-‘ && itr->at(st+1)==‘>‘ ) // 匹配“->“
{ ++st; break; }
left = itr->substr(0 st+1); // 如果st==itr->length(); 错误
//cout << left << endl;
size_t last_pos = st+1;
for (size_t nt=st; nt!=itr->length (); ++ nt )
{
if ( itr->at(nt) == ‘|‘)
{// 生成一个产生式到m_lr_iterm中
m_lr_iterm.push_back ( left );
m_lr_iterm.back () += itr->substr(last_pos nt-last_pos);
last_pos = nt+1;
cout << m_lr_iterm.back() << endl;
} else if ( nt == itr->length()-1 ) // 扫描到最后一个字符
{
m_lr_iterm.push_back ( left );
m_lr_iterm.back() += itr->substr(last_pos itr->length()-last_pos);
cout << m_lr_iterm.back() << endl;
}
}
}
// 找“|“
return true;
}

bool GDFA::g_to_item()
{
int ii;
string right; // 产生式右部字字符串
for ( vector::iterator itr=m_lr_iterm.begin(); itr!=m_lr_iterm.end(); ++itr )
{ // 取得产生式右部
ii = itr->find_first_of(‘>‘) ++ii; // 指向产生式右部的第一个字符
right = itr->substr(ii itr->length());
itr->erase( ii itr->length());

itr->append(“.“) itr->append(right) itr->append(“&“);
for ( size_t ik=0; ik != right.length(); ++ik )
{
itr->append (right.substr(0ik+1)) ;
itr->append (“.“);
itr->append (right.substr(ik+1 right.length()-ik+1));
itr->append (“&“);
}
}
return true;
}

vector GDFA::get_iterm_set ()
{
vector iterm_tmp;
string left; // 项目左部
string right; // 项目右部
int int_tmp1 int_tmp2;
vector return_iterm_set;

for ( vector::iterator itr=m_lr_iterm.begin(); itr!=m_lr_iterm.end(); ++itr )
{
int_tmp1 = itr->find_first_of(‘>‘);
left = itr->substr (0 int_tmp1+1) ++int_tmp1; DEBUG(left);
int_tmp2 = itr->find_first_of(‘&‘);
right = itr->substr (int_tmp1 int_tmp2-int_tmp1) ++int_tmp2; DEBUG(right);
return_iterm_set.push_back (left+right);

if ( int_tmp2 != itr->length() )
{
int_tmp1 = int_tmp2;
while ( int_tmp2 < itr->length()) {
if(itr->at(int_tmp2) != ‘&‘)
{
++int_tmp2;
continue;
}
right = itr->substr( int_tmp1 int_tmp2-int_tmp1)++ int_tmp2; DEBUG(right);
return_iterm_set.push_back (left+right);
int_tmp1 = int_tmp2;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6307  2009-11-19 16:18  编译原理识别活缀的DFA\core\gdfa.cpp

     文件       3627  2009-11-11 22:53  编译原理识别活缀的DFA\core\gdfa.dsp

     文件        533  2009-11-11 22:53  编译原理识别活缀的DFA\core\gdfa.dsw

     文件       1261  2009-11-18 08:05  编译原理识别活缀的DFA\core\gdfa.h

     文件      82944  2009-11-18 21:16  编译原理识别活缀的DFA\core\gdfa.ncb

     文件      55808  2009-11-18 21:16  编译原理识别活缀的DFA\core\gdfa.opt

     文件      12741  2009-11-18 21:16  编译原理识别活缀的DFA\core\gdfa.plg

     文件      10899  2009-11-18 21:16  编译原理识别活缀的DFA\core\gdfa_test.cpp

     文件        437  2009-11-17 14:51  编译原理识别活缀的DFA\core\gdfa_test.h

     文件        205  2009-11-17 11:49  编译原理识别活缀的DFA\core\StdAfx.h

     文件         82  2009-11-11 22:25  编译原理识别活缀的DFA\core\vector_test.cpp

     文件       6970  2009-11-18 19:50  编译原理识别活缀的DFA\GtoDFA\gdfa.cpp

     文件       1376  2009-11-18 19:50  编译原理识别活缀的DFA\GtoDFA\gdfa.h

     文件      10768  2009-11-18 19:42  编译原理识别活缀的DFA\GtoDFA\gdfa_test.cpp

     文件        437  2009-11-17 14:51  编译原理识别活缀的DFA\GtoDFA\gdfa_test.h

     文件      28412  2009-11-19 16:19  编译原理识别活缀的DFA\GtoDFA\GtoDFA.aps

     文件       1960  2009-11-19 16:26  编译原理识别活缀的DFA\GtoDFA\GtoDFA.clw

     文件       4209  2009-11-17 16:19  编译原理识别活缀的DFA\GtoDFA\GtoDFA.cpp

     文件       4954  2009-11-18 19:44  编译原理识别活缀的DFA\GtoDFA\GtoDFA.dsp

     文件        537  2009-11-17 16:19  编译原理识别活缀的DFA\GtoDFA\GtoDFA.dsw

     文件       1356  2009-11-17 16:19  编译原理识别活缀的DFA\GtoDFA\GtoDFA.h

     文件     107520  2009-11-19 16:30  编译原理识别活缀的DFA\GtoDFA\GtoDFA.ncb

     文件      56832  2009-11-19 16:30  编译原理识别活缀的DFA\GtoDFA\GtoDFA.opt

     文件       2578  2009-11-19 16:26  编译原理识别活缀的DFA\GtoDFA\GtoDFA.plg

     文件      10406  2009-11-18 13:21  编译原理识别活缀的DFA\GtoDFA\GtoDFA.rc

     文件       1742  2009-11-17 16:19  编译原理识别活缀的DFA\GtoDFA\GtoDFADoc.cpp

     文件       1475  2009-11-17 16:19  编译原理识别活缀的DFA\GtoDFA\GtoDFADoc.h

     文件       8207  2009-11-19 16:26  编译原理识别活缀的DFA\GtoDFA\GtoDFAView.cpp

     文件       2045  2009-11-19 16:20  编译原理识别活缀的DFA\GtoDFA\GtoDFAView.h

     文件       2823  2009-11-18 18:12  编译原理识别活缀的DFA\GtoDFA\MainFrm.cpp

............此处省略21个文件信息

评论

共有 条评论