资源简介
编译原理
包括核心代码和可视化的代码,实现了指定状态下识别活前缀的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个文件信息
- 上一篇:MSWF多级维纳滤波.rar
- 下一篇:遗传算法简明.ppt
相关资源
- 编译原理实验 计算器 语法树 逆波兰
- FOR循环语句的翻译LR,输出三地址
- 编译原理实验指导含源代码
- 编译原理实验报告完整版词法语法语
- 编译原理及实现课后答案
- 《编译原理第二版》龙书部分习题答
- 合工大 编译原理课程设计 LR(1)
- PL0语言编译器分析实验报告
- 编译原理课后第十章答案
- 编译原理课后习题全部答案(陈火旺
- 《编译原理》蒋立源课后答案
- zw_编译原理-龙书答案.zip
- 科技大学 编译原理 华保健 全86讲
- 程序设计语言-编译原理第三版 课后习
- 程序设计语言编译原理(陈火旺第3版
- 西安交通大学 编译原理 冯博琴教授
- 编译原理第三版课后习题答案
- 杭电编译原理实验报告
- 编译原理部分习题答案,龙书第二版
- 编译原理实验.rar
- 编译原理 词法分析,语法分析,中间
- pl0语法分析器(编译原理实验)
- 山东大学编译原理pl0实验
- 西工大编译原理实验代码与报告
- 编译原理上机报告(西安电子科技大
- 编译原理NFA-DFA转化原创代码以及算法
- 四川大学 编译原理 C minus语法分析器
- 编译原理表达式运算-实现四则运算,
- 北邮编译原理实验 语法分析
- 哈工大编译原理实验二语法分析
评论
共有 条评论