Lua/Awk/Python
Chinamming
这个作者很懒,什么都没留下…
展开
-
Lua的使用心得: 数据定义和过程定义(Lua在程序中的数据定义和过程定义的界定原则的研究)
Lua在程序中的数据定义和过程定义的界定原则的研究引言作为宿主语言的衍生,Lua无论从数据对象的填充,还是处理过程的定制,都提供了很好的支持。甚至我们可以将全部的宿主语言都搬到Lua里来写。在这样大的灵活度下,如何界定什么样的函数需要导出到Lua,如何对数据对象定义,或者说使用Lua的基本思路是什么,时常让刚学会Lua的人迷惑。本文使用一个实际例子来讲述一个C++系统和Lua结转载 2013-12-05 19:38:31 · 675 阅读 · 0 评论 -
LUA学习笔记之 Compilation, Execution, and Errors
Compilation, Execution, and Errors前面我们介绍过dofile函数, 其实dofile的实现如下: function dofile (filename) local f = assert(loadfile(filename)) return f() endloadfile函数很灵活, 我们可以多次调用loadf转载 2013-12-04 09:25:27 · 773 阅读 · 0 评论 -
lua学习笔记之Lua的function、closure和upvalue
Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数。假设函数f2定义在函数f1中,那么就称f2为f1的内嵌(inner)函数,f1为f2的外包(enclosing)函数,外包和内嵌都具有传递性,即f2的内嵌必然是f1的内嵌,而f1的外包也一定是f2的外包。内嵌函数可以访问外包转载 2013-12-04 09:24:24 · 905 阅读 · 0 评论 -
lua指令
A No-Frills Introduction to Lua 5.1 VM Instructionsby Kein-Hong Man, esq. Version 0.1, 20060313 1 Introduction这是一本关于Lua 5.1 虚拟机指令集的完全介绍。与Perl和Python相比,Lua的简洁性使得有人可以一窥它的内幕并理解它的内在实现。如果没有把一个“生物转载 2013-12-04 09:21:32 · 1791 阅读 · 0 评论 -
Lua5.1代码阅读(八):ldo.h/ldo.c
一、概览ldo.h/ldo.c描述Lua的堆栈和调用的结构。提供对调用、协程、异常等复杂控制流的支持。模块中对外公开的API主要分为以下几类:(1) 错误恢复:luaD_seterrorobj,luaD_throw,luaD_rawrunprotected,luaD_pcall(2) 堆栈操纵:luaD_reallocCIluaD_reallocstack,luaD转载 2013-12-04 09:15:07 · 2032 阅读 · 0 评论 -
Lua5.1代码阅读(七):lvm.h/lvm.c
一、概览lvm.h/lvm.c的作用是提供底层的Lua虚拟机。这个模块主要是用于循环读取并分解指令,然后根据其操作码的枚举值进行处理或跳转到Lua的其它模块。内部的函数引用图如下: 参考资料:* A No-Frills Introduction to Lua 5.1 VM Instructionshttp://luaforge.net/docman/83转载 2013-12-04 09:14:40 · 3099 阅读 · 0 评论 -
Lua5.1代码阅读(一):lua.c
一、Lua5.1相关资源下载见:http://luabinaries.sourceforge.net/download.html在线版:http://www.lua.org/source/5.1/关于它的代码有一个阅读顺序,可以参考这篇文章:http://www.reddit.com/comments/63hth/ask_reddit_which_oss_codebases转载 2013-12-04 09:08:56 · 1604 阅读 · 0 评论 -
Lua1.0-应用程序扩展语言的设计与实现
为了可能的版权问题,特此说明《The design and implementation of a language for extendingapplications》版权属于原作者们,我翻译的此文档,网友最好加上原始链接再转载,但不强求,因为我不敢保证我翻译,表达的准确性,正确性。这只是用中文记录了当时对内容理解,同时也只翻译了我感兴趣的东西。有确实需要的人们可以去读原文进行自己的理解。转载 2013-12-04 09:36:39 · 988 阅读 · 0 评论 -
Lua1.0使用与研究
2008年偶然接触lua,但一直未在工作中使用。网上介绍lua有很多优点我想lua的优秀一定有其优秀的dna。虽然lua几个大版本之间有可能存在不兼容,但是他优秀的dna应该还是在早期版本上找到。因此我开始看lua1.0的相关文档,代码。我希望能够坚持,最好能够多阅读几个版本。---------------------------------------------------转载 2013-12-04 09:34:11 · 1112 阅读 · 0 评论 -
Lua5.1代码阅读(二):llex.h/llex.c
一、作用和参考资料llex.c是Lua的词法分析器(把单个输入字符串切割为多个输出符号)参考:1. Lua 5.1.3源代码分析之词法分析 By 天地沙鸥http://xenyinzen.wordpress.com/2009/12/09/lua-5-1-3%E6%BA%90%E4%BB%A3%E7%A0%81%E5%88%86%E6%9E%90%E4%B9%8B%E8%AF%8D%转载 2013-12-04 09:10:14 · 1416 阅读 · 0 评论 -
Python源码分析2 - 一个简单的Python程序的执行
本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构。 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum = 0 for i in range(1, 11): sum = sum + i print sum 如果想要在W转载 2013-12-08 23:51:19 · 2721 阅读 · 0 评论 -
Python源码分析3 – 词法分析器PyTokenizer
Introduction 上次我们分析了Python中执行程序可分为5个步骤: Tokenizer进行词法分析,把源程序分解为Token Parser根据Token创建CST CST被转换为AST AST被编译为字节码 执行字节码 本文将介绍Python程序执行的第一步,也就是词法分析。词法分析简单来说就是把源程序的字符分解组合成Token。比如sum=0可以分解成3个token,转载 2013-12-08 23:51:49 · 3986 阅读 · 0 评论 -
Python源码分析5 – 语法分析器PyParser
Introduction上一篇文章我们分析了Python是如何对语法文件Grammar进行预处理,生成语法数据,并在运行时生成Acclerators加速语法分析的过程。当分析完这些内容之后,下一步便是分析Python中语法分析的机制。回顾一下Python的整个处理流程:1. PyTokenizer进行词法分析,把源程序分解为Token2. PyParser根据Token转载 2013-12-08 23:53:07 · 5759 阅读 · 0 评论 -
lua词法语法分析
lua是我工作中的第一语言,因而工作的大部分时间,都在敲着lua代码。虽然它语法是否简单好学,但它来做工程的人,都不免要抱怨作者的一些设定理念。 据说作者是一个学院派的人(从他的sample代码中就能看出这点),很少也不会去考虑做工程的人的需求。 因而,留给我们这些使用lua的人不少痛苦。 大伙不爽的事情如下: 1. 默认的变量声明是全局的, 局部需要 local转载 2013-12-04 09:04:17 · 2725 阅读 · 0 评论 -
Lua5.1代码阅读(三):lcode.h/lcode.c
一、概述lcode.h/lcode.c是Lua的代码生成器,用于优化和生成目标二进制代码。lcode.c的所有导出函数只被lparser.c引用。lcode内部的函数引用图如下: 二、宏1. #define NO_JUMP (-1)2. #define getcode(fs,e)((fs)->f->code[(e)->u.s.info])3. #de转载 2013-12-04 09:11:20 · 1764 阅读 · 0 评论 -
Lua5.1代码阅读(六):ltm.h/ltm.c
一、概览ltm.h/ltm.c的作用是提供查询元方法(元方法的值可能是函数,也可能是非函数的值)的API。源码中把元方法称为标签方法(tag method)。Lua的元方法有点像C++的运算符重载,用于覆盖一些Lua内部定义的默认行为。参考链接:1. LUA源码分析五:元表http://lin-style.iteye.com/blog/10121382. Lua GC转载 2013-12-04 09:14:14 · 1580 阅读 · 0 评论 -
Lua学习笔记三
Lua学习笔记三2008.7.14修正了 main 函数里 注册新Lua函数时候的一个笔误,感谢 mayao11 指出以上错误:)2008.5.20修正了 小结 里关于 lua_pop(L,-1)的错误,应该为lua_pop(L,1),感谢 aslucky 指出以上错误。首先提一下:元旦只放一天假,比较悲惨。不过可以继续研究Lu转载 2013-12-05 19:36:47 · 847 阅读 · 0 评论 -
Lua学习笔记二
Lua学习笔记二在Lua中使用自己的C函数 OK,上次我们掌握了如何在Lua脚本中编写一个函数,并在C文件中接应它。现在让我们来学习另外一种交互方式。本节的目的:在Lua脚本中调用自己写的函数。侧重点为自己编写可以被Lua脚本使用的C函数的规则。 啥都不说了,RTFS -------以下是Lua脚本----------test.luaLu转载 2013-12-05 19:36:18 · 895 阅读 · 0 评论 -
Lua学习笔记一
原文地址: http://blog.csdn.net/kun1234567/article/details/1966568花了很长时间才算基本入门,期间走了不少的弯路,所以想记录下来,希望能方便后面的朋友。 前言该系列文章将纪录我在学习Lua时碰到的一些问题和得出的心得体会,适合没有任何Lua基础的朋友看。我会不定期的将自己的学习整理成笔记,同时由于我是本月刚接触Lu转载 2013-12-05 19:35:42 · 3086 阅读 · 0 评论 -
在VS2005中配置LUA
1、编译LUA第1步:从官方主页www.lua.org下载Lua源代码,最新版本为5.1.2。解压之后找到“src”文件夹,这里面就是Lua了,不过还不能直接使用。第2步:使用任意ANSI C编译器,在这里使用VS2005编译LUA。具体步骤如下:1、新建一个空的Console工程,在这里该工程名暂为“lua”2、将src中的文件全部拷贝到该项目文件夹下3、根据生成转载 2013-12-05 19:34:07 · 714 阅读 · 0 评论 -
《通过例子学习Lua》系列文章
该系列文章转载自http://www.ogdev.net/index.htm作者:Hackemail:[email protected] 通过例子学习Lua(1) ---- Hello World1.前言偶最近在学习Lua, 所以写出心得和大家共享, 争取一天写一篇, 嘿嘿.才开始学所以内容很浅, 希望大家包涵.Lua是一种完全免费的脚本语言, 可以和C/转载 2013-12-05 19:33:19 · 959 阅读 · 0 评论 -
Lua学习笔记五
Lua学习笔记五通过前面4次的学习,我们已经具备了一些基本知识:1、使用Lua脚本语法2、编写Lua函数和C函数,并使他们交互3、表和其他类型的参数的应用4、处理函数的返回值的方法很好,很强大。这些知识足以开启Lua世界的大门,现在让我们来真正的进入Lua的世界。本节的目的:写一套操作动态浮点数组的函数,并把他们封装成库,侧重点为编写函数库的基本套路。 读到这里转载 2013-12-05 19:37:51 · 800 阅读 · 0 评论 -
Lua学习笔记四
Lua学习笔记四通过上一节的知识,我们学会了如何利用表来作为参数,这样我们能实现的功能更多了。但是有一点是没有涉及到的,那就是返回值,而返回值的讨论不能不提userdata类型。本节的目的:讨论如何处理Lua返回值和Userdata类型的应用。 本章涉及一些Allegro的知识,但是这不是重点。所以当你看到不熟悉的代码段时,不必太在意,把注意力放在编写Lua函数的套路上转载 2013-12-05 19:37:20 · 627 阅读 · 0 评论 -
Lua5.1代码阅读(五):lundump.h/lundump.c
一、概述lundump.h和lundump.c是lua预编译二进制代码的加载器。不同于llex/lparser/lcode串联起来对文本脚本的解析和编译,lundump解析的是二进制脚本文件(由luac编译生成)。它的公开接口luaU_undump和luaY_parser的声明原型是相同的,所以可以把lundump看成是lparser的另一种实现。另外,由于lundump解转载 2013-12-04 09:13:39 · 2408 阅读 · 0 评论 -
Lua5.1代码阅读(四):lparser.h/lparser.c
一、概述lparser.h/lparser.c是Lua的语法分析器。用于分析Lua脚本的语法以及把上下文信息传递给代码生成器,完成文本代码到二进制代码的转换,以及语法检查。在线版:http://www.lua.org/source/5.1/lparser.h.htmlhttp://www.lua.org/source/5.1/lparser.c.htmllparser内转载 2013-12-04 09:13:13 · 2790 阅读 · 0 评论 -
Lua学习笔记之 Type and Values
lua是一种动态类型语言, 不用特别声明变量以及指定类型, 首次赋值即为声明. 说到此点, 我觉得动态语言的这种特点与汇编倒是蛮象的: 不管你是什么类型, 对于底层而言, 它代表的就是一内存地址, 而操作符代表的就是对这些地址及存在于这些地址里的量进行操作而已. 闲话少说, 继续看pil, 今天的内容是: types and values.笔记内容:1. lua提供了八种数据转载 2013-12-04 09:25:00 · 717 阅读 · 0 评论 -
lua源码分析之局部函数的定义
第1章 续(11-3)第二节 局部函数的声明 前面研究了局部变量的定义,下面就研究下,lua中局部函数定义的方法。 其中局部函数定义的语法是: local function FuncName (parlist) chunk END 首先,lua会检测到local function这两个关键字,知道后面是在定义局部转载 2013-12-04 09:18:16 · 1935 阅读 · 0 评论 -
Lua 源码分析之一切从这里开始
Lua是边进行语法分析,边词法分析。其中,词法分析的模块是:llex。其对外暴露的接口是:llex_next()。并且,在整个语法分析、词法分析的过程中,只有一个唯一的全局实例:llex_state。 在词法分析的过程中,lua会处理以下几种情况: ‘/r’, ‘/n’ 这两个东西的任意组合,是换行,lua直接跳过,其中是用inclinenumber(ls)这个函数跳过的。转载 2013-12-04 09:17:19 · 2677 阅读 · 0 评论 -
Python源码分析6 – 从CST到AST的转化
Introduction上篇文章解释了Python是如何使用PyParser生成CST的。回顾一下,Python执行代码要经过如下过程:1. Tokenizer进行词法分析,把源程序分解为Token2. Parser根据Token创建CST3. CST被转换为AST4. AST被编译为字节码5. 执行字节码当执行Python代码的转载 2013-12-08 23:53:33 · 2772 阅读 · 1 评论 -
Python源码分析4 – Grammar文件和语法分析
Grammar文件前面提到了在Python的源代码目录下面有一个Grammar目录,里面只有一个文件Grammar,以BNF的语法定义了Python的全部语法。拿if语句举例来说:if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]上面的语句可以这样理解,if语句转载 2013-12-08 23:52:26 · 1931 阅读 · 0 评论 -
Python源码分析1 - Building Python
Python是一种动态的脚本语言。具体的我就不多介绍了,可以参考www.python.org. Python是Open Source的,在www.python.org可以下载到最新的2.5版的源代码。源代码链接在这里:Python 2.5 下载下来之后直接解压缩可以看到如下的目录结构:DemoDemo用的代码,主要用来展示Python的一些应用DocPy转载 2013-12-08 23:50:47 · 1137 阅读 · 0 评论 -
awk解析xml
?xml version="1.0"?>system> machine name="web01" > server name="log_collect"> processes>1processes> threads>1threads> options>-t1 options>转载 2013-12-07 01:25:52 · 7417 阅读 · 0 评论 -
Awk里的域赋值操作和部分源码解析($1=$1,$0=$0,FS,OFS)
前言:cu上出了个shell题:http://bbs.chinaunix.net/thread-2319120-1-1.html第八题:GNU awk的$1=$1到底有什么作用?$0=$0呢? 这题问得相当的细致。可能很多人已经常用这二个赋值语句,却半知半解。以下分二部分对这个题目进行分析建议没心情,没耐心,没兴趣的人,只需要了解下第一部分,看第二部分就表看了,很罗嗦的。转载 2013-12-07 01:14:22 · 1387 阅读 · 0 评论 -
Windows上GAWK的使用(六)
这里将列出 gawk.exe 程式的一些例子。gawk.exe.exe "{if (NF > max) max = NF}END {print max}"此程式会印出所有输入行之中,栏位的最大个数。gawk.exe "length($0) > 80"此程式会印出一行超过 80 个字元的每一行。此处只有 pattern 被列出,action 是采用内定的 print。ga转载 2013-12-07 01:03:48 · 1426 阅读 · 0 评论 -
Windows上GAWK的使用(一)
现在经常要处理到一些日志数据,对这些数据进行分析处理,但首先要对日志数据进行etl处理,如果简单的数据格式处理,使用gawk是最理想不过了,下面我们就介绍如何使用gawk,对数据进行e(extract)处理。 一.到网上下载一个gawk.exe程序(用于Windows上)。二.gawk的基本语法. 1.gawk格式.gawk [options] "[Begin{}][pat转载 2013-12-07 01:01:36 · 4949 阅读 · 0 评论 -
gawk
【gawk 是 GNU 的 awk,具有很强的文本处理功能,简洁优美。】第一章 前言第二章 简介第三章 读取输入档案第四章 印出第五章 Patterns第六章 算式(Expression)作为Actions的叙述第七章 Actions里面的控制叙述第八章 内建函式(Built-in Functions)第九章 使用者定义的函式第十章 实例 =转载 2013-12-07 00:58:21 · 1003 阅读 · 0 评论 -
Windows上GAWK的使用(四)
14.5. 条件语句gawk中的条件语句是从C语言中借鉴过来的,可控制程序的流程。14.5.1. if语句格式:{if (expression_r){statement; statement; ...}}gawk.exe "{if ($1 gawk.exe "{if ($1 14.5.2. if/else语句,用于双重判断。格式:{if (expre转载 2013-12-07 01:03:02 · 1409 阅读 · 0 评论 -
Lua函数
这些函数都是Lua编程语言的一部分, 点击这里了解更多. assert(value) - 检查一个值是否为非nil, 若不是则(如果在wow.exe打开调试命令)显示对话框以及输出错误调试信息 collectgarbage() - 垃圾收集器. (新增于1.10.1) date(format, time) - 返回当前用户机器上的时间. error("error message",转载 2013-11-25 01:32:00 · 591 阅读 · 0 评论 -
Lua中调用C/C++函数
翻译自http://gamedevgeek.com/tutorials/calling-c-functions-from-lua/在Lua中调用C++函数我的第二部分教程讲解了怎样在C++中调用Lua函数。在这部分中,我们将讨论相反的情况——在Lua中调用C++函数。由于我没有想到一个简单的例子来说明这种情况,因此,我借用了Lua官方文档中的average函数来进行讲解。本教程涵盖了L转载 2013-11-25 01:33:13 · 794 阅读 · 0 评论 -
Lua游戏脚本语言入门
Lua脚本语言入门(目前魔兽使用的可以写在宏内的语言)(中文)作者: 沐枫 Lua 程序设计初步作者: 沐枫 (第二人生成员)版权所有转载请注明原出处 在这篇文章中,我想向大家介绍如何进行Lua程序设计。我假设大家都学过至少一门编程语言,比如Basic或C,特别是C。因为Lua的最大用途是在宿主程序中作为脚本使用的。 Lua 的语法比较简单,学习起来也比转载 2013-11-25 01:30:31 · 3319 阅读 · 0 评论