import re import collections # 写将要匹配的正则 NUM = r'(?P<NUM>\d+)' PLUS = r'(?P<PLUS>\+)' MINUS = r'(?P<MINUS>-)' TIMES = r'(?P<TIMES>\*)' DIVIDE = r'(?P<DIVIDE>/)' LPAREN = r'(?P<LPAREN>\()' RPAREN = r'(?P<RPAREN>\))'…
Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来做后端开发.还可以做Web开发.前端.人工智能.大数据等等. 所以首先你要对自己有一个定位和规划,而不是看到有关于Python的书籍就盲目的去学习,这样子只会什么都会一点却又什么都学不会,都是只是会一些皮毛. 关于python的好书很多,这里从入门到进阶以此给你推荐一些: Python编程:入门到实…
最近一直在看python cookbook.这本书主要讲的是python 语言的一些编程素材.正如它的名字一样,烹饪书.就好像再讲如何处理食材(各种类型的数据),然后再煮菜(算法).打个比方,煮菜随便煮,能吃就行.但是这本书是教你怎么煮得色香味俱全,然后扩展你的视野,认识更多的食材,更多的方法.要想在这个领域更好的发展,对食材选择,食材处理,菜谱火候等等进行更深入的研究,才能煮好一盘好菜. 这本书更加注重于食材的选择(程序操作的数据)和食材的处理(使用这些数据的方法)上,对于具体情况怎么选择食材…
Python实现JSON生成器和递归下降解释器 github地址:https://github.com/EStormLynn/Python-JSON-Parser 目标 从零开始写一个JSON的解析器,特征如下: 符合标准的JSON解析器和生成器 手写递归下降的解释器(recursive descent parser) 使用Python语言(2.7) 解释器和生成器少于500行 使用cProfile完成性能分析和优化 实现内容 [x] 解析字面量(true false null) [x] 解析数…
1. 算术运算表达式求值 在上一篇博文<Python技法:用re模块实现简易tokenizer>中,我们介绍了用正则表达式来匹配对应的模式,以实现简单的分词器.然而,正则表达式不是万能的,它本质上是一种有限状态机(finite state machine,FSM), 无法处理含有递归语法的文本,比如算术运算表达式. 要解析这类文本,需要另外一种特定的语法规则.我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(BNF)和扩展巴科斯范式(EBNF)…
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析方法2 递归下降是现阶段主流的语法分析方法,2 于是我们可以把上面的语法改写成如下形式: 1)       Operator="+" | "-" | "*" | "/" 2)       Expression=<数字>…
目录 自顶向下分析方法 TINY文法 消左提左.构造first follow 基本思想 python构造源码 运行结果 参考来源:聊聊编译原理(二) - 语法分析 自顶向下分析方法 自顶向下分析方法:递归下降分析法,LL1分析法.其实本质上核心思想是一样的,也就是LL,从左至右,最左推导,因而我觉得其实可以把前一个称为LL0分析法,即不使用向前看符号,这也是他们的不同点,具体实现不同罢了,递归下降需要用回溯和分治,调用递归函数,因为递归调用,耗费时间当然要长一点,而LL1使用first和foll…
数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc入门资料包含了基本要点.本文是对文档常用核心要点进行梳理,简单冗余知识不再介绍,作者假使你用c/java/c#/c++任一种语言基础.本系列文章属于入门内容,老鸟可以略看也可以略过,新鸟可以从篇一<快速上手学python>先接触下python怎样安装与运行,以及pycharm编辑器的使用和配置:篇…
看<Python cookbook>的时候,第9.5部分,"定义一个属性可由用户修改的装饰器",有个装饰器理解起来花了一些时间,做个笔记免得二刷这本书的时候忘了 完整代码:https://github.com/blackmatrix7/python-learning/blob/master/python_cookbook/chapter_9/section_5/attach_wrapper.py 书中的装饰器(书中称之为访问器函数) def attach_wrapper(o…
什么是自顶向下分析法 在语法分析过程中一般有两种语法分析方法,自顶向下和自底向上,递归下降分析和LL(1)都属于是自顶向下的语法分析 自顶向下分析法的过程就像从第一个非终结符作为根节点开始根据产生式进行树的构建 S -> AB A -> Cb | c B -> f C -> de 对输入字符串debf的分析过程 S -> CbB -> debf S -> cf x 整个过程就是对通过非终结符的不断替换,所以当我们从左往右匹配这个句子的时候,需要找到合适的产生式,所…
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INFO,PATH_INFO是什么呢?手册中提到“要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),” , url支持path_info,不是apache要支持path_info么,度娘讲的还算清楚一点,见下文: pathinfo…
今人不见古时月,今月曾经照古人.生命是如此的美丽与短暂! 学习Python已经两个月了,Python的语法通过做简单的语法题和看Python语法介绍,有了初步的了解.但上班还是要做别的事情,所以感觉学起来特别慢.有一种时不我待的感觉. 基本的语法了解了,接下来就要尽快进入到项目的实战.这样才能快速的遇到问题,并解决问题,迅速提升能力. 开始当然就是先按网上的一般步骤,用django写个博客网站出来. 接下来就是血泪啊!配置这个Python + wsgi + django, 其恶心已达到足以让我呕…
// 实验存档 截图: 代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link href="https://fonts.googleapis.com/css?family=Noto+Serif+SC" rel="stylesheet"> <style>…
学习笔记<简明python教程> 体会:言简意赅,很适合新手入门 2018年3月14日21:45:59 1.global 语句 在不使用 global 语句的情况下,不可能为一个定义于函数之外的变量赋值: 如果外面存在全局变量,则将全局变量作用域拿过来: 如果外面不存在这个全局变量,则认为是创建一个全局变量: 适用于整型,字符串,但字典 列表 类,不适用,局部可以修改全局 x = 50 def func(): global x print('x is', x) x = 2 print('Cha…
<Python Cookbook(第3版)中文版> 1.队列queue的有些方法是线程不安全的,在多线程中最好别用 2.需要限制一段代码的并发访问量时,用信号量.不要把信号量当做普通的锁来用,当做普通的锁来用,其性能不如普通的锁 3.个人对阻塞和挂起的理解:阻塞是被动的,是拿不到需要的资源导致的:挂起是主动地,是某个条件不满足自己的要求,于是wait一会 4.为了避免死锁,每个线程一次之获取一个锁:若一定要获取多个锁,你就需要更高级的死锁避免机制,我们将在 12.5 节介绍 5.解决死锁问题的…
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的IP地址,快速查询出该IP地址所在的地理信息和地理相关的信息,包括国家.省.市和运营商.2. 用户可以根据自己所在的位置和使用的IP地址更新我们的服务内容.我们的优势:1. 提供国家.省.市.县.运营商全方位信息,信息维度广,格式规范.2. 提供完善的统计分析报表,省准确度超过99.8%,市准确度超…
python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0.zfill()方法语法:str.zfill(width)参数width -- 指定字符串的长度.原字符串右对齐,前面填充0.返回指定长度的字符串. 以下实例展示了 zfill()函数的使用方法:#!/usr/bin/pythonstr = "this is string example....wow!!!";pri…
python3.4学习笔记(二十) python strip()函数 去空格\n\r\t函数的用法 在Python中字符串处理函数里有三个去空格(包括'\n', '\r', '\t', ' ')的函数: strip 同时去掉左右两边的空格lstrip 去掉左边的空格rstrip 去掉右边的空格 具体示例如下:>>>a=" gho stwwl ">>>a.lstrip() 'gho stwwl '>>>a.rstrip() ' gho…
python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(age=10 * 24 * 60 * 60)def index_page(self, response): for each in response.doc('a[href^="http"]').items(): matchObj = re.match( r'(.*).html', each…
沉淀,再出发:结合案例看python 一.前言 关于python,如果不经过大型程序开发的洗礼,我们很难说自己已经懂得了python了,因此,我们需要通过稍微结构化的编程来学习python. 二.一个案例 首先我们看一下需要具备的前提知识. 2.1.新建pandas表格 man_num = 100women_num = 100pd.DataFrame( [['w'+str(i) for i in random.sample(range(1,women_num+1),women_num)] for…
递归下降程序 递归下降程序一般是针对某一个文法的.而递归下降的预测分析是为每一个非终结符号写一个分析过程,由于文法本身是递归的,所以这些过程也是递归的. 以上是前提. Sample 假如给的是正规式子,首先要做的是将其改为文法表示: \((int | float) id(,id)^*\) 以上式子为例,将其改为文法表示 \(D --> TL\) \(T-->int | float\) \(L--> L,id | id\) 然后消除其左递归 \(D --> TL\) \(T-->…
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不是 LL(1)文法? 解: FIRST集: FIRST(Da)={b,a} FIRST(ε)={ε} FIRST(aADC)={a} FIRST(b)={b} FOLLOW集: FOLLOW(A)=FIRST(B)+FIRST(B)+FIRST(B)+FOLLOW(C)={c,a,b,#} FOLLOW(C)…
1. 文法 G(S): (1)S -> AB (2)A ->Da | ε (3)B -> cC (4)C -> aADC | ε (5)D -> b | ε 验证文法 G(S)是不是 LL(1)文法? FIRST集: FIRST(A) → { a,b } FIRST(Da) → { a,b } FIRST(ε)→{ ε } FIRST(cC)→{ a,c } FIRST(b)→{ b } FOLLOW集: FOLLOW(S)→{ # } FOLLOW(A)→{ a,b,c,#…
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不是 LL(1)文法? 解:因为 First(Da)={b, a} First(ε)={ε} First(aADC)={a} First(b)={b} Follow(A)={c.b.a, #} FIRST(B) FIRST(D), FIRST(C), FOLLOW(C) Follow(C)={#} Follow…
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不是 LL(1)文法? FIRST集: FIRST(A) = { b , a , ε} FIRST(C) = { a , ε} FIRST(D) = { b , ε} FOLLOW集: FOLLOW (A) = { c , b , a , ε} FOLLOW (C) = { # } FOLLOW (D) = {…
实验三 语法分析程序实验 专业 商软2班   姓名 黄仲浩  学号 201506110166 一. 实验目的      编制一个部分文法分析程序. 二. 实验内容和要求 输入:源程序字符串 输出:正确或者错误 三. 实验方法.步骤及结果测试 源程序名:递归下降分析.c 可执行程序名:递归下降分析.c 原理分析及流程图 #include<stdio.h> #include<string.h> ];//存储输入的字符 char sym;//记录下一个字符 char s;//输入字符的传…
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不是 LL(1)文法? 解: Select(A -> Da) = First(Da) = {b,a} Select(A -> ε) = (Follow(ε)-{ε})∪Follow(A) = {b,a,c,ε} Select(C -> aADC) = First(aADC) = {a} Sel…
为什么我用Ipad Pro做电子笔记和看PDF电子书 Ipad做笔记的优点: 1.ipad整理的笔记可以随时修改,可以看PDF的书,2.纸质书很重携带不便3.ipad的可通过关键词搜索笔记内容 4.笔记软件里的笔的类型,颜色,纸张类型,随时插入图片,是打字笔记和手写的纸质笔记无法实现的 5.可以搜索,关键字6.可以修改编辑,方便管理7.不占用实体空间方便携带,不易丢失8.可以对笔记的内容进行自由的补充,改动,移动或删除9.有丰富的纸张模板,多样的笔记颜色10.随意记录,可以持续完善笔记 11.手…
1. 文法 G(S): (1)S -> AB (2)A ->Da|ε (3)B -> cC (4)C -> aADC |ε (5)D -> b|ε 验证文法 G(S)是不是 LL(1)文法? FIRST(Da)={b,a} FIRST(ε)={ε} FIRST(aADC)={a} FIRST(b)={b} FOLLOW(A)={c,b,a,#} FOLLOW(C)={#,} FOLLOW(D)={a,#} SELECT(A->Da)=FIRST(Da)={b,a} SE…
作业十一——LL(1)文法的判断,递归下降分析程序 判断是否为LL(1)文法 选取有多个产生式的求select,只有一条产生式的无需求select 同一个非终结符之间求交集,全部判断为空后则为LL(1)文法 求FIRST集 是每条产生式右边所出现的首个终结符的集合 求FOLLOW集 是针对非终结符,找到产生式右边跟在非终结符后的终结符,#为输入串的结束符 求SELECT集 当产生式不推导出ε时,就为FIRST 当产生式推到出ε时,就为(FIRST(A->ε)-{ε})∪FOLLOW{A} 2.法…