请务必保持代码的一致性如果你正在编辑代码, 花几分钟看一下周边代码, 然后决定风格. 如果它们在所有的算术操作符两边都使用空格, 那么你也应该这样做. 如果它们的注释都用标记包围起来, 那么你的注释也要这样.制定风格指南的目的在于让代码有规可循, 这样人们就可以专注于"你在说什么", 而不是"你在怎么说".
分号Tip 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度Tip 每行不超过80个字符 例外:长的导入模块语句注释里的URL不要使用反斜杠连接行.Python会将 圆括号, 中括号和花括号中的行隐式的连接起来 <http://docs.python.org/2/reference/lexical_analysis.html#implicit-line-joining>_ , 你可以利用这个特点.
LintTop 对你的代码运行pylint定义:pylint是一个在Python源代码中查找bug的工具. 对于C和C++这样的不那么动态的(译者注: 原文是less dynamic)语言, 这些bug通常由编译器来捕获. 由于Python的动态特性, 有些警告可能不对. 不过伪告警应该很少.优点:可以捕获容易忽视的错误, 例如输入错误, 使用未赋值的变量等.缺点:pylint不完美.
Python 是 Google主要的脚本语言。这本风格指南主要包含的是针对python的编程准则。为帮助读者能够将代码准确格式化,我们提供了针对 Vim的配置文件 <http://google-styleguide.googlecode.com/svn/trunk/google_python_style.vim>_ 。对于Emacs用户,保持默认设置即可。致谢内容撰写:http://zh-google-styleguide.readthedocs.
PLY 分发包中的 example 目录包含几个简单的示例。对于理论性的东西以及 LR 分析法的实现细节,应当从编译器相关的书籍中学习。
调试一个编译器不是件容易的事情。PLY 提供了一些高级的调试能力,这是通过 Python 的l ogging 模块实现的,下面两节介绍这一主题:调试 lex() 和 yacc() 命令lex() 和 yacc() 命令都有调试模式,可以通过 debug 标识实现:lex.lex(debug=True)yacc.yacc(debug=True)正常情况下,调试不仅输出标准错误,对于 yacc(),还会给出 parser.out 文件。
由于 PLY 从文档字串中获取信息,语法解析和词法分析信息必须通过正常模式下的 Python 解释器得到(不带 有-O 或者 -OO 选项)。不过,如果你像这样指定 optimize 模式:lex.lex(optimize=1)yacc.yacc(optimize=1)PLY 可以在下次执行,在 Python 的优化模式下执行。
在高级的分析器程序中,你可能同时需要多个语法和词法分析器。依照规则行事不会有问题。不过,你需要小心确定所有东西都正确的绑定(hooked up)了。首先,保证将 lex() 和 yacc() 返回的对象保存起来:lexer = lex.lex() # Return lexer objectparser = yacc.yacc() # Return parser object接着,在解析时,确保给 parse() 方法一个正确的 lexer 引用:parser.
ply.yacc 模块实现了 PLY 的分析功能,‘yacc’是‘Yet Another Compiler Compiler’的缩写并保留了其作为 Unix 工具的名字。一个例子假设你希望实现上面的简单算术表达式的语法分析,代码如下:# Yacc exampleimport ply.yacc as yacc# Get the token map from the lexer. This is required.
yacc.py 用来对语言进行语法分析。在给出例子之前,必须提一些重要的背景知识。首先,‘语法’通常用 BNF 范式来表达。
lex.py是用来将输入字符串标记化。
PLY 包含两个独立的模块:lex.py 和 yacc.py,都定义在 ply 包下。lex.py 模块用来将输入字符通过一系列的正则表达式分解成标记序列,yacc.py 通过一些上下文无关的文法来识别编程语言语法。yacc.py 使用 LR 解析法,并使用 LALR(1)算法(默认)或者 SLR 算法生成分析表。这两个工具是为了一起工作的。lex.
PLY 是纯粹由 Python 实现的 Lex 和 yacc(流行的编译器构建工具)。PLY 的设计目标是尽可能的沿袭传统 lex 和 yacc 工具的工作方式,包括支持 LALR(1)分析法、提供丰富的输入验证、错误报告和诊断。因此,如果你曾经在其他编程语言下使用过 yacc,你应该能够很容易的迁移到 PLY 上。2001 年,我在芝加哥大学教授“编译器简介”课程时开发了的早期的 PLY。
本文指导你使用 PLY 进行词法分析和语法解析的,鉴于解析本身是个复杂性的事情,在你使用 PLY 投入大规模的开发前,我强烈建议你完整地阅读或者浏览本文档。PLY-3.0 能同时兼容 Python2 和 Python3。需要注意的是,对于 Python3 的支持是新加入的,还没有广泛的测试(尽管所有的例子和单元测试都能够在 Python3 下通过)。如果你使用的是 Python2,应该使用 Python2.
如果你从事编译器或解析器的开发工作,你可能对lex和yacc不会陌生,PLY是David Beazley实现的基于Python的lex和yacc。作者最著名的成就可能是其撰写的Python Cookbook, 3rd Edition。我因为偶然的原因接触了PLY,觉得是个好东西,但是似乎国内没有相关的资料。
如果你从事编译器或解析器的开发工作,你可能对lex和yacc不会陌生,PLY是David Beazley实现的基于Python的lex和yacc。作者最著名的成就可能是其撰写的Python Cookbook, 3rd Edition。本文指导你使用 PLY 进行词法分析和语法解析的,鉴于解析本身是个复杂性的事情,在你使用 PLY 投入大规模的开发前,我强烈建议你完整地阅读或者浏览本文档。PLY-3.
PHP 社区多元化并且规模庞大,成员们也乐意并随时准备好帮助新人。你可以考虑加入当地的 PHP 使用者社区 (PUG) 或者参加教大型的 PHP 会议,从中学习更多最佳实践。你也可以使用 IRC 逛逛 irc.freenode.com 上的 #phpc 频道,也可以关注 @phpc 的Twitter 账号。试着去多结交一些新的开发者,学习新的东西,总之,交一些新朋友!
PHP 官方PHP 官方网站PHP 官方文档值得关注的大牛Rasmus LerdorfFabien PotencierDerick RethansChris ShiflettSebastian BergmannMatthew Weier O'PhinneyPádraic BradyAnthony FerraraNikita Popov指导phpmentoring.org - PHP 社区中的一对一指导。
PHPDocPHPDoc 是注释 PHP 代码的非正式标准。它有许多不同的标记可以使用。完整的标记列表和范例可以查看 PHPDoc 指南。如下是撰写类方法时的一种写法:{% highlight php %}<?php/** * @author A Name <a.name@example.com> * @link http://www.phpdoc.org/docs/latest/index.
PHP 本身来说是非常快的,但是但你当发起远程连接、加载文件等操作时也会遇到瓶颈。幸运的是,有各种各样的工具可以用来加速你应用程序某些耗时的部分,或者说减少某些耗时任务所需要运行的次数。Opcode 缓存当一个 PHP 文件被解释执行的时候,首先是被编译成名为 opcode 的中间代码,然后才被底层的虚拟机执行。如果PHP文件没有被修改过,opcode 始终是一样的。
关注时代Java