2012-05-21 1 views
7

저는 C# 추상 구문 트리 개발에 초보자 정보를 찾고 인터넷을 검색했지만 이미 '알고있는'사람들에 대한 정보 만 찾을 수 있습니다. 본인은 기간 업무 (LOB) 응용 프로그램 개발자이므로 이러한 주제가 머리로 쓰여지지만 내 교육을위한 것이므로 시간을 보내고 필요한 모든 개념을 배우게됩니다.추상 구문 트리 개발

일반적으로 코드 문자열에서 코드의 추상 표현을 개발하는 기술에 대해 배우고 싶습니다. 더 구체적으로, 나는이 AST를 사용하여 C# 구문 강조를 할 수 있기를 원합니다. (구문 강조 표시는 대서양 표준시를 필요로하지 않는다는 것을 알지만, 이것은 "컴파일러"수준의 기술을 배우는 좋은 기회 인 것 같습니다.)이 질문에 조금이라도 사과한다면 사과드립니다. 그밖에 어떻게 물어볼 지 모르겠습니다.

감사합니다.

+0

FWIW, 컴파일러에서 시작하기 좋은 곳을 원하면 용서는 (IMHO) 훌륭한 책입니다. http://en.wikipedia.org/wiki/Compilers:Principles,_Techniques,_and_Tools –

+0

@ James Manning : 고마워, 내가 알아낼거야! –

답변

12

먼저 구문 분석의 개념과 추상 구문 트리의 개념을 이해해야합니다. 이를 위해 우선 Wikipedia on abstract syntax trees에 문의하십시오.

추상 구문 트리가 구문 분석과 관련되어 있고 구문 분석 중에 어떻게 구성되는지 이해하려면 컴파일러 텍스트 북으로 시간을 할애해야합니다. 고전적인 참고 문헌은 Aho/Ullman/Sethi의 "Compilers"책이다 (웹에서 쉽게 찾을 수있다). 대답 Are there any "fun" ways to learn about Languages, Grammars, Parsing and Compilers?에 대한 SO 답변을 찾을 수 있습니다.

간단한 문법을 ​​위해 AST를 작성하는 방법을 이해하면 C#과 같은 것에주의를 돌릴 수 있습니다. 여기서 문제는 완전한 규모입니다. 그것은 20 가지 문법 규칙을 가진 장난감 언어로 놀 수있는 한가지입니다. 수백 또는 수천 가지 규칙의 문법을 사용하는 것도 또 다른 방법입니다. 경험이 적은 사람들은 큰 사람들이 어떻게 함께 모이는 지, 어떻게 함께 살 수 있는지 이해하기가 훨씬 쉽습니다.

아마도 자신의 C# 문법을 작성하거나 (C# 표준 문법을 구현하기를 원하지 않을 것입니다.); 그것의 꽤 많은 일. C# AST (Roslyn은 이미 언급되었지만 ANTLR에는 C# 파서가 있고 그 외에도 많은 것들이 있습니다)를 넘겨주는 도구를 사용할 수 있습니다.

구문 강조를 위해 AST를 사용할 수도 있습니다 (실제로는 슬레지 해머가있는 동물을 죽이는 것이지만). 대부분의 사람들이별로 생각하지 않는 것 (그러나 컴파일러 서적이 강조하는 것)은 AST를 마친 후에 일어나는 일입니다. 주로 그들은 스스로 유용하지 않습니다. 당신은 실제로 흥미로운 것을하기 위해 더 많은 기계류가 필요합니다. 반복해서 반복하지 않고 (같은 종류의 질문이 계속 표시됨) 자세한 내용은 Life After Parsing에 대한 내 토론을 참조하십시오.

+0

고마워요, 제가 찾고 있던 답변 유형입니다! –

+0

조금 늦었지만 [GOLD Parser] (http://goldparser.org/)를 보셨습니까? 이 프로그램을 사용하면 BNF 규칙을 사용하여 문법을 구성 할 수 있으며 gan은 구문 트리를 처리하거나 구문 분석 트리를 탐색하거나 코드를 생성 할 때 코드를 해석하기 위해 모든 언어로 스켈레톤 코드를 생성합니다. – Intrepid

+0

@ Mike Clarke : 나는 GOLD가 파싱 만한다고 생각했다. 실제로 파스 트리를 만듭니다. 웹 페이지 http://goldparser.org/doc/index.htm에서 볼 수있는 증거는 없습니다. –

1

Roslyn을 살펴보십시오. 나는 그것이 당신이 찾고있는 것일 수 있다고 생각합니다. 그것은 다른 많은 놀라운 것들 중에서 컴파일러 AST에 대한 액세스를 제공합니다! 그 너머

http://blogs.msdn.com/b/visualstudio/archive/2011/10/19/introducing-the-microsoft-roslyn-ctp.aspx

, 나는 컴파일러에 교과서를 제안한다.

+0

Roslyn은 * 추상 * 구문 트리의 좋은 예가 아니라고 생각합니다. 구문 트리에는 모든 세미콜론, 주석 및 공백이있어 매우 구체적인 구문 트리가됩니다. 그러나 구문 강조가 목표라면 Roslyn이 좋은 선택이 될 것입니다. – svick

+0

추천 할 수있는 특정 교과서는 무엇입니까? 나는 기성품 해결책을 정말로 찾고 있지 않다. 나는 내 자신을 발전 시켜서 자신을 교화하고자한다. –

2

당신은 아마 필 Trelford하여이 이야기를 살펴해야합니다

Write your own compiler in 24 hours

이 사람은 천재, 당신은 컴파일러에 대해 배울 해고 떠날 것이다. 5 살짜리가 이해하기에 문자 그대로 쉽게 설명합니다. 문제의 5 살짜리 아들은 그의 아들이기 때문에 아마 불공평 한 이점이 있지만 5 명은 5 명입니다.