C 코드에서 사람이 읽을 수 있는 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를 얻으려면, 다음 단계를 따르세요.
run ..\DomainParser ++AST "<path_to_C++_file>"
예
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!