[컴파일러개발]해쉬심벌테이블에 배열의 차원수를 넣고 싶습니다.

chenil의 이미지

지금 MFC로 컴파일러개발중에 있는데요

심벌 테이블 안에 이름, 형, 레벨, 상대주소, 차원수, 라인번호 등의 속성을 넣을 수 있다고 하던데요

다른건 넣겠는데 상대주소와 특히 배열의 차원수는 어떻게 프로그래밍 해야 될지 모르겠어요

아시는 분은 꼭 좀 글을 올려주셨으면 합니다.

즐거운 하루 보내세요~~~

죠커의 이미지

형과 차원수등의 정보는 AST 안에 넣어보시는 것이 어떨까요?

C#과 JAVA로 컴파일러를 만들고 있는데 되도록 심벌 테이벌은 간단하게 만들고 있습니다.

Rica의 이미지

학부 숙제로 C-like 언어의 컴파일러를 만든 적이 있습니다. 배열은 모두 1차원 배열만 있는 것으로 간주하고, 다차원 배열은 '배열을 원소로 갖는 배열' 로 만들어서, 타입의 정의를 간편하게 할 수 있었습니다.

참고가 되길 바랍니다.

class ArrayType : public Type
{
public:
	ArrayType( int length )
	{
		this->length = length;
		this->elementType = NULL; 
	}

	int		length;
	Type*	elementType;

	void SetElementType( Type* e );
	
	//TODO:타입체크 - 어레이 길이 > 0
	// 같은 타입 같은 길이의 Array인 경우에만 같은 타입임.
	
	virtual int		GetForm()						const { return ARRAY_TYPE; }
	virtual bool	IsSame( const Type& other )		const;
	virtual bool	CanConvertTo( const Type& to )	const;
	virtual string	ToString()						const;

	virtual int		GetSize()						const;
	virtual int		GetAlignedSize()				const;
		
	Type*	GetFinalType()		const;
	bool	HasValidLength()	const;
};