2011-04-11 9 views
1

C를 기반으로 맞춤형 (소규모) 프로그래밍 언어 (구문)를 만들려고합니다. apple이 [testClass runThis : true]와 같은 연산자를 사용하여 objective-c를 구현 한 방법을 이해하지 못합니다. 그 문법으로 난 내 사용자 정의 C 언어에 대한 사용자 정의 구문을 구현하는 것이 어떻게프로그래밍 언어 질문 만들기

당신은 Clang합니다 (C, C++과 LLVM 컴파일러의 Obj-C 프론트 엔드)와 Eero Programming Language 기반 새로운 언어를보고 할 수 있습니다

답변

5

Objective-C에서 LLVM으로 작성되었습니다. 두 프로젝트 모두 오픈 소스입니다.

2

먼저 파서와 렉서를 구현해야합니다. 한 가지 방법은 K & R의 "The C programming language"에서 C 구문과 문법을 가져와 Flex 및 Bison의 입력으로 사용하여 독립 실행 형 파서를 만드는 것입니다. 구문 적으로 유효한 C 프로그램을 구문 분석합니다. 그 후 원하는대로 조정할 수 있습니다.

그러나 이것은 사소한 프로젝트이기 때문에 컴파일러에 대해 많은 것을 가르쳐야합니다. 행운을 빕니다!

+0

objective-c와 같이 C를 기반으로하는 사용자 정의 구문 프로그래밍 언어를 만들려고합니다. – Daniel

1

[...] 내의 비트는 Smalltalk의 구문을 기반으로합니다.

자신의 언어를 디자인하는 것은 상당히 큰 주제입니다. context free grammars, lexical analysis, recursive descent parsers, LALR parsers에 익숙해 져야하며 아직 실행 코드를 생성하는 데 문제가 없습니다. 아직도 모든 것이 즐겁습니다. 실행 가능한 컴퓨터 언어를 설계하고 구현하는 것은 어렵지만 (IMO) 보람있는 연습입니다.

0

C++로 올라가면 DSEL (Domain-Specific Embedded Language)을 만들 수 있습니다. 어떤 문제를 해결할 지 모르지만 잘 설계된 DSEL은 자신의 언어를 설계하고 파서, 컴파일러 등을 만드는 것보다 훨씬 편리 할 수 ​​있습니다. C++ Template Metaprogramming

1

컴파일러를 작성해야합니다. 구문이 맞으면 C 코드로 직접 컴파일 할 수 있습니다. 그렇지 않으면 C 언어로 쉽게 변환되지 않는 언어의 비트를 위해 일종의 런타임을 작성해야합니다. C 기반의 작은 언어에 대해서 말한다면, 아마도 문제가 아닙니다. .

어떻게하면 되나요? 오. 남자.

writing a compiler 주제에 수십 권의 책, 기사, 자습서 등이 있습니다. 컴파일러의 개별적인 부분은 (적어도 순진하고 최적화되지 않은 컴파일러에서는) 특히 어렵지는 않지만 완전히 다른 방식으로 대립해야 할 많은 것들이 있습니다. 종종 서로 미묘하게 호환되지 않는 방식입니다. 최소한

당신이 원하는거야 (보통 flex 같은 또는 ANTLR 같은 컴파일러 스위트의 일부로서 자동화 된 도구를 통해) lexercode generator (자동 Bison 및 상기 ANTLR 같은 도구를 통해 일반적으로)를 parser (일반적으로 손으로 생성). 실제로 abstract syntax tree을 파서와 코드 생성기 사이에 붙여 다양한 optimizations을 구현하고 코드 생성을 단순화 할 수있는 공간을 제공하고자 할 것입니다.

연구 논문은 물론이 주제에 대해 lots of books을 사용할 수 있습니다. 재미있게 보내십시오.당신이하려는 것은 힘들지만 보상을받을 때 보람을 느낍니다.