문법 기호 속성 C.의 구현
-
12-12-2019 - |
문제
컴파일러 (어휘, 구문 및 의미 론적 분석기)를 구현해야합니다. 나는 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"
.
트리 워크가 유형 노드를 히트 할 때 실행할 속성 할당을 손으로 컴파일합니다.
제휴하지 않습니다 StackOverflow