0

このようにeclipse-Indigoを使ってブロックコメントを生成したいです。私は C++ プログラマーです。

/**
 * 
 * @param bar
 * @return
 */
int foo(int bar);

どうすればこのようにできますか。

4

1 に答える 1

0

入力がほとんど静的である場合は、機能する単純化されたレクサーを記述できます。単純な文字列の変更が必要です。文字列には、.substr()と.find()を含む多くの優れた編集機能があります。あなたがしなければならないのは、perensがどこにあるかを理解することです。オプションでこれを文字列ストリームとして処理できることを知っています。これにより、このFARが簡単になります(空白をスキップするには、std ::skipwsを使用することを忘れないでください)。

http://www.cplusplus.com/reference/string/string/substr/

http://www.cplusplus.com/reference/string/string/find/

#include <vector>
#include <string>

typedef STRUCT arg_s {
string sVarArgDataType, sVarArg;
} arg_s ARG;
ARG a;
vector<ARG> va;
char line[65000];

filein.getline(line, 65000);
line[65000-1]='\0'; //force null termination if it hasn't happened
get line and store in string sline0
size_t firstSpacePos=sline.find(' ');
size_t nextSpacePos = sline.find(' ',firstSpacePos+1);
size_t prevCommaPos = string::npos;
size_t nextCommaPos = sline.find(',');
size_t openPerenPos=sline.find('(');
size_t closePerenPos=sline.find(");");
string sReturnDataType, sFuncName;
if (
    string::npos==firstSpacePos||
    string::npos==semicolonPos||
    string::npos==openPerenPos||
    string::npos==closePerenPos) {
    return false; //failure
}
while (string::npos != nextSpacePos) {
    if (string::npos != nextCommaPos) {
        //found another comma, a next argument. use next comma as a string terminator and prevCommaPos as an arg beginning.
        //assume all keywords are globs of text
        a.sVarArgDataType=sline.substr(prevCommaPos+1,nextSpacePos-(prevCommaPos+1));
        a.sVarArg=sline.substr(nextSpacePos+1,nextCommaPos-(nextSpacePos+1));
    } else {
        //didn't find another comma. use ) as a string terminator and prevCommaPos as an arg beginning.
        //assume all keywords are globs of text
        a.sVarArgDataType=sline.substr(prevCommaPos+1,nextSpacePos-(prevCommaPos+1));
        a.sVarArg=sline.substr(nextSpacePos+1,closePerenPos-(nextSpacePos+1));
    }
    va.push_back(a); //add structure to list
    //move indices to next argument
    nextCommaPos = sline.find(',', secondSpacePos+1);
    nextSpacePos = sline.find(' ', secondSpacePos+1);
}
int i;

fileout<<"/**
 * 
";
for (i=0; i < va.size(); i++) {
    fileout<<" * @param "<<va[i].sVarArg;
}
fileout<<"
 * @return
 */
"<<sReturnDataType<<" "<<sFuncName<<'(';
for (i=0; i < va.size(); i++) {
    fileout<<va[i].sArgDataType<<" "<<va[i].sVarArg;
    if (i != va.size()-1) {
        fileout<<", "; //don;t show a comma-space for the last item
    }
}

fileout<<");"<<std::endl;

これは、可変引数タイプを除いて、任意の数の引数を処理します。ただし、そのための独自の検出コードと、...と2キーワードの引数タイプを切り替えるifステートメントを挿入できます。ここでは、構造内で2つのキーワードのみをサポートしています。whileを使用して、次の前のすべてのスペースを検索することで、より多くのサポートをサポートできます。コンマまたは)whileループ内の右のperenは、vector<string>置換する構造体の内部に可変数の文字列を追加します。 vector<vector<string> >。または、1つのベクトルだけで、va.clear()すべての関数が実行された後に実行します。

日食タグに気づきました。日食についてはよくわかりません。私もそれを動作させることができません。いくつかのプログラム。

于 2012-04-30T08:37:19.407 に答える