문제

컴파일러 (어휘, 구문 및 의미 론적 분석기)를 구현해야합니다. 나는 Flex ++에서 이미 어휘를 구현하고, 손에서 구문 (재귀 적 강도), 그리고 나는 시맨틱 (기존 파서에 시맨틱 규칙 추가)을 알고 있습니다. 내 질문은 - 속성을 어떻게 구현할 수 있습니까? 예를 들어, 생산 :

TYPE -> integer
.

시맨틱 규칙을 추가해야합니다.

TYPE.type = integer
.

그래서 여기서 모든 문법 기호에 대해 유형 등에 대해 몇 가지 구조를 만들어야합니다. 그렇다면 해당 구조를 어떻게 구현합니까?각 문법 기호에 대해 일부 구조체를 만들어야하며 파일의 범위를 위해 글로벌 일 필요가 있습니까?

p.s.어쩌면 최상의 컴파일러 구현이 아니며, 그것은 단지 할당 요구 사항입니다.

도움이 되었습니까?

해결책

각 터미널에 대한 유형 (일반적으로 구조체)을 정의하고 해당 언어로 비 터미널에 대한 유형 (일반적으로 구조체)을 정의하면 가장 쉽습니다.그런 다음 (비) 단자의 각 사용은 유형에 액세스 할 수 있으며, 각각의 속성의 각 할당은 (비) 단자와 관련된 구조의 해당 슬롯에 대해 이동합니다.

문법 토큰 이후에 구현 구조의 이름을 지정하는 것이 좋습니다.따라서 T에 대한 속성 구조의 유형은 "T_Attributes {...}"

입니다.

예를 들어 "type"은 T_Attributes의 슬롯이 될 것입니다.아마 당신이 추상에 쓰기 위해 무엇을 의미하는지 아마

TYPE -> 'integer' ;  -- 'integer is a keyword'
TYPE.type = "int";   -- the type of an 'integer' is "int"
.

트리 워크가 유형 노드를 히트 할 때 실행할 속성 할당을 손으로 컴파일합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top