Submit Search
Upload
函数调用关系工具-2011-孙光福
•
Download as PPTX, PDF
•
1 like
•
711 views
W
Wu Liang
Follow
上周五,孙光福同学给我们分享了“C/C++函数调用关系分析工具”的设计和实现,以下是他分享的PPT
Read less
Read more
Self Improvement
Technology
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 31
Download now
Recommended
函数调用关系工具-Lite
函数调用关系工具-Lite
Wu Liang
《Python 3.5 技術手冊》第二章草稿
《Python 3.5 技術手冊》第二章草稿
Justin Lin
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
Python 2-基本語法
Python 2-基本語法
阿Samn的物理課本
MPI use c language
MPI use c language
ZongYing Lyu
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
Google protocol buffers简析
Google protocol buffers简析
wavefly
Java考试试题
Java考试试题
yiditushe
Recommended
函数调用关系工具-Lite
函数调用关系工具-Lite
Wu Liang
《Python 3.5 技術手冊》第二章草稿
《Python 3.5 技術手冊》第二章草稿
Justin Lin
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
Python 2-基本語法
Python 2-基本語法
阿Samn的物理課本
MPI use c language
MPI use c language
ZongYing Lyu
從 REPL 到 IDE
從 REPL 到 IDE
Justin Lin
Google protocol buffers简析
Google protocol buffers简析
wavefly
Java考试试题
Java考试试题
yiditushe
Introduction to C++ over CLI
Introduction to C++ over CLI
建興 王
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
tidesq
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
tidesq
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
C python 原始碼解析 投影片
C python 原始碼解析 投影片
kao kuo-tung
系統程式 -- 第 8 章
系統程式 -- 第 8 章
鍾誠 陳鍾誠
Hello world 的一生
Hello world 的一生
Wen Liao
Lua 语言介绍
Lua 语言介绍
gowell
getPDF.aspx
getPDF.aspx
byron zhao
open() 與 io 模組
open() 與 io 模組
Justin Lin
Python topic re
Python topic re
cri fan
Python 起步走
Python 起步走
Justin Lin
系統程式 -- 第 7 章
系統程式 -- 第 7 章
鍾誠 陳鍾誠
Erlang开发及应用
Erlang开发及应用
litaocheng
系統程式 -- 第 5 章
系統程式 -- 第 5 章
鍾誠 陳鍾誠
Python topic str_encoding
Python topic str_encoding
cri fan
Recycle Open Source Projects
Recycle Open Source Projects
George Ang
01 opening remarks
01 opening remarks
Wu Liang
sarna canina
sarna canina
HugoM0ra
Bst svn专项培训
Bst svn专项培训
Wu Liang
检查实现类
检查实现类
Wu Liang
More Related Content
What's hot
Introduction to C++ over CLI
Introduction to C++ over CLI
建興 王
Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
tidesq
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
tidesq
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
建興 王
C python 原始碼解析 投影片
C python 原始碼解析 投影片
kao kuo-tung
系統程式 -- 第 8 章
系統程式 -- 第 8 章
鍾誠 陳鍾誠
Hello world 的一生
Hello world 的一生
Wen Liao
Lua 语言介绍
Lua 语言介绍
gowell
getPDF.aspx
getPDF.aspx
byron zhao
open() 與 io 模組
open() 與 io 模組
Justin Lin
Python topic re
Python topic re
cri fan
Python 起步走
Python 起步走
Justin Lin
系統程式 -- 第 7 章
系統程式 -- 第 7 章
鍾誠 陳鍾誠
Erlang开发及应用
Erlang开发及应用
litaocheng
系統程式 -- 第 5 章
系統程式 -- 第 5 章
鍾誠 陳鍾誠
Python topic str_encoding
Python topic str_encoding
cri fan
Recycle Open Source Projects
Recycle Open Source Projects
George Ang
What's hot
(18)
Introduction to C++ over CLI
Introduction to C++ over CLI
Ecma script edition5-小试
Ecma script edition5-小试
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
C python 原始碼解析 投影片
C python 原始碼解析 投影片
系統程式 -- 第 8 章
系統程式 -- 第 8 章
Hello world 的一生
Hello world 的一生
Lua 语言介绍
Lua 语言介绍
getPDF.aspx
getPDF.aspx
open() 與 io 模組
open() 與 io 模組
Python topic re
Python topic re
Python 起步走
Python 起步走
系統程式 -- 第 7 章
系統程式 -- 第 7 章
Erlang开发及应用
Erlang开发及应用
系統程式 -- 第 5 章
系統程式 -- 第 5 章
Python topic str_encoding
Python topic str_encoding
Recycle Open Source Projects
Recycle Open Source Projects
Viewers also liked
01 opening remarks
01 opening remarks
Wu Liang
sarna canina
sarna canina
HugoM0ra
Bst svn专项培训
Bst svn专项培训
Wu Liang
检查实现类
检查实现类
Wu Liang
Hmaster
Hmaster
Wu Liang
Cppcheck分析
Cppcheck分析
Wu Liang
cppcheck源码分析
cppcheck源码分析
Wu Liang
Viewers also liked
(7)
01 opening remarks
01 opening remarks
sarna canina
sarna canina
Bst svn专项培训
Bst svn专项培训
检查实现类
检查实现类
Hmaster
Hmaster
Cppcheck分析
Cppcheck分析
cppcheck源码分析
cppcheck源码分析
Similar to 函数调用关系工具-2011-孙光福
Hcsm lect-20120913
Hcsm lect-20120913
lusecheng
第1章 概论
第1章 概论
tjpucompiler
Python 脚本入门基础
Python 脚本入门基础
wklken
2006 recycle opensourceprojects
2006 recycle opensourceprojects
George Ang
Interactive Data Language
Interactive Data Language
siufu
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
javatwo2011
C+
C+
LohasBicycle
C#
C#
LohasBicycle
建置Python開發環境
建置Python開發環境
吳錫修 (ShyiShiou Wu)
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4
Tao He
intro syslog syslogng
intro syslog syslogng
juruntang
Syslog Ng
Syslog Ng
flytod
syslog&syslog-ng
syslog&syslog-ng
jurntang
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
台灣資料科學年會
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
Chun-Min Chang
Practical Data Analysis in R
Practical Data Analysis in R
Chun-Ming Chang
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
HonestQiao
Php
Php
pukongkong
Ch01
Ch01
jashliao
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
Xiaoming Chen
Similar to 函数调用关系工具-2011-孙光福
(20)
Hcsm lect-20120913
Hcsm lect-20120913
第1章 概论
第1章 概论
Python 脚本入门基础
Python 脚本入门基础
2006 recycle opensourceprojects
2006 recycle opensourceprojects
Interactive Data Language
Interactive Data Language
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
C+
C+
C#
C#
建置Python開發環境
建置Python開發環境
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4
intro syslog syslogng
intro syslog syslogng
Syslog Ng
Syslog Ng
syslog&syslog-ng
syslog&syslog-ng
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
Practical Data Analysis in R
Practical Data Analysis in R
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
Php
Php
Ch01
Ch01
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
函数调用关系工具-2011-孙光福
1.
函数调用关系工具 2011年8月
2.
目录 原理 Antlr
Eclipse CDT 函数调用关系工具 工具目标 工具设计思路 实现过程 问题
3.
4.
提供了一个框架,构造语言识别器,编 译器和解释器
5.
基于LL(*)的识别:自顶向下分析的编译方法,最左推导
6.
7.
支持多种语言
8.
9.
Antlr内部机理 Character Stream
Lexer(词法分析器) 形成token Parser(语法分析器) 处理一系列的token,形成AST Abstract Syntax Tree(AST) 得到的解析树 Tree Parser 处理AST Lexer Token Stream Parser AST Tree Parser Text Output
10.
11.
Antlr使用一般步骤 (1) 输入一个grammar(xx.g)
(2) java org.antlr.Toolxx.g (3) 产生Class (4) 使用Class进行相应的应用 Antlrworks?
12.
13.
A:a;来表示规则,“:”代替了“=>”
14.
选择“|”A:a|b|c符号A可以推导出a或b或c
15.
连接“ ”A:abc;。此规则接收句型abc
16.
重复“*,+” A:a*,A:a+;
17.
18.
“~”: ~’B’;(除B之外的所有字符)
19.
20.
Antlr-一个简单的例子 识别加、减、乘、除 算术表达式
2+3; 2+(3*4);
21.
Antlr-解析编程语言 http://www.antlr.org/ 开源的语法文件(grammar)
C.g, Cpp.g, Java.g, Python.g, js.g …
22.
23.
为Eclipse 平台提供功能完全的 C/C++IDE
24.
开放的源代码,免费
25.
26.
C/C++调试器
27.
C/C++解析器
28.
29.
CDT——如何访问AST 创建一个新的 ASTVisitor
调用 IASTTranslationUnit.accept(ASTVisitor) visit方法() PROCESS_SKIP PROCESS_ABORT PROCESS_CONTINUE 表 1 显示了 Boolean 字段来确定访问器是否对访问此节点感兴趣。 该字段控制哪种类型的节点能够调用访问程序的 visit() 方法。默认情况下,它们都被设为 false,所以永远都不会调用 visit()。
30.
CDT——API #include <math.h>
double circu(double diam){ return diam*M_PI; } IASTTranslationUnit:main.c IASTDeclaration … IASTFunctionDefinition IASTCompoudStatement IASTDeclSpecifier: double IASTFunctionDeclarator IASTParameterDeclaration: IASTName:cicru IASTReturnStatement IASTDeclSpecifier:double IASTDelarator IASTBinaryExpression:* IASTIdExpression IASTLiteralExpression:3.1415 IASTName:diam IASTName:diam
31.
CDT-API IBinding ILabel
IVariable ICompositeType IEnumberation ITypedef IParameter IField IFunction IType IFunctionType ICPPFunction ICPPClassType ICPPMethod
32.
Eclipse-CDT 一个简单的例子 获取sourceCode当中所有方法的定义?
33.
34.
35.
函数调用关系工具-设计思路
36.
函数调用关系工具-类 ASTASTTranslationUnitCore:提供解析文件或者Code的接口。 CPPClassCollector:遍历AST,获得所有的Class
CPPFunctionCollector:获得所有的Function定义 CPPNameCollector:获得所有是Function,Class,Method的符号 NodeInfo:存储节点的信息 HeaderFileCast: 处理头文件 FileToString:将File的头文件替换形成String CPPCallRelation:形成函数调用关系
37.
38.
List<ICPPASTCompositeTypeSpecifier> classList
39.
List<IASTFunctionDefinition> functionDefinitionList
40.
List<IASTNode> astNodeList
41.
Map<File,List<IASTPreprocessorIncludeStatement>> fileIncludeFilesMap
42.
Map<String, List<File>> headerFileListMap
43.
List<NodeInfo> nodeList
44.
45.
46.
47.
函数调用关系工具-创建根节点实现过程
48.
49.
50.
函数调用关系工具-测试 一个简单的测试用例
51.
函数调用关系工具-问题 (1) 多态?
(2) 隐式类型转换? (3) 模板? (4) 执行速度的优化?
52.
Thank You!
Download now