From 4cc76cc6345e2cbee6a253b1e94c0a529ae00eaf Mon Sep 17 00:00:00 2001 From: hantianfeng Date: Fri, 6 Sep 2024 14:22:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20iter=20Attribute?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cases/iter.py | 33 +++++++++++++++++++++++++++++++++ src/Python/Translator.php | 2 ++ src/functions.php | 8 ++++---- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 cases/iter.py diff --git a/cases/iter.py b/cases/iter.py new file mode 100644 index 00000000..d85ced44 --- /dev/null +++ b/cases/iter.py @@ -0,0 +1,33 @@ +from pycparser import CParser, parse_file, c_ast + +# 解析 C 代码并打印函数声明及定义 +def extract_functions_from_file(filename): + # 解析 C 文件 + ast = parse_file(filename, use_cpp=True) + + # 用于存储函数声明和实现 + function_declarations = [] + function_definitions = [] + + # 遍历 AST + for node in ast.ext: + # 检查节点类型 + if isinstance(node, c_ast.FuncDef): + # 如果是函数定义,保存定义 + function_definitions.append(node.decl.name) + elif isinstance(node, c_ast.Decl): + # 如果是函数声明 + if isinstance(node.type, c_ast.FuncType): + function_declarations.append(node.name) + + # 输出结果 + print("Function Declarations:") + for decl in function_declarations: + print(decl) + + print("\nFunction Definitions:") + for defi in function_definitions: + print(defi) + +# 调用函数,解析指定文件 +extract_functions_from_file('your_file.c') # 替换为你的 C 源文件 diff --git a/src/Python/Translator.php b/src/Python/Translator.php index 61b7e9d1..bc56aecb 100644 --- a/src/Python/Translator.php +++ b/src/Python/Translator.php @@ -455,6 +455,8 @@ class Translator extends \PhpAot\Core\Translator return $this->parseName($iter); case 'Subscript': return $this->parseSubscript($iter); + case 'Attribute': + return $this->parseAttribute($iter); default: debug($iter); } diff --git a/src/functions.php b/src/functions.php index ecdbd251..4f7e5b7e 100644 --- a/src/functions.php +++ b/src/functions.php @@ -7,10 +7,10 @@ function debug($v) /** * @var $translator Translator */ - global $encryptor; - $lang = $encryptor->getLang(); - if ($encryptor->mode == 'cli') { - echo 'Error: Unsupported ' . $lang . ' Syntax, Line: ' . $encryptor->getLine($v) . ', Type: ' . $encryptor->getType($v) . PHP_EOL; + global $translator; + $lang = $translator->getLang(); + if ($translator->mode == 'cli') { + echo 'Error: Unsupported ' . $lang . ' Syntax, Line: ' . $translator->getLine($v) . ', Type: ' . $translator->getType($v) . PHP_EOL; if (DEBUG) { debug_print_backtrace(); var_dump($v);