#-*-coding:utf-8-*-
G = raw_input("提示输入文法:"); #G为文法
S = G[2] #识别符号S Vn = raw_input("提示输入Vn:"); #Vn为非终结符号集
charactersVn = Vn.split(','); #记录每个非终结符号
VnString = "";
for var in charactersVn:
VnString += var + ",";
vAll = [];
lefties = []; #所有产生式左边的符号
setAllVt = set([]); #含重复元素
setVtAndVn = set([]); #非终结符号集的集合 P = raw_input("提示依次输入产生式规则:"); #P为产生式集
setP = P.split(); #根据空格分
for varP in setP:
n_t = varP.split('::=');
# leftOfP = n_t[0]; #产生式左边
lefties.append(n_t[0]);
rightOfP = n_t[1]; #产生式右边
rightChar = rightOfP.split('|'); #产生式右边的分割
setAllVt = setAllVt | set(rightChar); #所有产生式右边的式子的集合 #只保留式子右边中的单个符号
for ele in list(setAllVt):
# if len(ele) == 1:
# setVtAndVn = setVtAndVn | set(ele);
for i in range(0, len(ele)):
setVtAndVn = setVtAndVn | set(ele[i]); setVt = list(setVtAndVn - set(charactersVn)) #利用集合的差求非终结符号集
VtString = "";
for var in setVt:
VtString += var + ",";
#print setVt; #print len(lefties);
flag = 0; #代表几型文法
length = 0;
#记录并判断产生式左边长度是否都为1
for varLefty in lefties:
length += len(varLefty) if length == len(lefties): #长度都为1
flag = 2;
else:
flag = 1; #在0型文法和1型文法之间进行判断
if flag == 1:
for varP in setP:
n_t = varP.split('::=');
left = n_t[0];
right = n_t[1];
righties = right.split('|');
for righty in righties:
if len(left) > len(righty):
flag = 0; #在2型文法和3型文法中间进行选择
count = 0;
total = 0;
twoOrThird = 0;
if flag == 2:
twoOrThird = 1;
for varP in setP:
n_t = varP.split('::=');
right = n_t[1]; #::=的左边
righties = right.split('|'); #|分割后的每个产生式右边(由于表达形式的原因,要再次区分并计数)
for righty in righties:
total += 1;
if len(righty) == 1 and righty[0] in setVt: #右边为单个终结符合
count += 1;
elif len(righty) == 2 and righty[0] in setVt and righty[1] in charactersVn: #右边为单个终结符号加单个非终结符号
count += 1; if count == total and twoOrThird == 1:
flag = 3; print "文法" + G + "= ({" + VnString[:-1] + "} ,{" + VtString[:-1] + "}, P, " + G[2] + ")\n" ;
print P + "\n"
print "该文法是Chomsky%d型文法" % flag;

文法分类的python实现的更多相关文章

  1. day02-操作系统、编程语言分类及python安装

    目录 操作系统 编程语言分类 安装python解释器 操作系统 操作系统有什么用 操作系统能接受外部指令转化成0和1,并把一些对硬件的复杂操作简化成一个个简单的接口,作为中间人连接硬件和软件 计算机三 ...

  2. 编程语言分类及python所属类型

    编程语言分类及python所属类型 编程语言主要从以下几个角度为进行分类:编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言. 编译和解释的区别是什么? 编译器是把源程序的每一条语句都 ...

  3. 操作系统+编程语言的分类+执行python程序的两种方式+变量

    1.什么是操作系统? 操作系统就是一个协调\管理\控制计算机硬件资源与软件资源的一个控制程序. 2.为何要操作系统? a.把复杂的硬件操作封装成简单的功能\接口用来给用户或者程序来使用(文件) b.把 ...

  4. 朴素贝叶斯文本分类实现 python cherry分类器

    贝叶斯模型在机器学习以及人工智能中都有出现,cherry分类器使用了朴素贝叶斯模型算法,经过简单的优化,使用1000个训练数据就能得到97.5%的准确率.虽然现在主流的框架都带有朴素贝叶斯模型算法,大 ...

  5. 编程语言分类和Python解释器介绍

    主要内容: 一.编程语言分类和介绍 二.Python解释器分类和介绍 一.编程语言分类和介绍 1.编程语言分类 编程语言的发展依次经历了机器语言.汇编语言和高级语言. 2.编程语言的介绍   2.1 ...

  6. 【0806 | Day 9】三张图带你了解数据类型分类和Python深浅拷贝

    一.数据类型分类 二.Python深浅拷贝

  7. learn python, ref, diveintopython 分类: python 2015-07-22 14:42 14人阅读 评论(0) 收藏

    for notes of learing python. // just ignore the ugly/wrong highlight for python code. ""&q ...

  8. Python调用C可执行程序(subprocess) 分类: python 服务器搭建 C/C++ shell 2015-04-13 21:03 87人阅读 评论(0) 收藏

    从Python 2.4开始,Python引入subprocess模块来管理子进程,以取代一些旧模块的方法:如 os.system.os.spawn.os.popen.popen2.commands. ...

  9. Python异常处理 分类: python Raspberry Pi 服务器搭建 2015-04-01 13:22 172人阅读 评论(0) 收藏

    一个程序要保持稳定运行必须要有异常处理,本文将简单介绍Python中的try-except..异常处理语句的使用. 该种异常处理语法的规则是: 执行try下的语句,如果引发异常,则执行过程会跳到第一个 ...

随机推荐

  1. css实现图片切换

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...

  2. iOS下Audio自动播放(Autoplay)音乐

    前几天做了一个H5活动页面,产品要求初始化播放音乐,因晓得H5 Audio标签支持Autoplay就没在意. 完了在手机上测试,发现手机上打开页面死活就是不会自动播放,点击播放按钮才可以播放,很是纠结 ...

  3. 前端HTML规范

    HTML规范 - 整体结构 文件应以“<!DOCTYPE ......>”首行顶格开始,推荐使用“<!DOCTYPE html>”. 必须申明文档的编码charset,且与文件 ...

  4. DOM节点属性

    节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...

  5. powershell对txt文件的服务器进行ping操作

    powershell对txt文件的服务器进行ping操作,txt文件有几百台服务器要进行Ping操作.每行一个 #//***************************************** ...

  6. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q109-Q111)

    Question  109  Your company uses a third-party service to host its SharePoint 2010 site. The hosting ...

  7. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q102-Q104)

    Question  102   You are designing a Windows application that accesses information stored on a ShareP ...

  8. tabbarItem字体及图片颜色设置

    tabbarItem设置图片后运行往往与我们原始图片颜色有出入,这是因为在默认情况下,未选中状态图片和字体颜色为灰色,选中状态下图片和字体颜色为蓝色.   UIImage 在呈现(render)时会选 ...

  9. iOS--UIAlertView与UIAlertController和UIAlertAction之间的事儿

      iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController在实现视图控制器间的过渡动画效果和自适应设备 ...

  10. iOS开发new与alloc/init的区别

    [className new]基本等同于[[className alloc] init]: 区别只在于alloc分配内存的时候使用了zone. 这个zone是个什么东东呢? 它是给对象分配内存的时候, ...