我是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;
根据上述声明格式。
请提供宝贵的意见/建议。
答案 0 :(得分:0)
有C/C++ tokenizer使用LPEG语法将C / C ++文件转换为令牌数组,并且还有代码用于将令牌数组打印为 HTML。
ltcl,可以使用Tcl解释器与Lua的简单绑定来集成它。