C\#품사 분석 기의 품사 분석 사용 에 대한 상세 한 설명

4366 단어 C#품사 분석 기
비록 문장의 제목 은 어법 분석 이지 만 우선 번역 원리 에서 말 해 야 한다.번역 원 리 는 많은 사람들 이 들 어 본 적 이 있 을 것 이다.비록 얼마나 잘 알 고 있 는 것 은 아니 지만.
쉽게 말 하면 컴 파일 원 리 는 컴 파일 을 어떻게 하 는 지 연구 하 는 것 이다.즉,코드(*.cs 파일)에서 컴퓨터 가 실행 할 수 있 는 프로그램(*.exe 파일)으로 어떻게 전환 하 는 지 연구 하 는 것 이다.물론 자바 스 크 립 트 는 실행 을 설명 하 는 언어 도 있 습 니 다.코드 는 직접 실 행 됩 니 다.실행 가능 한 프로그램 을 만 들 필요 가 없습니다.
컴 파일 과정 은 매우 복잡 하 다.그것 은 여러 절차 와 관련 되 어(Compilers:Principles,Techniques and)를 직접 가 져 간다. Tools,홍 룡 서)의 그림 을 보면:

그림 1 컴 파일 러 의 각 절 차 는 사실 내 가 책 에 있 는 그림 을 종합 한 후에 그린 것 이다.
여기 서 7 단계(뒤의 최적화 절 차 는 선택 할 수 있 는 것)를 제시 했다.그 중에서 앞의 4 단 계 는 분석 부분(전단 front end 라 고도 함)이 고 소스 프로그램 을 여러 구성 요소 로 분해 하고 이런 요소 에 문법 구 조 를 더 해 마지막 으로 정 보 를 기호 표(symbol table)에 저장 하 는 것 이다.다음 세 단 계 는 종합 부분(백 엔 드 백 엔 드 가 되 기도 한다)으로 중간 표시 와 기호 표 의 정보 구조 에 따라 기대 하 는 목표 프로그램 이다.
컴 파 일 러 를 이렇게 많은 절차 로 나 누 면 그 장점 은 모든 절 차 를 더욱 간단하게 하고 컴 파 일 러 를 더욱 쉽게 설계 할 수 있 으 며 기 존의 도 구 를 많이 이용 할 수 있다 는 것 이다.예 를 들 어 어법 분석 기 는 Lex 나 Flex 로 생 성 할 수 있 고 문법 분석 기 는 Yacc 나 Bison 으로 생 성 할 수 있 으 며 인 코딩 작업 을 많이 하지 않 아 도 문법 트 리 를 얻 을 수 있다.앞부분 의 일 도 거의 완성 되 지 않 았 다.그리고 백 엔 드 에 대해 서도 기 존의 기술 을 사용 할 수 있다.예 를 들 어 기 존의 가상 컴퓨터(CLR 또는 자바,해당 하 는 IL 로 번역 하면 된다).
이 시리즈 의 글 은 번역 원리 의 첫 번 째 단계 인 문법 분석 을 말한다.대부분의 알고리즘 과 이론 은 에서 나 왔 고 나머지 부분 은 스스로 만 들 었 거나 Flex 의 실현 을 참고 했다.
나 는 세부 적 인 실현 을 포함 하여 품사 분석 기의 작성 과정 을 최대한 완전 하 게 소개 할 것 이다.물론 현 재 는 정규 표현 식 정의 에 따라 품사 분석 을 할 수 있 는 대상 을 얻 을 수 있 을 뿐 Flex 처럼 품사 정의 파일 에 따라 품사 분석 기 소스 코드 를 직접 만 들 려 면 아직 해 야 할 일이 많 습 니 다.단기 적 으로 해결 할 수 있 는 것 이 아 닙 니 다.
이 글 은 시리즈 의 첫 번 째 편 으로서 품사 분석 을 종합 적 으로 개술 하여 그 중에서 사용 하 는 기술 과 대체적인 절 차 를 소개 할 것 이다.문법 분석
품사 분석(lexical analysis)이나 스 캔(scanning)은 컴 파일 러 의 첫 번 째 단계 이다.어법 분석 기 는 원본 프로그램 을 구성 하 는 문자 흐름 을 읽 고 의미 있 는 어소(lexeme)의 서열 로 구성 하고 모든 어소 에 어법 단위(token)를 출력 합 니 다.
쉽게 말 하면 품사 분석 은 소스 프로그램(긴 문자열 이 라 고 볼 수 있 습 니 다)을 읽 고'자 르 기'를 작은 단락(단락 마다 하나의 품사 단원 token)으로 하 는 것 입 니 다.각 단원 은 구체 적 인 의 미 를 가지 고 있 습 니 다.예 를 들 어 특정한 키 워드 를 나타 내 거나 하나의 숫자 를 대표 합 니 다.이 어법 단원 이 원본 프로그램 에 대응 하 는 텍스트 를'어소'라 고 부른다.
계산기 로 예 를 들 면 12+34*9 이'원본 프로그램'의 문법 분석 과정 은 다음 과 같다.

그림 2 산식 의 어법 분석 과정
컴퓨터 에 의미 가 없 는 문자열 은 문법 분석 을 통 해 약간 의미 있 는 Token 흐름 을 얻 었 다.digit 는 이 어법 단원 이 숫자 에 대응 하 는 것 을 나타 내 고 operator 는 조작 자 를 나타 내 며 뒤에 해당 하 는 숫자 와 기호(분홍색 배경)가 바로 어소 이다.이 동시에 프로그램 에서 불필요 한 공백,주석 도 품사 분석 기 에 의 해 걸 러 낼 수 있다.그러면 그 후의 문법 분석 등 절 차 를 처리 하기 가 훨씬 쉽다.
실제 프로그램 에서 품사 단원 은 이것 이 어떤 품사 단원 인지 매 거 나 숫자 로 표시 한다.나의 Token.cs 정 의 는 다음 과 같다.
안에 있 는 Index 와 Text 속성 은 더 이상 설명 할 필요 가 없습니다.Start 와 End 는 원본 파일 에서 위 치 를 정 하 는 데 사 용 됩 니 다(색인,줄 수,열 수).Value 는 일부 값 을 전달 하 는 데 편리 하도록 설정 되 어 있 습 니 다.
2.어소 를 어떻게 묘사 합 니까?
이제 품사 분석 이 품사 소 를 분리 할 수 있다 는 것 을 알 게 되 었 다.그러면 품사 소 는 어떻게 묘사 합 니까?아니면 왜 12,+34 는 모두 어소 이 고 1,2+3,4 는 어소 가 아 닙 니까?이 건 패턴 이 필요 해.
패턴(pattern)은 하나의 품사 단원 의 어소 가 가 질 수 있 는 형식 을 묘사 했다.
즉,저 는 digit 모델 을'하나 이상 의 숫자 로 구 성 된 서열'이 라 고 정 의 했 고 operator 모델 과'단일+또는*문자'라 고 정 의 했 습 니 다.품사 분석 기 는 12 가 하나의 어소 이 고 2+3 은 어소 가 아니 라 는 것 을 알 았 습 니 다.
현재 모드 는 정규 표현 식(regular expression)으로 표 시 됩 니 다.여기 서 정규 표현 식 이란 일반적인 정규 표현 식(예 를 들 어 System.Text.RegularExpressions.Regex 류)과 형식 이 똑 같 지만 기능 은 더욱 제한 되 어 있 습 니 다.그룹,인용,교체 능력 이 없 는 문자열 의 일치 능력 만 포함 되 어 있 습 니 다.간단 한 예 를 들 어 a+이 정규 표현 식 은'하나 이상 의 문자 a 로 구 성 된 서열'을 나타 낸다.정규 표현 식 에 대한 더 자세 한 정 보 는 다음 글 에 열거 하 겠 습 니 다.물론 System.Text.RegularExpressions.Regex 를 참고 하 셔 도 됩 니 다.
이 시리즈 다음 글 에서 제시 한 정규 표현 식 은 문자열 만 일치 하 는 정규 표현 식 을 말 합 니 다.System.Text.RegularExpressions.Regex 와 혼동 하지 않도록 주의 하 십시오.
3.품사 분석 기 를 어떻게 구성 합 니까?
어소 의 묘 사 를 마치 면 어소 의 묘사 에 따라 어법 분석 기 를 어떻게 구성 하 는 지 알 수 있다.대체적인 절 차 는 다음 과 같다.

그림 3 구조 어법 분석 기
위의 그림 을 보면 패턴 의 정규 표현 식 을 정 의 했 고 NFA 변환,DFA 변환 과 DFA 화 를 거 쳐 변환 표를 얻 었 다.이 변환 표 에 고정된 DFA 시 뮬 레이 터 를 더 하면 어법 분석 기 가 구성 된다.입력 버퍼 에서 문 자 를 계속 읽 고 자동 동 기 를 이용 하여 어 소 를 식별 하고 출력 합 니 다.어법 분석의 정 수 는 이 전환 표를 어떻게 얻 느 냐 라 고 할 수 있다.
이렇게 많은 말 을 했 으 니 품사 분석 은 간단하게 소 개 된 셈 이다.다음 편 부터 어떻게 한 걸음 한 걸음 완전한 품사 분석 기 를 실현 하 는 지 하 는 것 이다.

좋은 웹페이지 즐겨찾기