나는 mulit-line c-style 주석으로 토큰을 찾아서 주석에서 제거하기 위해 정규 표현식을 쓰려고 노력하고있다. 위의 소스 파일 내에서 발견 될 때마다>정규식을 사용하여 특수 토큰의 주석 처리를 제거합니다 (/ * */스타일 주석 내에있는 경우에만). perl one-liner에서
/*
* comments */
SpecialToken
/** comments
*/
-
/*
* comments
SpecialToken
* commetns
*/
예는 다음과 같은 변환을 수행 할 수.
내가 온라인을 발견 (http://ostermiller.org/findcomment.html) 일치/* */스타일의 주석에 대한 정규식 :
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
내 특별 토큰이 같은 것입니다 : n \ \ nSpecialToken는, 나는 다음을 얻을 수있는 이전 정규식 편집 :
perl -pi -e 'BEGIN{undef $/;} s/(\/\*(?:[^*]|[\r\n]|(?:\*+(?:[^*\/]|[\r\n])))*)\ncloneVerifierMarker_39843829489349873478202370870872077223082\n((?:[^*]|[\r\n]|(?:\*+(?:[^*\/]|[\r\n])))*\*+\/)/$1\*\/\ncloneVerifierMarker_39843829489349873478202370870872077223082\n\/\*$2/g' temp/file
01 : 다음 주석에서 제거 펄 한 줄을 만들어
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*cloneVerifierMarker_39843829489349873478202370870872077223082([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
주석에서 토큰을 제거한다는 점에서 효과가 있지만 특수 토큰이 주석에없는 경우도 선택하는 것으로 보입니다. 예를 들어
두 SpecialToken 일단 주석 (라인 34)의 내부에 일단 온 (라인 2342)의 외측에, 그것을 주입 가지고 다음 파일 I는 펄를 실행 한 후
한
특수 토큰이 성공적으로 코멘트에서 제거되지만 두 번째 인스턴스는 여전히 주석에없는 경우에도 처리된다 -liner 나는 다음과 같은 얻을.
나는이 :(발생하는 이유를 모르겠습니다.
이 나는 소스 코드의 변환에서 코드의 조각을 추적 할 필요가있다 내가 뭐하는 거지 이유. 이러한 변환은 주석을 제거 그렇다면 특수 토큰이 주석에서 제거되어야합니다.
도움을 주셔서 감사합니다 :).
기본 목표를 설명해주십시오. 토큰 만 남기고 모든 주석을 제거하는 것으로 충분합니까? – Borodin
RegEx가 과도한 것처럼 보입니다. 간단한 파서로이 작업을 수행 할 수 있습니다. – Kash
이것은 사소한 문제가 생각의 혼란으로 어색하게 만든 것처럼 보입니다. 닫기 투표 – Borodin