나는이 같은 eclipse-Indigo를 사용하여 블록 주석을 생성하려고합니다. 저는 C++ 프로그래머입니다.자동으로 이클립스 인디고 메소드 블록 주석을 생성하는 방법은 무엇입니까?
/**
*
* @param bar
* @return
*/
int foo(int bar);
어떻게하면 좋을까요?
나는이 같은 eclipse-Indigo를 사용하여 블록 주석을 생성하려고합니다. 저는 C++ 프로그래머입니다.자동으로 이클립스 인디고 메소드 블록 주석을 생성하는 방법은 무엇입니까?
/**
*
* @param bar
* @return
*/
int foo(int bar);
어떻게하면 좋을까요?
입력이 꽤 정적 인 경우 작동 할 간단한 렉서를 작성할 수 있으며 간단한 문자열 munge가 필요합니다. 문자열에는 .substr() 및 .find()를 사용하여 많은 훌륭한 편집 기능이 있습니다. 당신이해야 할 일은 perens가 어디에 있는지 파악하는 것뿐입니다. 당신은 당신이 FAR 쉽게 (공백을 건너 표준 : skipws를 사용하는 것을 잊지 마세요 만드는 이제 stringstream으로이 과정을 선택적으로 할 수 있습니다 알고 있습니다.
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 개만 지원합니다. 내 구조체의 키워드. 당신은 전에 모든 공간을 검색하는 잠시 사용하여 더 많은 것을 지원할 수 있습니다. 다음, 쉼표 또는) 오른쪽 peren 안쪽 while 루프에 문자열의 변수 번호를 구조체 내부에 추가하십시오. - 아니요, 그냥 vector<vector<string> >
으로 바꾸십시오. 또는 하나의 벡터 만 사용하고 모든 기능을 수행 한 후에 va.clear()
을 수행하십시오.
방금 eclipse 태그를 발견했습니다. 나는 일식에 대해 많이 모른다. 나는 그것을 작동시킬 수조차 없다. 어떤 프로그램.
C++을 C++ 프로그램에서 생성하는 방법은 무엇입니까? C + + 파서와 렉서, 본질적으로 컴파일러를 쓰는 것이 필요하지 않습니까? 함수의 구문은 매우 다양합니다. freind 함수는 클래스 멤버가 될 수 있으므로 classname ::, –
은 네임 스페이스의 일부가 될 수 있으므로 std ::가 될 수 있습니다. 또는 네임 스페이스가 무엇이든 상관없이 선택적으로 const를 반환하고 포인터를 반환 할 수 있습니다. 무효, 반환 void 포인터, 반환 함수 포인터 (뻔뻔스러운, 무슨 생각), 인수가 참조 또는하지 가질 수 있습니다 const 또는 그렇지 않으면 내가 언급 한 모든 이전 기능 등 당신이 기능의 정확한 형식을 알고 있다면 당신에게 좋고, 좋은 점이 있다면, 렉서를 쓰는 것이 상대적으로 쉽습니다. –
실수로 죄송합니다. 지금 내가 무슨 뜻인지 이해할 수 있다고 생각합니다. – user881703