TCL:ANSI C ++声明语法的正则表达式

时间:2012-10-31 12:42:28

标签: tcl

我是TCL的初学者,并尝试编写一个TCL脚本来解析并打印出用于变量声明的C ++代码文件中的所有行。直到现在我能够检测并打印块{}内的所有语句。现在我明白Ansi C ++模块中的不同变量声明格式可能是:

int  x;
int  y=9;
int  x,y;
int  x,y=0;
int  x,y=0,c;
short const x=9;
int* x,y,c=null;
short const *x=NULL;
MyObj aobj();
MyObj aobj(x,y);
Myobj * a = dynamic_cast<A *>(b);
String x = "test";

我不确定我是否错过任何一个。

我正在做的是我分道:

if { [ string equal $lineType "statement" ] == 1 } {
        puts $lineValue
        set wordList [regexp -inline -all -- {\S+} $lineValue]
}

通过列表索引中的不同值验证以下格式:

qualifier varaiablename = value;
qualifier varaiablename;
qualifier varaiablename = value, variablename;

但我无法实现它。我相信TCL regexp将帮助我们实现这一目标。但是我无法得出我应该在这里使用/编码的regexp表达式的结论。

我想避免查找C ++定义的数据类型/关键字,但在字符串中查找特定格式,实际上是C ++语句:

qualifier type name;
qualifier type name, name2;
qualifier type name = value;

或者更确切地说

word word word;
word word word, word;
word word word = integer, word = word;

根据上述声明格式。

请提供宝贵的意见/建议。

1 个答案:

答案 0 :(得分:0)

C/C++ tokenizer使用LPEG语法将C / C ++文件转换为令牌数组,并且还有代码用于将令牌数组打印为 HTML。

ltcl,可以使用Tcl解释器与Lua的简单绑定来集成它。

相关问题