컴 파일 러 DIY 의 - 영문 텍스트 의 단어 수, 문자 수, 줄 수 를 통계 합 니 다.

1758 단어 컴 파일 러 DIY
크 크, 이 장 은 컴 파 일 러 를 연재 하 는 DIY 인 것 같 지만 DIY 를 하기 전에 플 렉 스 로 손 을 연습 하 는 것 이 뒤의 이해 에 도움 이 된다.
워드 에서 저 는 단어 통계 기능 을 자주 보 았 습 니 다. 그러면 어떻게 이 루어 졌 습 니까? 물론 첫 번 째 생각 은 전체 텍스트 를 옮 겨 다 니 며 줄 바 꿈 과 빈 칸 에 따라 문자열 을 분석 하 는 것 입 니 다. 그러면 이것 은 가능 합 니 다.그러나 간단하게 할 수 있 습 니까? 사실 텍스트 에 대해 단어 분석 을 하면 모두 가 어떻게 하 는 지 알 고 있 습 니 다. 어 려 운 부분 은 코드 의 실현 일 수 있 습 니 다. 그러면 지금 정규 표현 식 으로 이 루어 진다 면 모든 문 제 는 Over 입 니 다.
환경: ubuntu (물론 flex 의 windows 와 mac 를 설치 해도 됩 니 다)
원본 코드:
%{
unsigned long chars=0;
unsigned long words=0;
unsigned long lines=0;
%}

%%
[a-zA-Z]+               {words++;chars+=strlen(yytext);}
[a-z\-A-z]+             {words++;chars+=strlen(yytext);}
[0-9]+                  {words++;chars+=strlen(yytext);}
[.|,|\b| |\t|\r]        {chars++;}
[
] {lines++;chars++;} %% int main() { char filename[100]; printf(" 、 、 。
"); printf(" :"); scanf("%s",filename); yyin=fopen(filename,"r"); printf(" ...
"); printf(" :"); yylex(); printf("
:%ld
", chars); printf(" :%ld
", words); printf(" :%ld
", lines); return 1; } int yywrap() { return 1; }

그러면 첫 번 째 정규 식 [a - zA - Z] +  대소 문자 로 구 성 된 단어 하나 이상 을 나타 낸다.
[a-z\-A-z]+             특별한 중간 에 '-' 라 는 단 어 를 붙 이 는 거 예요.
[0-9]+                 디지털 집합
[.|,|\b| |\t|\r]          특수 기호 집합
위 코드 를 작성 한 후에 flex 로 직접 컴 파일 하면 c 파일 을 얻 을 수 있 습 니 다. 이 어 C 파일 을 컴 파일 하여 바 이 너 리 코드 를 만 들 고 실행 하면 됩 니 다.
테스트 텍스트:
my name is te-name %%%
테스트 결과:
영문 파일 의 문자, 단어, 줄 수 를 통계 합 니 다.계산 할 파일 이름 을 입력 하 십시오: test. txt 통계 시작... 정의 되 지 않 은 문자:%%% 문자 수: 20 단어 수: 4 줄 수  :2

좋은 웹페이지 즐겨찾기