C 코드에서 사람이 읽을 수 있는 추상 구문 트리(AST)를 어떻게 얻을 수 있습니까?
Dec 18, 2024 pm 09:46 PMC 코드에서 사람이 읽을 수 있는 AST 가져오기
C 소프트웨어 개발 영역에서는 사람이 읽을 수 있는 표현을 갖는 것이 도움이 될 수 있습니다. 프로그램의 추상 구문 트리(AST). AST는 프로그램 구문에 대한 구조화된 보기를 제공하므로 더 쉽게 이해하고 분석할 수 있습니다.
C 코드 구문 분석
C 코드에서 AST를 얻으려면 여러 도구를 사용할 수 있습니다. 주목할만한 옵션 중 하나는 Clang 컴파일러입니다. Clang은 사람이 읽을 수 있는 형식으로 AST를 생성할 수 있는 "-emit-llvm"이라는 기능을 제공합니다. 그러나 이 기능은 더 이상 사용되지 않으며 최신 버전의 Clang에서 제거되었습니다.
대체 도구
C 코드에서 AST를 생성할 수 있는 대체 도구는 DMS 소프트웨어 리엔지니어링입니다. 툴킷. DMS는 C 11 및 C 17을 포함한 최신 C 표준을 지원하는 포괄적인 C 파서를 제공합니다.
DMS 접근 방식
DMS를 사용하여 C 코드에서 AST를 얻으려면, 다음 단계를 따르세요.
- 설치 DMS.
- 파싱하려는 코드가 포함된 C 파일을 만듭니다.
- 다음 명령을 실행합니다.
run ..\DomainParser ++AST "<path_to_C++_file>"
<path_to_C _file> C 파일의 실제 경로와 함께. DMS는 AST를 생성하고 이를 사람이 읽을 수 있는 형식으로 표시합니다.
예
C에서 다음과 같은 간단한 Fibonacci 프로그램을 생각해 보세요.
int fib(int n) { if ( n == 0 || n == 1 ) return n; int fib1 = 0; int fib2 = 1; int fib = 0; for ( int i = 2; i < n; i++ ) { fib = fib1 + fib2; fib1 = fib2; fib2 = fib; } return fib; }
이 프로그램에서 DMS를 실행하면 다음이 생성됩니다. AST:
(translation_unit (function_definition (function_head (simple_type_specifier ('int') ) (noptr_declarator (IDENTIFIER ['fib']) ('(') (parameter_declaration (simple_type_specifier ('int')) (IDENTIFIER ['n']) ) (')') (function_qualifiers) ) ) (compound_statement ('{' (statement_seq (statement_seq (statement_seq (statement_seq (selection_statement ('if') ('(') (logical_or_expression (equality_expression (IDENTIFIER ['n']) ('==') (INT_LITERAL [0]) ) ('||') (equality_expression (IDENTIFIER ['n']) ('==') (INT_LITERAL [1]) ) ) (')') (jump_statement ('return') (IDENTIFIER ['n']) ) ) (simple_declaration (simple_type_specifier $('int')) (init_declarator (IDENTIFIER ['fib1']) (initializer ('=') (INT_LITERAL [0]) ) ) ) ) (simple_declaration (simple_type_specifier $('int')) (init_declarator (IDENTIFIER ['fib2']) (initializer ('=') (INT_LITERAL [1]) ) ) ) ) (simple_declaration (simple_type_specifier $('int')) (init_declarator (IDENTIFIER ['fib']) (initializer ('=') (INT_LITERAL [0]) ) ) ) ) (iteration_statement ('for') ('(') (simple_declaration (simple_type_specifier $('int')) (init_declarator (IDENTIFIER ['i']) (initializer ('=') (INT_LITERAL [2]) ) ) ) (relational_expression (IDENTIFIER ['i']) ('<') (IDENTIFIER ['n']) ) (';' (postfix_expression (IDENTIFIER ['i']) ('++') ) ')' (compound_statement ('{' (statement_seq (statement_seq (expression_statement (assignment_expression (IDENTIFIER ['fib']) ('=') (additive_expression (IDENTIFIER ['fib1']) ('+') (IDENTIFIER ['fib2']) ) ) ) (expression_statement (assignment_expression (IDENTIFIER ['fib1']) ('=') (IDENTIFIER ['fib2']) ) ) ) (expression_statement (assignment_expression (IDENTIFIER ['fib2']) ('=') (IDENTIFIER ['fib']) ) ) ) }')) ) ) (jump_statement ('return') (IDENTIFIER ['fib']) ) }')) )
이 AST는 프로그램의 구조와 의미에 대한 자세한 표현을 제공하므로 프로그램의 동작을 더 쉽게 이해하고 분석할 수 있습니다.
위 내용은 C 코드에서 사람이 읽을 수 있는 추상 구문 트리(AST)를 어떻게 얻을 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

인기 기사

인기 기사

뜨거운 기사 태그

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











C 언어 함수에 의해 반환 된 값 유형은 무엇입니까? 반환 값을 결정하는 것은 무엇입니까?

STL (정렬, 찾기, 변환 등)의 알고리즘을 효율적으로 사용하려면 어떻게합니까?
