내 자신의 C ++ 컴파일러가 템플릿, 중첩 클래스 등을 이해하게하려면 어떻게해야합니까? C ++의 강력한 기능은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/618859

문제

C와 같은 언어의 컴파일러를 작성하는 것은 우리 그룹의 대학 과제입니다. 물론 나는 사랑하는 C ++의 작은 부분을 구현할 것입니다.
정확한 작업은 절대적으로 어리석은 일이며 강사는 우리에게 자체적으로 컴파일 할 수 있어야한다고 말했습니다 (자체를 컴파일 할 수 있어야 함) - 그는 Boost 및 STL과 같은 라이브러리를 사용하지 않아야했습니다.
그는 또한 구현하기 어렵 기 때문에 템플릿을 사용하기를 원하지 않습니다.
문제는 - 5 월 말의 마감일 (올해) (올해)와 함께 템플릿뿐만 아니라 중첩을 구현하기 위해 5 월 말 마감일과 함께이 프로젝트를 스스로 작성하려고하는 것입니다. 구문 분석 수준에서 클래스, 네임 스페이스, 가상 함수 테이블?
추신 : 나는 C ++의 Noobie가 아닙니다

도움이 되었습니까?

해결책

C 컴파일러를 사용하십시오.

저를 믿으세요, 괜찮은 C 컴파일러를 구축하는 것이 어려운 일입니다. 특히 스스로 컴파일 할 것으로 예상되는 경우. 중첩 클래스 및 템플릿과 같은 모든 C ++ 기능을 지원하려고하면 미쳤습니다. 아마도 그룹이 할 수 있지만, 스스로 C 컴파일러가 충분하다고 생각합니다.

당신이 이것에 대해 죽었다면, 최소한 C와 같은 언어를 먼저 구현하십시오 (따라서 나눠 줄 것이 있습니다). 그 다음에 과시하는 데 집중하십시오.

다른 팁

"정확한 과제는 절대적으로 바보입니다" - 나는 당신이 그 판단을 공정하게 만들 수있는 입장에 있다고 생각하지 않습니다. 그 견해를 떨어 뜨리는 것이 좋습니다.

"나는이 프로젝트를 스스로 작성하려고한다" - 당신은 그것이 그룹 프로젝트라고 말했다. 당신은 당신의 그룹이 C ++로 변형되어야한다는 견해와 함께 가고 싶지 않다고 말하고 있습니까? 변경하는 것이 좋습니다.

C ++에 대해 얼마나 잘 알고 있는지는 중요하지 않습니다. 문법, 파서, 렉서스, asts 및 코드 생성에 대한 능력은 훨씬 더 독일어로 보입니다.

당신이나 과제에 대해 더 많이 알지 못하고, 나는 당신이 5 월 말까지 원래 과제를 수행하기 위해 잘하고 있다고 말할 것입니다. 3 개월 떨어져 있습니다. 과제를 고수하십시오. 어려움으로 당신을 놀라게 할 것입니다.

일찍 끝내고 팀에 대한 의무를 충족 시키면 C ++ 기능을 추가하기 위해 제작 된 내용을 자유롭게 수정해야한다고 말합니다.

C에 물체를 추가하는 데 3 개월 이상 Bjarne Stroustrup이 걸렸을 것입니다.

문제 없어요. 그리고 당신이 그것에있는 동안, 왜 운영 체제도 실행할 수있는 운영 체제를 구현하지 않겠습니까?

과제를 따르십시오. 컴파일러를 작성하십시오 C와 같은 언어! 내가하는 일은 선택입니다 서브 세트 C.

C 컴파일러를 작성하는 것은 많은 작업입니다. 몇 달 안에 그렇게 할 수 없습니다. C ++ 컴파일러를 작성하는 것은 완전히 미쳤습니다. 당신은 5 년 동안 그렇게 할 수 없을 것입니다.

나는 이미 언급 된 몇 가지 점을 강조하고 몇 가지 참조를하고 싶습니다.

1) 최적화없이 1989 년 ANSI C 표준을 고수하십시오.

2) 적절한지도, 좋은 조직 및 상당한 양의 노력으로 걱정하지 마십시오.

3) 읽으십시오 C 프로그래밍 언어 덮을 수있는 덮개.

4) 컴파일러 개발의 중요한 개념을 이해 용 책.

5) 살펴보십시오 LCC 코드뿐만 아니라 .

6) 살펴보십시오 Lex와 YACC (또는 플렉스와 들소)

7) C 컴파일러를 작성하는 것은 (자체 컴파일 할 수있는 지점까지) 프로그래머들 사이의 통과 의식입니다. 즐기십시오.

클래스 프로젝트의 경우 컴파일러를 컴파일 할 수 있어야한다고 생각하는 것은 약간 많은 일이라고 생각합니다. 나는 이것이 질문에서 멍청한 의미라고 생각합니다. 즉, C를 얼마나 많이 구현할 것인지 미리 파악하고 컴파일러를 구축 할 때이를 고수해야합니다. 따라서 STL 맵을 사용하지 않고 프리미티브를 사용하여 기호 테이블을 구축하십시오. 이것은 데이터 구조 과정에 유용 할 수 있지만 컴파일러 코스의 지점을 놓치게됩니다. 컴파일러와 관련된 문제를 이해하고 데이터 구조를 코딩하지 않고 사용할 데이터 구조를 쫓아 내야합니다.

컴파일러를 구축하는 것은 컴파일러를 잡으면 코드에 어떤 일이 발생하는지 실제로 이해하는 훌륭한 방법입니다. 대상 언어는 무엇입니까? 컴파일러를 가져 갔을 때, Sorta-Pascal에서 조립으로 갈 수있는 컴파일러를 구축하는 데 한 학기 동안 3 명이 걸렸습니다. 사소한 일이 아닙니다. 처음에는 단순 해 보이는 것들 중 하나이지만, 더 많이 들어갈수록 더 복잡한 일이 생깁니다.

시간 프레임 내에 C와 같은 언어를 완료 할 수 있어야합니다. 당신이 1 개 이상의 코스를 수강하고 있다고 가정하면, 그것은 당신이 제 시간에 할 수있는 일입니다. C ++도 가능하지만 더 많은 시간을 더할 수 있습니다. C ++ 템플릿/가상 기능을 수행하기 위해 expecing은 자신을 과도하게 예상하고 있으며 모두 할당에 실패 할 수 있습니다. 따라서 AC 서브 세트 컴파일러를 사용하는 것이 좋습니다. QA에 걸리는 시간도 고려해야합니다. 철저한 QA 자체가 되려면 즐거운 시간이 걸릴 것입니다.

네임 스페이스 또는 중첩 된 클라스, 가상 함수는 구문 수준에 매우 간단하며 파서에 대한 하나 또는 두 개의 규칙에 불과합니다. 기능 / 클래스를 선택할 때 더 높은 레벨에서 훨씬 더 복잡합니다 (네임 스페이스 사이의 이름 섀도 잉, 모호한 이름 등) 또는 바이트 코드 / 실행 AST로 컴파일 할 때. 따라서 - 당신은 이것을 쓸 수 있지만, 필요하지 않은 경우, 그것을 건너 뛰고, 기능적 모델 만 작성하십시오.

코드 생성이있는 완전한 컴파일러에 대해 이야기하고 있다면 잊어 버리십시오. 사물의 어휘 및 구문 분석 측면을 수행하려는 경우, 어떤 형태의 템플릿이 사용하는 컴파일러 빌딩 도구에 따라 시간 프레임에서 가능할 수 있습니다.

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