Browsed by
Month: September 2016

NEUOJ Developer Wanted!!!

NEUOJ Developer Wanted!!!

本人为NEUOJ的创始人 NEUOJ的地址为 http://202.118.31.226  目前该OJ为NEUACM团队的官方训练系统,本系统也举行较大规模的比赛,如省网络赛,如中天钢铁程序设计竞赛等,采用Laravel框架+domjudge开发 诚邀Laravel党,C/C++触 以及想要加入我们,学习OJ开发的对技术感兴趣的同学和我们共同开发 我们采用git协作开发,使用DroneCI进行持续集成,测评采用分布式部署,我们的Bug Report全部公开提出可以在github上看到我们的BugReport和项目计划文档 github.com/VOID001/NEUOJ-bug-report   我们招纳的开发者方向有 OJ Web后端开发者 使用PHP + Laravel进行OJ开发, 并结合当今的先进web开发技术如redis 能够熟练使用MySQL Linux Shell 以及 git 者优先 OJ Web前端开发者 使用JS, JQuery, Angular JS进行前端网页开发 OJ 测评后端开发 使用C, Shell, Golang, 并不局限于这几种语言 要求对Linux有熟练的掌握 以及参与过C的大中型项目开发 学习者 选择上述任一方向之后加入OJ开发 在一定期限内学习相关技术之后投入开发 [github-issues username=”VOID001″ repository=”NEUOJ-bug-report” limit=”10″] 想要加入的请将你的学号 姓名 学院 个人简介 发送到zhangjianqiu13 AT gmail DOT com  

[Lua 源码解读 0] lstrlib.c 模式匹配系列函数解析

[Lua 源码解读 0] lstrlib.c 模式匹配系列函数解析

前言 当当当当~~~~ lua源码阅读的记录文开坑了, 窝准备把lua的源码都通读一遍,并且给出自己的记录&体会,最后,根据阅读源码学到的东西,考虑实现一个相关的小project(这是一个大坑,flag已立) 提供一些我找到的对阅读源码有帮助的资源 http://del.icio.us/adnamin/lua+source 窝按照这里提供的顺序阅读lua源码, 至少起步是按照这个顺序来的,等到自己对这个代码比较熟练的时候,可能会考虑按照自己的喜好顺序来 https://www.reddit.com/comments/63hth/ask_reddit_which_oss_codebases_out_there_are_so/c02pxbp lmathlib.c中的很多函数都只是一个wrapper的作用,在这里就先不过多介绍了,我们先来介绍lstrlib.c的函数&功能 lstrlib.c提供了lua的字符串相关的库函数&helper函数,一个重点功能是提供了pattern matching的功能,注意它提供的pattern和正则表达式是有区别的,应该说功能没有正则表达式强大,但是日常匹配使用也是够了,lua官方对这个pattern有一个很系统的解释,这里总结一下,并且理解这个对阅读相关的代码也有很大的帮助,先放一个Lua5.1原生文档对Pattern的说明的链接 https://www.lua.org/manual/5.1/manual.html#5.4.1 下面就来解释一下Lua里面的模式匹配及其定义的体系 Lua 的 Pattern 体系 character class 是组成一个pattern串的基本单位, 每一个character class代表一类字符,他们可以是一个set里的,可以是set的补集,可以是转义字符定义的类型如%d数字%l小写字母等 pattern item是用来匹配的基本单位,一个pattern item由一个character class加上*,+,…等特定的符号组成,表示重复多次、一次等含义,几个特殊的pattern,一个是 %n, n可以是0-9的数字, 表示匹配的内容和capture的内容一致,%bxy表示balance match从x开始到y的一个字符串, 关于什么是balance match详见文档 pattern是匹配的基本单位,一个pattern由一个或者多个pattern item组成,可以在首部含有^尾部含有$,语意和正则表达式内的这两个符号的语意一致 capture 是将一个pattern用小括号括起来, 然后如果源子串match了这个括号内的pattern,会被“捕捉”(存储)起来供之后的匹配使用   源码解析 首先我们来看一下 最下方export的函数,这里export了一系列的函数如下 static const luaL_Reg strlib[] = { {“byte”, str_byte}, {“char”, str_char}, {“dump”, str_dump}, {“find”, str_find}, {“format”, str_format}, {“gfind”, gfind_nodef}, {“gmatch”, gmatch}, {“gsub”, str_gsub}, {“len”, str_len}, {“lower”, str_lower}, {“match”, str_match}, {“rep”, str_rep}, {“reverse”, str_reverse}, {“sub”, str_sub}, {“upper”, str_upper}, {NULL, NULL}…

Read More Read More