lua# lua5.1.4 源码文件作用一览
写了个脚本列出lua源码C文件头部的注释,作为我有一搭没一搭以Lua为对象学习编译原理的开端。
lua5.1.4全部的源码有35个C文件,17216行代码。每个文件基本的功能如下
./output_lua_sources_comments.sh ~/resources/sources/lua/src myarch/others (master ⚡) mattPC
1 52 lctype.c 'ctype' functions for Lua
2 67 linit.c Initialization of libraries for lua.c and other clients
3 76 lzio.c Buffered streams
4 77 ltm.c Tag methods
5 99 lmem.c Interface to Memory Manager
6 107 lopcodes.c Opcodes for Lua virtual machine
7 155 lcorolib.c Coroutine Library
8 161 lfunc.c Auxiliary functions to manipulate prototypes and closures
9 173 ldump.c save precompiled Lua chunks
10 185 lstring.c String table (keeps all strings handled by Lua)
11 209 lbitlib.c Standard library for bitwise operations
12 258 lundump.c load precompiled Lua chunks
13 283 lmathlib.c Standard mathematical library
14 283 ltablib.c Library for Table Manipulation
15 289 lobject.c Some generic functions over Lua objects
16 322 lstate.c Global State
17 323 loslib.c Standard Operating System library
18 398 ldblib.c Interface from Lua to its debug API
19 432 luac.c Lua compiler (saves bytecodes to files; also list bytecodes)
20 459 lbaselib.c Basic library
21 496 lua.c Lua stand-alone interpreter
22 527 llex.c Lexical Analyzer
23 580 ldebug.c Debug Interface
24 588 ltable.c Lua tables (hash)
25 657 liolib.c Standard I/O (and system) library
26 668 ldo.c Stack and Call structure of Lua
27 725 loadlib.c Dynamic library loader for Lua
28 766 loadlib_rel.c Dynamic library loader for Lua
29 868 lvm.c Lua virtual machine
30 882 lcode.c Code generator for Lua
31 958 lauxlib.c Auxiliary functions for building Lua libraries
32 972 lstrlib.c Standard library for string operations and pattern-matching
33 1205 lgc.c Garbage Collector
34 1281 lapi.c Lua API
35 1635 lparser.c Lua Parser
----------------------------------------------------------------------------------------
17216
以下是bash脚本,内容也算丰富。
1 [[ "$#" == 0 ]] && { 2 echo "usage: $0 path" 3 exit 1 4 } 5 6 src_dir="$1" 7 pos=$((${#src_dir}+2)) 8 9 outline () 10 { 11 printf "%-6d%-15s%s\n" "$1" "$2" "$3" 12 } 13 14 { 15 for file in `ls -1 "$src_dir""/*.c"` ; do 16 comment=`sed -n "3p" $file | cut -d" " -f2-` 17 filename=`basename $file` 18 lines=`wc -l $file | cut -d" " -f1` 19 outline "$lines" "$filename" "$comment" 20 done 21 } | sort -nk 1| cat -b | awk '{ if(l<length($0)){ l=length($0)}; s+=$2; print $0} 22 END { while(l--){ sp=sp"-"} print sp ;printf("%8s%-6d\n","",s)}'