函数调用关系工具2011年8月
目录原理AntlrEclipse CDT函数调用关系工具工具目标工具设计思路实现过程问题
AntlrAnother Tool  for Language Recognition语言识别工具
提供了一个框架,构造语言识别器,编 译器和解释器
基于LL(*)的识别:自顶向下分析的编译方法,最左推导
Input:接受文法语言描述Output:产生识别这些语言语句的程序(Java ,Python,C++,C#,Ruby)antlrVSLex,YACC
支持多种语言
使用更加方便Antlr能做什么?前端1.编程语言处理一般的编译技术2.文本处理正则表达式?3.domain-specific languages       (DSL)(领域专用语言)源程序词法分析Antlr封装语法分析语义分析中间代码后端目标代码代码优化
Antlr内部机理CharacterStreamLexer(词法分析器)形成tokenParser(语法分析器)处理一系列的token,形成ASTAbstract Syntax Tree(AST)得到的解析树Tree Parser处理ASTLexerTokenStreamParserASTTree ParserText Output
Antlr环境搭建JDK(Java Runtime Environment )http://www.antlr.org/antlr的jar包设置环境变量 ClASSPATHAntlrWorks集成开发环境
Antlr使用一般步骤(1) 输入一个grammar(xx.g)(2) java org.antlr.Toolxx.g(3) 产生Class(4) 使用Class进行相应的应用Antlrworks?
Antlr-Grammar EBNF 法则Extended Backus-Naur Form 扩展巴科斯范式规则ANTLR的规则要以分号“;”结束。
A:a;来表示规则,“:”代替了“=>”
选择“|”A:a|b|c符号A可以推导出a或b或c
连接“  ”A:abc;。此规则接收句型abc
重复“*,+” A:a*,A:a+;
可选 “?” A:a?终结符“..”: ’A’..’Z’(A到Z的任意字符)
“~”: ~’B’;(除B之外的所有字符)
“.”:任意字符Antlr-Grammargrammar : grammar-nameOptions{output=AST ? …language=Java? C? …}语法规则(第一个字母小写)     a:INT;词法规则(第一个字母大写)     INT: ‘0’.. ‘9’+;
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是什么?    C/C++ Development Toolkit
为Eclipse 平台提供功能完全的 C/C++IDE
开放的源代码,免费
许多代码基于JDT CDT能做什么?    C/C++编辑器
    C/C++调试器
    C/C++解析器
搜索引擎Eclipse CDT-Parser原理CDTCharacterStreamLexerClass CPreprocessorAntlrTokenStreamIScanner ParserClass  AbstractGNUSourceCodeParserASTClass IASTTranslationUnitTree Parseraccept方法Text Output
CDT——如何访问AST创建一个新的 ASTVisitor调用 IASTTranslationUnit.accept(ASTVisitor)visit方法()PROCESS_SKIPPROCESS_ABORTPROCESS_CONTINUE表 1 显示了 Boolean 字段来确定访问器是否对访问此节点感兴趣。      该字段控制哪种类型的节点能够调用访问程序的 visit() 方法。默认情况下,它们都被设为 false,所以永远都不会调用 visit()。
CDT——API#include <math.h>double circu(double diam){	return diam*M_PI;}IASTTranslationUnit:main.cIASTDeclaration…IASTFunctionDefinitionIASTCompoudStatementIASTDeclSpecifier:doubleIASTFunctionDeclaratorIASTParameterDeclaration:IASTName:cicruIASTReturnStatementIASTDeclSpecifier:doubleIASTDelaratorIASTBinaryExpression:*IASTIdExpressionIASTLiteralExpression:3.1415IASTName:diamIASTName:diam
CDT-APIIBindingILabelIVariableICompositeTypeIEnumberationITypedefIParameterIFieldIFunctionITypeIFunctionTypeICPPFunctionICPPClassTypeICPPMethod

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