没有合适的资源?快使用搜索试试~ 我知道了~
LR0分析法编译原理实验.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 86 浏览量
2023-06-24
22:53:22
上传
评论
收藏 388KB PDF 举报
温馨提示
试读
13页
LR0分析法编译原理实验.pdf
资源推荐
资源详情
资源评论
代码清单:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <vector>
#include <string>
#include <queue>
#include <map>
#include <sstream>
#define MAX 507
#define DEBUG
using namespace std;
class WF
{
public:
string left,right;
int back;
int id;
WF ( char s1[] , char s2[] , int x , int y )
{
left = s1;
right = s2;
back = x;
id = y;
}
WF ( const string& s1 , const string& s2 ,
int x , int y )
{
left = s1;
right = s2;
back = x;
id = y;
}
bool operator < ( const WF& a ) const
{
if ( left == a.left )
return right < a.right;
return left < a.left;
}
bool operator == ( const WF& a ) const
{
return ( left == a.left )&& ( right ==
a.right );
}
void print ( )
{
printf ( ( , left.c_str() ,
right.c_str() );
}
};
class Closure
{
public:
vector<WF> element;
void print ( string str )
{
printf ( ( , , ,
str.c_str());
for ( int i = 0 ; i < element.size() ;
i++ )
element[i].print();
}
bool operator == ( const Closure& a )
const
{
if ( a.element.size() !=
element.size() ) return false;
for ( int i = 0 ; i < a.element.size() ;
i++ )
if ( element[i] == a.element[i] )
continue;
else return false;
return true;
}
};
struct Content
{
int type;
int num;
string out;
Content(){ type = -1; }
Content ( int a , int b )
:type(a),num(b){}
};
vector<WF> wf;
map<string,vector<int> > dic; map<string,vector<int> > dic;
vector<Closure> collection;
vector<WF> items;
char CH = '$';
int go[MAX][MAX];
int to[MAX];
vector<char> V;
bool used[MAX];
Content action[MAX][MAX];
int Goto[MAX][MAX];
void make_item ( )
{
memset ( to , -1 , sizeof ( -1 ) );
for ( int i = 0 ; i < wf.size() ; i++ )
for ( int j = 0 ; j <=
wf[i].right.length() ; j++ )
{
string temp = wf[i].right;
temp.insert ( temp.begin()+j ,
CH );
dic[wf[i].left].push_back
( items.size() );
if ( j )
to[items.size()-1] =
items.size();
items.push_back ( WF
( wf[i].left , temp , i , items.size()) );
}
#ifdef DEBUG
项 目 表表
for ( int i = 0 ; i < items.size() ; i++ )
printf ( ( ,
items[i].left.c_str() , items[i].right.c_str() );
#endif
}
void make_set ( )
{
bool has[MAX];
for ( int i = 0 ; i < items.size() ; i++ )
if ( items[i].left[0] == 'S' &&
items[i].right[0] == CH )
{
Closure temp;
string& str = items[i].right;
vector<WF>& element =
temp.element;
element.push_back ( items[i] );
int x = 0;
for ( x = 0 ; x < str.length() ;
x++ )
if ( str[x] == CH )
break;
memset ( has , 0 , sizeof
( has ) );
has[i] = 1;
if ( x != str.length()-1 )
{
queue<string> q;
q.push( str.substr(x+1,1) );
while ( !q.empty() )
{
string u = q.front();
q.pop();
vector<int>& id =
dic[u];
for( int j = 0 ; j <
剩余12页未读,继续阅读
资源评论
hhappy0123456789
- 粉丝: 60
- 资源: 5万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功