SlideShare a Scribd company logo
1 of 31
函数调用关系工具 2011年8月
目录 原理 Antlr Eclipse CDT 函数调用关系工具 工具目标 工具设计思路 实现过程 问题
Antlr Another Tool  for Language Recognition ,[object Object]
提供了一个框架,构造语言识别器,编 译器和解释器
基于LL(*)的识别:自顶向下分析的编译方法,最左推导
Input:接受文法语言描述Output:产生识别这些语言语句的程序(Java ,Python,C++,C#,Ruby) ,[object Object]
支持多种语言
使用更加方便,[object Object]
Antlr内部机理 Character Stream Lexer(词法分析器) 形成token Parser(语法分析器) 处理一系列的token,形成AST Abstract Syntax Tree(AST) 得到的解析树 Tree Parser 处理AST Lexer Token Stream Parser AST Tree Parser Text Output
Antlr环境搭建 JDK(Java Runtime Environment ) http://www.antlr.org/ antlr的jar包 设置环境变量 ClASSPATH ,[object Object],集成开发环境
Antlr使用一般步骤 (1) 输入一个grammar(xx.g) (2) java org.antlr.Toolxx.g (3) 产生Class (4) 使用Class进行相应的应用 Antlrworks?
Antlr-Grammar  EBNF 法则 Extended Backus-Naur Form 扩展巴科斯范式 规则 ,[object Object]
A:a;来表示规则,“:”代替了“=>”
选择“|”A:a|b|c符号A可以推导出a或b或c
连接“  ”A:abc;。此规则接收句型abc
重复“*,+” A:a*,A:a+;
可选 “?” A:a?终结符 ,[object Object]
“~”: ~’B’;(除B之外的所有字符)
“.”:任意字符,[object Object]
Antlr-一个简单的例子 识别加、减、乘、除 算术表达式     2+3;     2+(3*4);
Antlr-解析编程语言 http://www.antlr.org/ 开源的语法文件(grammar) C.g, Cpp.g, Java.g, Python.g, js.g   …
Eclipse CDT  CDT是什么? ,[object Object]
为Eclipse 平台提供功能完全的 C/C++IDE
开放的源代码,免费
许多代码基于JDT CDT能做什么? ,[object Object]
    C/C++调试器
    C/C++解析器
搜索引擎,[object Object]
CDT——如何访问AST 创建一个新的 ASTVisitor 调用 IASTTranslationUnit.accept(ASTVisitor) visit方法() PROCESS_SKIP PROCESS_ABORT PROCESS_CONTINUE 表 1 显示了 Boolean 字段来确定访问器是否对访问此节点感兴趣。       该字段控制哪种类型的节点能够调用访问程序的 visit() 方法。默认情况下,它们都被设为 false,所以永远都不会调用 visit()。
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
CDT-API IBinding ILabel IVariable ICompositeType IEnumberation ITypedef IParameter IField IFunction IType IFunctionType ICPPFunction ICPPClassType ICPPMethod

More Related Content

What's hot

Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI建興 王
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509tidesq
 
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509tidesq
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算建興 王
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片kao kuo-tung
 
Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生Wen Liao
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍gowell
 
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組Justin Lin
 
Python topic re
Python topic rePython topic re
Python topic recri fan
 
Python 起步走
Python 起步走Python 起步走
Python 起步走Justin Lin
 
Erlang开发及应用
Erlang开发及应用Erlang开发及应用
Erlang开发及应用litaocheng
 
Python topic str_encoding
Python topic str_encodingPython topic str_encoding
Python topic str_encodingcri fan
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source ProjectsGeorge Ang
 

What's hot (18)

Introduction to C++ over CLI
Introduction to C++ over CLIIntroduction to C++ over CLI
Introduction to C++ over CLI
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
Linux c++ 编程之链接与装载 -基础篇--v0.3--20120509
 
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
Linux c++ 编程之链接与装载 -提高篇--v0.3--20120509
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
C python 原始碼解析 投影片
C python 原始碼解析 投影片C python 原始碼解析 投影片
C python 原始碼解析 投影片
 
系統程式 -- 第 8 章
系統程式 -- 第 8 章系統程式 -- 第 8 章
系統程式 -- 第 8 章
 
Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生
 
Lua 语言介绍
Lua 语言介绍Lua 语言介绍
Lua 语言介绍
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
open() 與 io 模組
open() 與 io 模組open() 與 io 模組
open() 與 io 模組
 
Python topic re
Python topic rePython topic re
Python topic re
 
Python 起步走
Python 起步走Python 起步走
Python 起步走
 
系統程式 -- 第 7 章
系統程式 -- 第 7 章系統程式 -- 第 7 章
系統程式 -- 第 7 章
 
Erlang开发及应用
Erlang开发及应用Erlang开发及应用
Erlang开发及应用
 
系統程式 -- 第 5 章
系統程式 -- 第 5 章系統程式 -- 第 5 章
系統程式 -- 第 5 章
 
Python topic str_encoding
Python topic str_encodingPython topic str_encoding
Python topic str_encoding
 
Recycle Open Source Projects
Recycle Open Source ProjectsRecycle Open Source Projects
Recycle Open Source Projects
 

Viewers also liked

01 opening remarks
01 opening remarks01 opening remarks
01 opening remarksWu Liang
 
sarna canina
sarna canina sarna canina
sarna canina HugoM0ra
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训Wu Liang
 
检查实现类
检查实现类检查实现类
检查实现类Wu Liang
 
Cppcheck分析
Cppcheck分析Cppcheck分析
Cppcheck分析Wu Liang
 
cppcheck源码分析
cppcheck源码分析cppcheck源码分析
cppcheck源码分析Wu Liang
 

Viewers also liked (7)

01 opening remarks
01 opening remarks01 opening remarks
01 opening remarks
 
sarna canina
sarna canina sarna canina
sarna canina
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
 
检查实现类
检查实现类检查实现类
检查实现类
 
Hmaster
HmasterHmaster
Hmaster
 
Cppcheck分析
Cppcheck分析Cppcheck分析
Cppcheck分析
 
cppcheck源码分析
cppcheck源码分析cppcheck源码分析
cppcheck源码分析
 

Similar to 函数调用关系工具-2011-孙光福

Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913lusecheng
 
Python 脚本入门基础
Python 脚本入门基础Python 脚本入门基础
Python 脚本入门基础wklken
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojectsGeorge Ang
 
Interactive Data Language
Interactive Data LanguageInteractive Data Language
Interactive Data Languagesiufu
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4Tao He
 
intro syslog syslogng
intro syslog syslogngintro syslog syslogng
intro syslog syslogngjuruntang
 
Syslog Ng
Syslog NgSyslog Ng
Syslog Ngflytod
 
syslog&syslog-ng
syslog&syslog-ngsyslog&syslog-ng
syslog&syslog-ngjurntang
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你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: 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 RPractical Data Analysis in R
Practical Data Analysis in RChun-Ming Chang
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南HonestQiao
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisXiaoming Chen
 

Similar to 函数调用关系工具-2011-孙光福 (20)

Hcsm lect-20120913
Hcsm lect-20120913Hcsm lect-20120913
Hcsm lect-20120913
 
第1章 概论
第1章 概论第1章 概论
第1章 概论
 
Python 脚本入门基础
Python 脚本入门基础Python 脚本入门基础
Python 脚本入门基础
 
2006 recycle opensourceprojects
2006 recycle opensourceprojects2006 recycle opensourceprojects
2006 recycle opensourceprojects
 
Interactive Data Language
Interactive Data LanguageInteractive Data Language
Interactive Data Language
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
C+
C+C+
C+
 
C#
C#C#
C#
 
建置Python開發環境
建置Python開發環境建置Python開發環境
建置Python開發環境
 
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4
 
intro syslog syslogng
intro syslog syslogngintro syslog syslogng
intro syslog syslogng
 
Syslog Ng
Syslog NgSyslog Ng
Syslog Ng
 
syslog&syslog-ng
syslog&syslog-ngsyslog&syslog-ng
syslog&syslog-ng
 
[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你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: 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 RPractical Data Analysis in R
Practical Data Analysis in R
 
Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南Coreseek/Sphinx 全文检索实践指南
Coreseek/Sphinx 全文检索实践指南
 
Php
PhpPhp
Php
 
Ch01
Ch01Ch01
Ch01
 
Baidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log AnalysisBaidu LSP and DISQL for Log Analysis
Baidu LSP and DISQL for Log Analysis
 

函数调用关系工具-2011-孙光福