#coding=utf8

import logging
import itertools
import re
import sys

logger = logging.getLogger()
root_format = "[%(filename)s:%(lineno)s \t- %(funcName)-10s() ]: %(message)s"
logging.basicConfig(format=root_format)
logger.setLevel(logging.DEBUG)

branch_production_dict = [["pat1",["<suba1><subb1>","<suba2><subb2>"]],
       ["pat2",["<suba2.1><subb2.1>","<suba2.2><subb2.2>"]],
       ["pat3",["<suba3.1><subb3.1>","<suba3.2><subb3.2>"]]
      ]
leaf_production_dict_0 = {"suba1":['a1.1','a1.2'],
       'subb1':['b1.1','b1.2'],
       'suba2':['a2.1','a2.2'],
       'subb2':['b2.1','b2.2'],
       "suba2.1":['a1.1','a1.2'],
       'subb2.1':['b1.1','b1.2'],
       'suba2.2':['a2.1','a2.2'],
       'subb2.2':['b2.1','b2.2'],
       "suba3.1":['a1.1','a1.2'],
       'subb3.1':['b1.1','b1.2'],
       'suba3.2':['a2.1','a2.2'],
       'subb3.2':['b2.1','b2.2'],
       }
leaf_production_dict = {}
for i in leaf_production_dict_0.keys():
    val = []
    for j in leaf_production_dict_0[i]:
        val.append('<'+i+'>'+'('+j+')')
    leaf_production_dict[i]= val

dt3 = {}
dt4 = {}
logging.debug(str(branch_production_dict))

def prod_and_link(list_vec):
    res = []
    for i in itertools.product(*list_vec):
        tmp = list(i)
        one = ""
        for j in tmp:
            one += j
        #print(one)
        res.append(one)
        #print(res)
    return res
for ii in branch_production_dict:
    i=ii[0]
    #sys.stdout.write('for ')
    #print(i)
    logging.debug('for '+str(i))
    val = ii[1]
    ttt = []
    nttt = []
    for j in val:
        tmp_segs = re.split('>|<',j)
        segs=[]
        nt_segs=[]
        for k in tmp_segs:
            if len(k) > 0:
                segs.append(leaf_production_dict[k])
                nt_segs.append(['<'+k+'>'])
            #get a seg
        prod_res = prod_and_link(segs)
        logging.debug(str(nt_segs))
        nt_prod_res = prod_and_link(nt_segs)
        ttt += prod_res
        nttt += nt_prod_res
    logging.debug(str(ttt))
    dt3[i]=ttt
    dt4[i]=nttt

logging.debug(str(dt3))
dt4 = {}
for i in dt3.keys():
    dt4_val= []
    for j in dt3[i]:
        split_res = re.split('(>\()|(\)<)',j)
        split_res = list(split_res)
        logging.debug("split_res : "+str(split_res))
        #print(split_res)
        #print(type(split_res))
        n=0
        p = ''
        q = ''
        for k in [kk for kk in split_res if all([kk != None, kk!=')<',kk!='>('])]:
            logging.debug("kk in " + str([kk for kk in split_res if all([kk != None, kk!=')<',kk!='>('])]))
            if n == 0:
                p += '<'+k+'>'
                n = 1
            elif n == 1:
                q += '('+k+')'
                n = 0
            logging.debug("p:"+p+',q:'+q)

p = p[1:]
        q = q[:-1]
        dt4_val.append(p+'='+q)
    dt4[i] = dt4_val

logging.debug(str(dt4))
link_res = prod_and_link([['a','b'],['c','d']])
#print( link_res )
#[test2.py:110     - <module>  () ]: {'pat2': ['<suba2.1><subb2.1>=(a1.1)(b1.1)', '<suba2.1><subb2.1>=(a1.1)(b1.2)', '<suba2.1><subb2.1>=(a1.2)(b1.1)', '<suba2.1><subb2.1>=(a1.2)(b1.2)', '<suba2.2><subb2.2>=(a2.1)(b2.1)', '<suba2.2><subb2.2>=(a2.1)(b2.2)', '<suba2.2><subb2.2>=(a2.2)(b2.1)', '<suba2.2><subb2.2>=(a2.2)(b2.2)'], 'pat1': ['<suba1><subb1>=(a1.1)(b1.1)', '<suba1><subb1>=(a1.1)(b1.2)', '<suba1><subb1>=(a1.2)(b1.1)', '<suba1><subb1>=(a1.2)(b1.2)', '<suba2><subb2>=(a2.1)(b2.1)', '<suba2><subb2>=(a2.1)(b2.2)', '<suba2><subb2>=(a2.2)(b2.1)', '<suba2><subb2>=(a2.2)(b2.2)'], 'pat3': ['<suba3.1><subb3.1>=(a1.1)(b1.1)', '<suba3.1><subb3.1>=(a1.1)(b1.2)', '<suba3.1><subb3.1>=(a1.2)(b1.1)', '<suba3.1><subb3.1>=(a1.2)(b1.2)', '<suba3.2><subb3.2>=(a2.1)(b2.1)', '<suba3.2><subb3.2>=(a2.1)(b2.2)', '<suba3.2><subb3.2>=(a2.2)(b2.1)', '<suba3.2><subb3.2>=(a2.2)(b2.2)']}

using python to compute production rules的更多相关文章

  1. python爬虫scrapy之rules的基本使用

    Link Extractors Link Extractors 是那些目的仅仅是从网页(scrapy.http.Response 对象)中抽取最终将会被follow链接的对象。 Scrapy默认提供2 ...

  2. Python下划线与命名规范

    Python下划线与命名规范 先看结论,节省只想知道答案你的宝贵时间: _xxx 不能用于from module import * 以单下划线开头的表示的是protected类型的变量.即保护类型只能 ...

  3. Notes for "Python in a Nutshell"

    Introduction to Python Wrap C/C++ libraries into Python via Cython and CFFI. Python implementations ...

  4. python基础===requests学习笔记

    这里有一个新的学习requests网站:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html2017/11/30 Requ ...

  5. (转)PEP 8——Python编码风格指南

    PEP 8——Python编码风格指南标签(空格分隔): Python PEP8 编码规范原文:https://lizhe2004.gitbooks.io/code-style-guideline-c ...

  6. 如何用 Python 和 API 收集与分析网络数据?

    摘自 https://www.jianshu.com/p/d52020f0c247 本文以一款阿里云市场历史天气查询产品为例,为你逐步介绍如何用 Python 调用 API 收集.分析与可视化数据.希 ...

  7. 优秀的PHP开源项目集合

    包管理Package Management Package Management Related 框架 框架组件 微框架Micro Frameworks 内容管理系统Content Managemen ...

  8. PHP框架、库和软件资源大全(整理篇)

    php的资料 https://github.com/ziadoz/awesome-php Awesome PHP A curated list of amazingly awesome PHP lib ...

  9. Checked Exceptions

    记得当年在程序员杂志上看出这次访谈,10多年过去了, 这件事儿最近被重提了, 原因是 Kotlin. 1.对Checked Exceptions特性持保留态度 (译者注:在写一段程序时,如果没有用tr ...

随机推荐

  1. Saiku的下载与安装(一)

    Saiku- 数据可视化的工具,连接数据源展示数据,并且可方便导出xls/csv/pdf等文件的工具 一.Saiku下载 社区网址:https://community.meteorite.bi/ 二. ...

  2. 深度学习caffe测试代码c++

    #include <caffe/caffe.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui ...

  3. 将远程mysql服务器数据导出 csv 并发送到我的本机

    1.在SQL上执行查询并导出操作 '; 2.发送到本机 SQL>system sz idIsNull2.csv;

  4. 搭建Hadoop2.7.1的分布式集群

    Hadoop 2.7.1 (2015-7-6更新),hadoop的环境配置不是特别的复杂,但是确实有很多细节需要注意,不然会造成许多配置错误的情况.尽量保证一次配置正确防止反复修改. 网上教程有很多关 ...

  5. 【转载三】Grafana系列教程–Grafana的配置及运行

    本篇文章,就让我们来了解下,Grafana的简单配置及运行. 详细的配置我们后面会讲,本篇文章只对其配置做一个简单了解,主要是让大家了解Grafana的配置及启动的过程及方法. 更多Grafana问题 ...

  6. python安装与初始

    第一天学习中了解到python是高级语言,和java.PHP性质相同,而c语言.汇编属于低级语言,而高级语言与低级语言的区别,很重要的一点在于内存的处理上,低级语言在调用内存时需要自己编程来控制程序内 ...

  7. let var区别

    function varTest() { var x = 1; if (true) { var x = 2; // 同样的变量! console.log(x); } console.log(x); } ...

  8. CSS学习笔记-03- 过渡模块之前奏篇 a标签的伪类选择器

    CSS3 2D转换CSS3 3D转换CSS3 过渡CSS3 动画 CSS3 的四大金刚. 想要实现酷炫的视觉效果,上面4个是必须要掌握的.学习之前,先复习一下 视觉盛宴的前菜 :a标签的伪类选择器 铛 ...

  9. AOP 实现自定义注解

    1.自定义注解2.编写 AOP3.测试 1.自定义注解 package com.base.yun.spring.aop; import java.lang.annotation.Documented; ...

  10. 牛客练习赛22 简单瞎搞题(bitset优化dp)

    一共有 n个数,第 i 个数是 xi  xi 可以取 [li , ri] 中任意的一个值. 设 ,求 S 种类数. 输入描述: 第一行一个数 n. 然后 n 行,每行两个数表示 li,ri.   输出 ...