使用Understand将C++源代码处理为按空格分割的Token Stream(用Understand实现简单的词法分析功能)

这篇博客也就简单记录一下。这两天有这样一个需求,将一行C++源代码变成按空格输出的Token Stream,例如将这一行:

ros::init(argc, argv);

变成:

ros :: init ( argc , argv ) ; 

这个需求很简单,但是我尝试用了srcML和Antlr,都没有现成的实现,最后想到用Understand来实现,我之前也写过很多Understand相关的博客,有不了解的朋友可以简单翻翻。

最后直接贴一下代码,虽然还有很多格式、字符、换行上的小问题,但是基本功能就是这样了:

use Understand;
system( "und -quiet create -db temp.udb -languages c++ add " . $ARGV[0] . " analyze" );
$project_name=$ARGV[1];

( $db, $status ) = Understand::open("temp.udb");
die "Error status: ", $status, "\n" if $status;

$output_file=">Source2Plain".$project_name.".csv";


open( OUTFILE, $output_file );

@file_list=$db->ents("c file");
foreach $file (@file_list){
	$loc=$file->metric("CountLineCode");
	$lexer=$file->lexer();
	@lexemes=$lexer->lexemes();
	foreach $lexeme (@lexemes){
        $text_content=$lexeme->text();
        if($text_content eq " "){
            next;
        }         
		print OUTFILE $lexeme->text();
        print $lexeme->text();
		print OUTFILE " ";
        print "|";
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值