Dapatkan AST Boleh Dibaca Manusia daripada Kod C
Dalam bidang pembangunan perisian C, ia boleh memberi manfaat untuk mempunyai perwakilan yang boleh dibaca manusia Pokok Sintaks Abstrak (AST) sebuah program. AST menyediakan pandangan berstruktur bagi sintaks program, membolehkan pemahaman dan analisis yang lebih mudah.
Menghuraikan Kod C
Untuk mendapatkan AST daripada kod C, beberapa alatan tersedia. Satu pilihan yang ketara ialah pengkompil Clang. Clang menyediakan ciri yang dipanggil "-emit-llvm", yang boleh menjana AST dalam format yang boleh dibaca manusia. Walau bagaimanapun, ciri ini telah ditamatkan dan dialih keluar daripada versi terbaru Clang.
Alat Alternatif
Alat alternatif yang boleh menjana AST daripada kod C ialah DMS Software Reengineering Kit alat. DMS menyediakan penghurai C komprehensif yang menyokong piawaian C moden, termasuk C 11 dan C 17.
Pendekatan DMS
Untuk menggunakan DMS untuk mendapatkan AST daripada kod C, anda boleh mengikuti langkah berikut:
run ..\DomainParser ++AST "<path_to_C++_file>"
Ganti
Contoh
Pertimbangkan program Fibonacci ringkas berikut dalam C :
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; }
Menjalankan DMS pada program ini akan menghasilkan AST berikut:
(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 ini memberikan gambaran terperinci tentang struktur dan semantik program, menjadikannya lebih mudah untuk memahami dan menganalisis tingkah laku program.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Pokok Sintaks Abstrak (AST) Boleh Dibaca Manusia daripada Kod C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!