- 1、本文档共18页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chomsky文法判别
实验名称:生成Chomsky文法
输入:一组任意的文法规则
输出:相应的Chomsky文法
要求:1)文法的输入应简便
2)指明是哪一类Chomsky文法,给出相应的四元组形式。
一 实验原理: 乔姆斯基把文法分成四种类型,即 0型 1型 2型 3型。
设G=(VN, VT, P, S), 如果它的每个产生式α→β是这样一种结构:α∈(VN∪VT)* 且至少含有一个非终结符,而β∈(VN∪VT)* 则G是一个0型文法
设G=(VN, VT, P, S)为一文法,若P中的每一个产生式α→β均满足|β|≥|α|,仅仅S→ε除外,则文法G是1型或上下文有关的。
设G=(VN, VT, P, S),若P中的每一个产生式α→β满足α是一个非终结符,β∈(VN∪VT)*,则此文法称为2型的或上下文无关的。
设G=(VN, VT, P, S),若P中的每一个产生式的形式都是A→aB或A→a(右线性)或(A→a, A→Ba 左线性),其中A和B都是非终结符,a∈VT* ,则G是3型文法或正规文法。
二 相关数据结构定义:
static char VN[10]={!};//非终结符集合最多10个(假设均为大写字母)
static char VT[10]={A};//终结符集合最多为10个(为a,b,c....x,y,z,0,1.....9)
static char p[20][20];//产生式规则,最多20个
//记录每个产生式的左右部分的位置结构体
typedef struct
{
int left; //分别表示产生式左边最后一个字符的位置
int right; //和右边第一个字符的位置
int n; //n为整个产生式字符串的最后一个字符的下标
}position;
三 关键函数:
1. //判断字符str是否在字符串p中存在,存在则返回0
int search_chr(char *p,char str);
2. //判断文法的类型
int judge_Chomsky(int n,position pp[]);
四 实验代码
#includeiostream
#includestring.h
using namespace std;
static char VN[10]={!};//非终结符集合最多10个(假设均为大写字母)
static char VT[10]={A};//终结符集合最多为10个(为a,b,c....x,y,z,0,1.....9)
static char p[20][20];//产生式规则,最多20个
//记录每个产生式的左右部分的位置结构体
typedef struct
{
int left,right;
int n;
}position;
position pp[20];
//判断字符str是否在字符串p中存在,存在则返回0
int search_chr(char *p,char str)
{
int n=strlen(p);
for(int i=0;in;i++)
{ if(str==p[i])
return 0;
}
return 1;
}
//判断文法的类型
int judge_Chomsky(int n,position pp[])
{
int flag1,flag2,flag3,flag4,i,j;//各文法的判断标志初始时为0
int left=0,right=0;
flag1=flag2=flag3=flag4=0;
for(i=0;in;i++)
{
for(j=0;j=pp[i].left;j++)
{
if(search_chr(VN,p[i][j])==0)
break;
}
if(jpp[i].left)
{
return -1; //不满足0型文法条件
}
}
flag1=1;
if(flag1)
{
for(i=0;in;i++)
{
int t=pp[i].n-pp[i].right-pp[i].left;
if((pp[i].left==0)(p[i][0]==S))
{
}
else{
if(t0)
return 0;
}
}
}
flag2=1;
if(flag2)
{
for(i=0;in;i++)
{
if(pp[i].left!=0)
return 1;
else{
if(search_chr(VN,p[i][0])==0)
continue;
else if(sea
您可能关注的文档
- ABA缓解水稻孕穗期干旱胁迫生理特性的分析郭贵华.pdf
- 3.3.1_光合作用的产物.ppt
- ABB充电桩介绍.pdf
- 9恒定磁场2_7561_341_20100407100507.ppt
- ABB起重机系统.pdf
- ABPLCSLC培训教程.pdf
- ABDMicroStation的视图或工具条双屏显示的方法.pdf
- ABB通贝产品接线配线类产品接线端头.pdf
- ABAQUS例子问题手册目录.pdf
- 24、恒定磁场中的电子的运动.ppt
- DHJB 659-2013 水质 氰化物等的测定 真空检测管-电子比色法.docx
- 【人教版】2018年小学语文五年级上册:第5单元作文指导ppt课件(1).pdf
- 2018年故事会第一期笑话与中篇故事.pdf
- DHJB 589-2021 突发环境事件应急监测技术规范.docx
- DHJB 609-2019 六价铬水质自动在线监测仪技术要求及检测方法.docx
- DHJB 592-2010 水质 硝基苯类化合物的测定 气相色谱法.docx
- DHJB 657-2013 空气和废气 颗粒物中铅等金属元素的测定 电感耦合等离子体质谱法 含2018年第1号修改单.docx
- DHJB 647-2013 环境空气和废气 气相和颗粒物中多环芳烃的测定 高效液相色谱法.docx
- DHJB 596.5-2010 水质 词汇 第五部分.docx
- DHJB 636-2012 水质 总氮的测定 碱性过硫酸钾消解紫外分光光度法.docx
文档评论(0)