C++ 解析器--cint

CINT 是一个使用 C/C++ 语法的解释器,CINT 兼容 95% 的 ANSI C 代码和85% 的 ANSI C++ 代码。这基本上意味着如果你的代码没有使用太过于专业的 C/C++ 语法,CINT 都能够正确的解析,诸如类、虚函数、运算符重载、继承、指针、数组等等。CINT 甚至支持模板。CINT 所不支持的 C/C++ 语言特性已被列在 Limitions。

一、构成

CINT 已被移植到多种平台下,当前的最新版本是 5.18.00,在 Windows 平台下,CINT 由以下四部分组成:

解释器 cint.exe

它接受扩展名为 .c、.cpp、.cxx 等 C/C++ 的源代码,并将其解释执行。

库文件 libcint.dll

它提供了 cint 的运行时环境。

lib 编译器makecint.exe

它将指定的 C/C++ 库编译为可由 CINT使用扩展库,虽然 CINT 本身不进行编译,但它为使用C/C++编译器创建了一个 makefile。

系统库 /include

提供诸如 stdio.h、iostream.h、time.h 等标准的 C/C++ 库的头文件。

二、安装

首先到 CINT 网站上下载一个最新的安装包,安装包通常分为两种,一种是已经编译好的二进制文件,一种是未经过编译的源代码,我的建议是这两个包都进行下载,因为在二进制包中不包括系统库。对于得到的源代码,首先确定所使用的编译器,在安装包目录的 platform 子目录中找到你的编译器,如果没有找到,呵呵。在自己编译器对应的目录中,通常有一个 setup.bat 文件,使用它来设置相关的变量并进行编译。CINT 运行时必须的系统变量为 CINTSYSDIR,它应该被设置为包含上述 CINT 组成的目录,另外,为了使用方便,将
CINTSYSDIR 添加到系统的 PATH 中是个不错的选择。

三、功能

3.1、支持 K&R-C, ANSI-C, ANSI-C++

Cint 覆盖了80-90%的K&R-C、ANSI-C和C++语言特性。包括多继承、虚函数重载、操作符重载、默认参数、模板(这个猛)等等。 Cint的目标不是成为100%兼容ANSI/ISOC++语言的处理机,而是一个可移植的足以解析大部分标准C++的脚本环境。

3.2、可处理大规模C/C++源码

Cint可以处理大规模的C/C++源码,这可不是所有C++解释器都能做到的。Cint可以快速加载入源文件并解析超过6万行的代码。

3.3、可与编译代码混合使用

基于速度和交互的需要,你可以混合使用编译代码和脚本代码。"makecint"工具可以把任何C/C++对象作为预编译库嵌入到脚本中去,预编译库可以 配置成动态链接库。脚本代码和预编译代码可以双向无缝调用。

3.4、动态C++

Cint是动态的。它可以从命令行处理C++声明,动态地定义/删除类和函数的声明、载入/卸载源文件和动态库,以及一个扩展的 RTTI机制,这些足以让你开发出不可思议的C++用法。

3.5、内置的Debugger和Class Browser

Cint有一个内置的debugger,可以用于调试复杂的C++执行流程。基于的文本Class Browser是Debugger功能的一部分

四、源码编译

4.1、安装MinGW与Msys,并将其添加到环境路径PATH中,如:

MINGW_HOME = C:\MinGW

PATH=$PATH: ;%MINGW_HOME%;%MINGW_HOME%\bin;%MINGW_HOME%\msys\1.0;%MINGW_HOME%\msys\1.0\bin;

4.2、设定msys的fstab(C:/MinGW/msys/1.0/etc/),在文件末加入如下语句,注意这里使用到了Dos8.3命名规则。可以参考如下语句实现:

char *TMP_SDK = "C:\\Program Files\\MicrosoftSDKs";

TCHAR strLongPathName[256];

MultiByteToWideChar(CP_ACP, 0, TMP_SDK, -1, strLongPathName,256);

TCHAR szShortPathName[MAX_PATH] = {0};

GetShortPathNameW(strLongPathName,szShortPathName, MAX_PATH);

fstab:

c:/mingw        /mingw

c:/ActiveState/perl /perl

C:/Workspace/Interpreter/cint-5.18.00 /cint

C:/PROGRA~1/MID05A~1 /msvc8

C:/PROGRA~1/MI2578~1/Windows/v7.0A /psdk

4.3、配制cint的configure文件

4.3.1、将 C:\cint\configure 函数config_msvc7中的一行

CFLAGS="-G5 -MD-nologo -wd4996 -GX"

修改为

CFLAGS="-G5 -MT-nologo -wd4996 -GX"

4.3.2、将MANGLEPATHS="cygpath-m"注释,在最前面加上#

4.4、从vs2005的控制台运行vcvarsall.bat设定:

Setting environment for using Microsoft Visual Studio 2005 x86tools.

然后在vs2005的命令窗口输入msys.bat运行msys.

4.5在msys中设定变量:

export PATH=/msvc8/VC/bin:/msvc8/Common7/IDE:$PATH

export INCLUDE=/psdk/include:/msvc8/VC/include

export LIB=/psdk/lib:/msvc8/VC/lib

然后cd 到cint源码路径下,再输入:./configure,最后输入:make –j4就能生成cint的动态库

时间: 2024-10-13 01:24:00

C++ 解析器--cint的相关文章

语法解析器!

举例:将i = a + b * c作为源代码输入到解析器里,则广义上的解析器的工作流程如下图:   发表时间:2009-10-17           最后修改:2011-03-04 <         >              猎头职位: 上海: Senior Software Engineer 相关文章: 深入理解JVM 透过JVM看Exception本质 历史篇:Java虚拟机家族考 推荐群组: 高级语言虚拟机               更多相关推荐 编程综合 (Disclaime

[Python]HTML/XML解析器Beautiful Soup

[简介] Beautiful Soup是一个可以从HTML或XML文件中提取数据的Python库.即HTML/XMLX的解析器. 它可以很好的处理不规范标记并生成剖析树(parse tree). 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作.它可以大大节省你的编程时间. [安装] 下载地址:点击打开链接 Linux平台安装: 如果你用的是新版的Debain或ubuntu,那么可以通过系统的软件包管理来安装: $ apt-get install Python-bs4 B

lua标签解析器

lua 标签解析器 概述 一个类xml标签解析函数,将标签解析成Lua中的表结构它可以用来解析简单xml结构,可以作为RichLabel控件的字符串解析组件(其实它现在就是这么用的;-)) 原理 使用lua的模式匹配, 使用了模式串%b<>%b用来匹配对称的字符.常写为 %bxy,x和y是任意两个不同的字符. x作为匹配的开始,y作为匹配的结束.比如,%b<> 匹配以 < 开始,以 > 结束的字符串 要解析的字符串 hello world <div>hell

如何实现一个Java Class 解析器

原文出处: tinylcy 最近在写一个私人项目,名字叫做ClassAnalyzer,ClassAnalyzer的目的是能让我们对Java Class文件的设计与结构能够有一个深入的理解.主体框架与基本功能已经完成,还有一些细节功能日后再增加.实际上JDK已经提供了命令行工具javap来反编译Class文件,但本篇文章将阐明我实现解析器的思路. Class文件 作为类或者接口信息的载体,每个Class文件都完整的定义了一个类.为了使Java程序可以"编写一次,处处运行",Java虚拟机

springmvc 前段控制器 处理器映射器 处理器适配器 视图视图解析器 配置

1. 前段控制器 新建项目在web.xml中配置前段控制器 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</pa

使用Scala基于词法单元的解析器定制EBNF范式文法解析

一.前言 近期在做Oracle迁移到Spark平台的项目上遇到了一些平台公式翻译为SparkSQL(on Hive)的需求,而Spark采用亲妈语言Scala进行开发.分析过大概需求过后,拟使用编译原理中的EBNF范式模式,进行基于词法的文法解析.于是拟采用传统的正则词法解析到EBNF文法解析的套路来实现,直到发现了StandardTokenParsers这个Scala基于词法单元的解析器类. 二.平台公式及翻译后的SparkSQL 平台公式的样子如下所示: 1 if(XX1_m001[D003

springmvc 解析器无法映射controller 配置的URL

搭建springmvc时,配置文件一切正常,项目运行成功,却无法响应http请求,查看log是因为没有对用url的controller,首先检查controller有没有被实例化,后来发现没有,因为没有引入spring-bean的相关包,好吧粗心....  But 引入后,还是同样的错误,找来找去毫无破绽啊,尼玛找度娘.....最后发现: <mvc:resources mapping="/images/**" location="/WEB-INF/images/&quo

Spring映射器、适配器、解析器

1 springmvc的映射器和适配器 1.1springmvc的映射器 根据客户端请求的url,找到处理本次请求的handler(处理器),将url和controller关联起来 1.2springmvc的适配器 对映射器查找到的controller中的方法进行调用. 第一种:Controller适配 第二种:HttpRequestHandler适配 第三种:注解适配 不同的处理器,对应不同的适配器,但是所有适配器最终都返回ModelAndView对象,springmvc通过对ModelAnd

SpringMVC中视图解析器

视图解析器:固定写法直接coppy就行 1.dispatcherServlet-servlet.xml中添加 <!-- 视图解析器InternalResourceViewResolver --> <!-- 对转向页面的路径解析.prefix:前缀, suffix:后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <pr