어의 분석 에 관 한 간단 한 총 결
5453 단어 컴 파일 원리
void f(int *p)
{
X += 4:
Cal(X);
break;
}
컴 파일 러 는 x, cal 이 정의 하지 않 은 오 류 를 보고 하고 순환 하 는 오 류 를 찾 지 못 했 습 니 다. 이것 은 바로 문맥 과 관련 된 것 입 니 다. 현재 만 검사 하 는 것 이 아 닙 니 다.
따라서 의미 분석 이 완성 해 야 할 일 은 주어진 코드 에 대해 모든 의미 오 류 를 찾아내 는 것 이다. 만약 에 오류 가 발생 하면 명확 한 진단 정 보 를 프로그래머 에 게 피드백 하고 프로그래머 는 오류 정보 에 따라 오 류 를 고 쳐 야 한다.
의미 분석 기 는 하나의
입력 을 받 아들 입 니 다. 이 나 무 는 반드시 문법 이 정확 하고 또 하나의 입력 을 만족 시 킬 것 입 니 다. 바로 프로그램 언어의 합 법 적 인 규칙 (합 법 적 인 것 이 무엇 인지, 불법 인 것 이 무엇 인지 나타 내 는 것) 입 니 다. Yes 나 NO 를 출력 합 니 다. Yes 라면 중간 코드 (이 단계 가 지나 면 프로그램 은 어떠한 문법 과 의미 오류 도 포함 하지 말 아야 합 니 다) 가 생 겨 야 합 니 다. NO 라면.잘못된 메 시 지 를 드 려 야 합 니 다.어떻게 프로그램 언어의 의 미 를 정의 합 니까?
전통 적 으로 대부분의 프로 그래 밍 언어 는 자연 언어 로 프로그램 언어의 의 미 를 표현 한다. 예 를 들 어 '+' 연산 에 대해 좌우 조작 수 는 반드시 성형 수 여야 한다. 예 를 들 어 e1 + e2 는 문법 분석 에 있어 + 번 양쪽 조작 수 는 상관 하지 않 고 의미 분석 은 성형 수 라 는 자연 언어 가 우리 가 한 언어 를 배 우 는 데 필요 한 것 인지 확인 해 야 한다.프로 그래 밍 책
그러나 컴 파일 러 의 실현 자 는 반드시 언어 중의 의미 규정 에 대해 전면적 인 이 해 를 가 져 야 한다. 예 를 들 어 플러스 양쪽 은 부동 소수점 과 성형 수 일 수 있다.
그렇다면 어떻게 하면 정확 하고 효율적으로 실 현 될 수 있 을 까?
다음 문법 을 예 로 들 어 덧셈 좌우 양쪽 은 정수 일 수 밖 에 없다 고 정의 합 니 다.
E->N
| true
| false
| E + E
| E && E
형식 이 합 법 적 인 프로그램
3 + 4
False && true
형식 이 비합법적 인 프로그램
3 + true
True + false
이 언어 에 대한 의미 분석의 임 무 는 다음 과 같다. 주어진 표현 식 e 에 대해 함수 check (e) 를 써 서 표현 식 e 의 유형 을 되 돌려 주 는 것 이다.형식 이 합 법 적 이지 않 으 면 3 + 4 와 같은 표현 식 이 int 로 돌아 오 면 3 + true 표현 식 이 잘못 됩 니 다.
추상 구문 트 리 의 뒷 순 서 를 옮 겨 다 니 는 의사 코드 입 니 다.
enum type {int, bool};
enum type check (exp_t e)
{
switch(e->kind)
case exp_int: return int;
case exp_true: return true;
case exp_false: return false;
case exp_add: t1 = check(e->left);//
t2 = check(e->right);//
if(t1 != int || t2 != int) //
perror(“error”);
else return int;
case exp_and: t1 = check(e->left);
t2 = check(e->right);
if(t1 != bool || t2 != bool)
perror(“error”);
else return bool
}
기호 표
유형 검사 에 있어 서 매우 중요 한 데이터 구조 가 있 습 니 다. 기호 표 (key, value) 기호 표: 프로그램 에 있 는 변수 와 관련 된 정보 유형 역할 도 메 인 접근 제어 정보 (예 를 들 어 pubic, private 와 같은 파일 간 의 접근) 는 매우 효율 적 이 어야 합 니 다. 프로그램의 변수 규모 가 int x, bool y table x: int... y: bool...
기호 표 는 만 들 고 삽입 하 며 찾 는 인터페이스 기능 이 있어 야 한다. 구체 적 으로 선택 한 언어 와 관련 되 고 효율 적 이기 위해 해시 표 등 데이터 구 조 를 사용 하여 실현 할 수 있다. 기호 표 는 공간 을 절약 하기 위해 빨간색 과 검은색 트 리 등 균형 트 리 도 사용 할 수 있다.
의미 분석 에 나타 날 수 있 는 공통성 문제:
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
NFA 의 확정 화1. 이번 실험 을 통 해 정규 표현 식, NFA, DFA 와 그 가 식별 하 는 언어 에 대한 이 해 를 강화 합 니 다. 2. NFA 에서 DFA 로 의 전환 을 파악 하고 부분 집합 법 으로 NFA 를 DFA ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.