源码分析 【程序编程相关:关注物业公司信息化建设】
一份mudos源码是必不可少的.为了方便的编译与处理这些源码,最好是处于unix环境,windows用户可以安装cygwin,在完全安装之后,将获得gcc.flex.bison等常用工具.编译mudos源码比较繁琐,这里有个mudos编译手册可做参考. 【推荐阅读:定位 和 专注 是成功的关键--百度收购】定义部分 【扩展信息:AD环境下集服务器监控报警功能的WMI脚】
本文所分析的源代码见:make_func.y
该部分包括直接进入输出文件的c代码(2行到53行),以及用来建立分析程序的有关记号.数据结构以及文法规则的信息(56行到66行). 16 – 23 这里声明的全局变量将在解析的同时被赋值,这些值,在执行edit_source -build_efuns时用来生成lpc语法的仿函数列表,同时也自动生成编译mudos所需要的一些头文件. 37 – 51 lpc支持的各种数据类型. 56 – 59 默认情况下,actions与词法分析的返回值为整数,为了让解析程序支持多种数据类型,定义一个union,在bison程序处理后的文件make_func.tab.c中,这个union定义成: typedef union { int number; char *string; } yystype; 62 定义ebnf终结符号. 64 定义非终结符号.其返回值相关数据类型为int.id在终结符号声明中出现,仍为终结符. 66 非终结符号.其返回值相关数据类型为char *.num在终结符号声明中出现,仍为终结符. 如果61行到65行按照下面这种方式声明,用bison处理后的文件make_func.tab.c将一模一样: %token <string> id %token <number> num %token default operator %type <number> type arg_list basic typel arg_type typel2 %type <string> optional_id optional_default词法分析
该部分定义解析程序如何从源文本中分析出单词的规则.这项工作可以交给flex或者lex来完成,但是由于这个解析程序比较简单,因此自定义词法分析代码(328行到414行). 330 词法分析函数必须声明为 int yylex() 334 yyin声明于edit_source.c,为func_spec.cpp的文件流.... 下一页