문제

일부 코드 분석 및 조작을 수행하는 취미 프로젝트에 대한 아이디어가 있습니다. 이 프로젝트에는 주어진 소스 파일의 콘크리트 및 추상 구문 트리가 모두 필요합니다. 또한 두 나무 사이의 양방향 참조가 도움이 될 것입니다. 나는 내 자신의 Lexer와 Parser를 구성하기 위해 문법을 전사하는 작업을 피하고 싶습니다.

콘크리트 또는 추상 구문 트리를 설명하기위한 표준 형식이 있습니까? 널리 사용되는 도구 체인이 이러한 형식으로 출력을 지원합니까?

특정 대상 프로그래밍 언어가 없습니다. 인기있는 사람은 프로토 타입을 위해 할 것이지만, Python, C#, JavaScript 또는 C/C ++ : 내가 잘 알고있는 것을 선호합니다.

도구 나 라이브러리를 통해 소스 파일을 실행하고 두 나무를 다시 얻을 수 있습니다. 이상적인 세상에서는이 도구를 사용자가 편집하고 오류에 견딜 수 있으므로 코드 에서이 도구를 실행하는 것이 실용적입니다. 다시 말하지만, 나는 단순히 프로토 타입을 개발하려고 노력하고 있으므로 이러한 요구 사항은 꽤 느슨합니다.

감사!

도움이 되었습니까?

해결책

~ 안에 우리의 계획 우리는 UML에서 AST 메타 모델을 정의하고 Antlr (Java)을 사용하여 모델을 채 웁니다. 또한 구문 분석 후 Antlr의 토큰 정보를 유지하지만 모델에서 수정 된 수정으로 기본 텍스트 파일을 아직 업데이트하려고 시도하지 않았습니다.

여기에는 끔찍한 오버 헤드 (Eclipse UML2/EMF와 같은 인프라에서)가 있지만, 우리의 목표는 모델 기반/구동 개발 (MDD, MDA)에 고급 도구를 사용하는 것이므로 각 레벨에서 사용하기로 결정했습니다. .

우리 학생들 중 한 명이 한 번 놀았다 고 생각합니다 OpenArchitectureWare Eclipse 기반 생성 된 편집기에서 구문 트리 (위의 UML 모델과 관련이 없음)로 다시 변경하여 자동으로 변경되었지만 이에 대한 세부 사항을 모릅니다.

당신은 또한보고 싶을 수도 있습니다 antlr 나무 문법.

다른 팁

연구 커뮤니티는 한 프로그램 분석 도구에서 다른 프로그램으로 정보를 이동할 때 그래프 교환이 옳은 일이라고 결정했습니다. 보다 http://www.gupro.de/gxl

보다 최근에, OMG는 추상 구문 트리를 교환하기위한 표준을 정의했습니다. 보다 http://www.omg.org/spec/astm/1.0/beta1/

이 문제는 계속해서 해결되는 것 같습니다. 수년에 걸쳐 6 개의 "도구 버스"제안이 모두 업계를 추월하지 않고 해결 한 수년 동안 제정 된 제안이 있습니다. 문제는 a) 어떤 종류의 중첩 표기법 (XML과 같은 LISP와 같은 괄약 , 그들은 둘 다 AST 노드의 의미에 대해 본질적으로 동의해야합니다. 그러나 대부분의 AST는 우연히 각 도구에서 사용하는 특정 문법/구문 분석 기술에서 파생되며, 도구간에 거의 항상 의견이 일치하지 않습니다. 그래서 저는 AST를 의미있게 교환하는 도구가 거의 없었습니다.

취미 일을하고 있다면 LISP와 같은 나무 인코딩을 고수 할 것입니다. 각 노드에는 다음과 같은 형식이 있습니다. (...) 생성하기 쉽고 읽기 쉽습니다.

나는 a 프로그램을 조작하는 전문 도구. AST를 인쇄 한 경우 위의 작업을 수행합니다. 대부분의 개별 AST는 실제로 볼 수 없기에는 너무 복잡하기 때문에 우리는 전체 AST를 거의 인쇄하지 않습니다. 우리의 도구는 다른 사람과 AST를 교환하지는 않지만 (위의 이유 참조 :) 메모리에 잘 구축하고 분석 이유 나 변환 이유를 위해 whizzy 일을 한 다음 삭제 한 다음 (어디서나 보낼 필요가 없습니다). 또는 나무에서 원래 언어 텍스트를 재생합니다. [후자는 반드시 또는 "예쁜 프린팅"기술이 필요하다는 것을 의미합니다.

특정 표준은 기대치이며, 더 일반적인 표준도 적절할 수 있습니다. Ira Baxter는 이미 언급했습니다 GXL, 그리고 RDF 적절한 온톨로지가 필요하고 구문보다 시맨틱을 지향하는 것도 추가 될 수 있습니다. 여전히 조사 옵션 일 수 있습니다.

특정 표준의 경우 IRA Baxter가 이미 언급했습니다 ASTM, 또 다른 것은 특정 종류의 프로그래밍 언어 (논리 언어)를 대상으로하지만 시맨틱/개념 그래프의 표준, 로 알려진 ISO -IIC 24707 2007.

그 자체로 표준이 아니라 그 문제에 대한 논문 : XML을 사용하여 휴대용 소스 코드 표현으로 향합니다.

나는 효과적으로 사용되는 표준을 모른다 (이 분야에서는 항상 집에서 만든 요리입니다). 나는이 주제에도 관심이 있습니다.

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