2011-08-02 2 views
0
.h .h.cpp 파일을 구문 분석 중이며 모든 비 - 헝가리 표기된 변수Hungarian equivalents로 바꾸거나 찾아야합니다. "아, 왜?" 물어? 제 고용주는 헝가리 표기법을 요구합니다. "

헝가리어 표기법을 추가하는 정규식

이제 ints를 다루겠습니다.

이 중 하나라도 주어진 경우 ...

int row;  // no hungarian prefix 
int nrow(9); // incorrect capitalization 
int number; // hmm... 
int nnumber = getValue(); // uh oh! 

int nRow; 
int nRow(9); // obviously ctor args and assignments shouldn't change 
int nNumber; 
int nNumber = getValue(); 

에 대한 단일 단선 호출을 이상적으로 촬영하고 있습니다.

추가 과제 인 경우 누군가가 int을 사용하여 "유형 검사"이후에이 변수의 모든 인스턴스를 변경할 수 있으면 어떤 브라우니 포인트를 얻을 수 있습니다.

다음은 지금까지 내가 가지고있는 것입니다 :

s/(int\s+)(?!n)(\w+)/$1n\u$2/g; 

이것은 int nrowint number과 같은 것은 아닙니다.

미리 감사드립니다!

+4

대신 새로운 고용주를 추천 할 수 있습니까? –

+3

헝가리 표기법을 사용하는 방법이 아닙니다. 원래의 백서는 다음과 같습니다. http://msdn.microsoft.com/en-us/library/Aa260976 및 여기에 대한 joelonsoftware 게시물 : http://www.joelonsoftware.com/articles/Wrong.html – IronMensan

+0

@ IronMansan 훌륭한 기사 ! 내 북마크로 곧장 간다. – SJuan76

답변

8

더 명시 적으로 제

, 당신은 정규식을 사용하여 프로그램을 컴파일하기 위해 노력하고 있습니다. This does not work that way.

예를 들어, 한 줄의 함수 매개 변수를 이미 잊었으며 사용자 정의 유형 (struct, enum)을 구문 분석 할 수 없습니다. .cpp가 C++에서 제안하는 클래스를 제안한다는 것은 말할 것도 없습니다.

또한 메소드/함수/인라인 주석은 어떻게됩니까?

필자의 조언은 문법 컴파일러의 어딘가에서 찾아내어 C++ 문법을 전달하므로 모든 정의에 대해 파일에 기록 된 값과 유형을 얻을 수 있습니다. 그럼 당신은 그것으로 정규식 재미를 가질 수 있습니다. 나중에 각 변수를 자동으로 대체하기 위해 각 변수를 사용할 때마다 작성하려고 할 수도 있습니다.

그러나 훨씬 더 복잡한 단순한 정규식이지만 그 간단한 정규식은 결국 코드를 ​​수동으로 변경하게 될 것입니다.

긍정적 인 점은 상사에게 비용이 얼마나 들지는지에 관해서는 아마 더 잘 생각할 것입니다.

+0

"정규식을 사용하여 프로그램을 컴파일하려하지 않습니다." 나는 네가 어디에서 왔는지 전혀 모른다. 사실 나는 내가 끝난 후에 컴파일하는 것을 계획하지 않지만 적어도 돌아가서 구문을 빠르게 변경하고 좋게 만들 수 있습니다. – kevlar1818

+5

예, 컴파일하려고하지만 아직 모릅니다. 30 행의 id 변수가 10 행의 nId 또는 20 행의 sId인지 알아 보려면 어떤 메소드/함수인지 알아야합니다. 또한 프로그램 정의 유형, 클래스 문제가 있습니다. 프로그램을 구문 분석하고 기호 테이블을 작성해야합니다 ... 기계 코드를 생성했거나 수정 된 소스 코드가 적합하지 않습니다. – SJuan76