webkit idl parser 模块分析
来源:互联网 发布:曲面电视的缺点 知乎 编辑:程序博客网 时间:2024/05/24 23:16
csdn lidp http://blog.csdn.net/perfectpdl
webkit 中 根据idl接口 语言定义dom对象,然后通过perl 解析模块产生经过包装的c++ 文件。
与idl解析相关的五个文件如下:bindings/scripts/CodeGenerator.pm
bindings/scripts/CodeGeneratorV8.pm
bindings/scripts/IDLParser.pm
bindings/scripts/IDLStructure.pm
bindings/scripts/generate-bindings.pl
generate-bindings.pl 为解析 idl文件入口,根据idl文件定义生成 c++头文件及源文件。
generate-bindings.pl 在makefile中被调用。比如android平台上在 webcore/Android.derived.v8bindings.mk 文件中。
generate-bindings.pl 代码:
GetOptions('include=s@' => \@idlDirectories, # 目录, 依赖,输出目录等参数。
'outputDir=s' => \$outputDirectory,
'generator=s' => \$generator,
'defines=s' => \$defines,
'preprocessor=s' => \$preprocessor,
'write-dependencies' => \$writeDependencies);
my $idlFile = $ARGV[0]; # 要解析的idl文件
$defines =~ s/^\s+|\s+$//g; # 正则表达式去掉空格
# Parse the given IDL file.
#创建一个解析器
my $parser = IDLParser->new(1); # 对应IDLParser.pm 代码
my $document = $parser->Parse($idlFile, $defines, $preprocessor);
# Generate desired output for given IDL file. 对应 CodeGenerator.pm 代码。
my $codeGen = CodeGenerator->new(\@idlDirectories, $generator, $outputDirectory, 0, $preprocessor, $writeDependencies);
$codeGen->ProcessDocument($document, $defines);
ProcessDocument->GenerateInterface(CodeGeneratorV8.pm)
|->GenerateHeader(CodeGeneratorV8.pm) 生成头文件,
GenerateInterface-> |
|->GenerateImplementation(CodeGeneratorV8.pm) 生成源文件
- webkit idl parser 模块分析
- webkit idl parser 模块分析
- webkit Parser模块
- WebKit之IDL分析
- WebKit之分析Binding的案例(TestObject.idl)
- WebKit之binding分析案例(testInterface.idl)
- WebKit之binding案例分析(testMediaQueryListListener.idl)
- webkit idl 资料
- webkit idl 资料
- gloox代码分析2 - xml parser模块
- WebKit之IDL的binding
- Android Webkit中DocumentWriter模块分析
- SNMP MIB 文法分析--基于Scala Parser模块
- Webkit 模块
- 一些特殊的Webkit Idl属性
- Webkit IDL的各种自定义接口
- WebKit之Binding案例(testCallback.idl)
- WebKit之IDL关键字汇总整理
- 应用程序正常初始化(0xc0000135)失败
- CenOS5.6下无法挂载NTFS盘符的解决方法
- Spring 事务管理高级应用难点剖析: 第 2 部分
- 装箱和拆箱和ValueOf以及XXXValue -- Java语法糖(Syntax sugar)
- php读xml
- webkit idl parser 模块分析
- 压缩解压缩命令
- C# FileStream 文件读写(转)
- 关于虚拟主机的数据库如何备份
- linux中ndiswrapper的安装及无线网卡驱动安装
- 如何禁用Windows屏保和电源管理
- VC获取硬盘物理序列号
- 解读创建自定义组件
- Android Bitmap和Canvas学习笔记