From d304910159e6824dae201e4e4aeafa0ff7984292 Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Tue, 25 Jul 2023 12:37:11 +0800 Subject: add docs --- tests/if-else.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 75 insertions(+), 9 deletions(-) (limited to 'tests') diff --git a/tests/if-else.py b/tests/if-else.py index b557696..933d567 100644 --- a/tests/if-else.py +++ b/tests/if-else.py @@ -1,11 +1,77 @@ -""" -@TODO 包括`tests\if-else.py`在内的各种示例文件的介绍 -""" +class AssignNode: + def __init__(self, variable, value): + self.variable = variable + self.value = value -from psi import Psi +class ComparisonNode: + def __init__(self, operator, left, right): + self.operator = operator + self.left = left + self.right = right -psi_instance = Psi("? a == 1: reply: 你好") -print(psi_instance) -psi_instance.execute() -result = psi_instance.get_result() -print(result) \ No newline at end of file +class IfNode: + def __init__(self, condition, body): + self.condition = condition + self.body = body + +class ReplyNode: + def __init__(self, message): + self.message = message + +import ast + +def parse_code(code): + tree = ast.parse(code) + return parse_node(tree.body[0]) + +def parse_node(node): + if isinstance(node, ast.Assign): + variable = node.targets[0].id + value = parse_node(node.value) + return AssignNode(variable, value) + elif isinstance(node, ast.Compare): + operator = node.ops[0] + left = parse_node(node.left) + right = parse_node(node.comparators[0]) + return ComparisonNode(operator, left, right) + elif isinstance(node, ast.If): + condition = parse_node(node.test) + body = parse_node(node.body[0]) + return IfNode(condition, body) + elif isinstance(node, ast.Expr): + return ReplyNode(node.value.s) + elif isinstance(node, ast.Name): + return node.id + elif isinstance(node, ast.Num): + return node.n + +def execute_ast(ast, environment): + if isinstance(ast, AssignNode): + environment[ast.variable] = ast.value + elif isinstance(ast, ComparisonNode): + left = execute_ast(ast.left, environment) + right = execute_ast(ast.right, environment) + if ast.operator == '==': + return left == right + elif ast.operator == '!=': + return left != right + elif ast.operator == '<': + return left < right + elif ast.operator == '>': + return left > right + elif isinstance(ast, IfNode): + condition = execute_ast(ast.condition, environment) + if condition: + execute_ast(ast.body, environment) + elif isinstance(ast, ReplyNode): + message = ast.message.format(**environment) + print(message) + +def main(): + code = input("请输入代码: ") + ast = parse_code(code) + environment = {} + execute_ast(ast, environment) + +if __name__ == "__main__": + main() -- cgit v1.2.3-70-g09d2 From e47db36c1143c688d82a6ae0794cf0c8c016e1c6 Mon Sep 17 00:00:00 2001 From: Sourcery AI <> Date: Tue, 25 Jul 2023 04:38:01 +0000 Subject: 'Refactored by Sourcery' --- tests/if-else.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/if-else.py b/tests/if-else.py index 933d567..f97322a 100644 --- a/tests/if-else.py +++ b/tests/if-else.py @@ -60,8 +60,7 @@ def execute_ast(ast, environment): elif ast.operator == '>': return left > right elif isinstance(ast, IfNode): - condition = execute_ast(ast.condition, environment) - if condition: + if condition := execute_ast(ast.condition, environment): execute_ast(ast.body, environment) elif isinstance(ast, ReplyNode): message = ast.message.format(**environment) -- cgit v1.2.3-70-g09d2 From 70908b2d0571278597f97bcae7bc2a1bc9773906 Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Tue, 25 Jul 2023 16:11:05 +0800 Subject: fix url --- readme.rst | 2 +- tests/if-else.py | 76 -------------------------------------------------------- 2 files changed, 1 insertion(+), 77 deletions(-) (limited to 'tests') diff --git a/readme.rst b/readme.rst index 40367f4..1195ef2 100644 --- a/readme.rst +++ b/readme.rst @@ -85,7 +85,7 @@ How to build docs Documentation ------------- -Psi documentation is available at `retrofor `_. +Psi documentation is available at `psi.retrofor `_. You can also view it throw the following links: diff --git a/tests/if-else.py b/tests/if-else.py index f97322a..e69de29 100644 --- a/tests/if-else.py +++ b/tests/if-else.py @@ -1,76 +0,0 @@ -class AssignNode: - def __init__(self, variable, value): - self.variable = variable - self.value = value - -class ComparisonNode: - def __init__(self, operator, left, right): - self.operator = operator - self.left = left - self.right = right - -class IfNode: - def __init__(self, condition, body): - self.condition = condition - self.body = body - -class ReplyNode: - def __init__(self, message): - self.message = message - -import ast - -def parse_code(code): - tree = ast.parse(code) - return parse_node(tree.body[0]) - -def parse_node(node): - if isinstance(node, ast.Assign): - variable = node.targets[0].id - value = parse_node(node.value) - return AssignNode(variable, value) - elif isinstance(node, ast.Compare): - operator = node.ops[0] - left = parse_node(node.left) - right = parse_node(node.comparators[0]) - return ComparisonNode(operator, left, right) - elif isinstance(node, ast.If): - condition = parse_node(node.test) - body = parse_node(node.body[0]) - return IfNode(condition, body) - elif isinstance(node, ast.Expr): - return ReplyNode(node.value.s) - elif isinstance(node, ast.Name): - return node.id - elif isinstance(node, ast.Num): - return node.n - -def execute_ast(ast, environment): - if isinstance(ast, AssignNode): - environment[ast.variable] = ast.value - elif isinstance(ast, ComparisonNode): - left = execute_ast(ast.left, environment) - right = execute_ast(ast.right, environment) - if ast.operator == '==': - return left == right - elif ast.operator == '!=': - return left != right - elif ast.operator == '<': - return left < right - elif ast.operator == '>': - return left > right - elif isinstance(ast, IfNode): - if condition := execute_ast(ast.condition, environment): - execute_ast(ast.body, environment) - elif isinstance(ast, ReplyNode): - message = ast.message.format(**environment) - print(message) - -def main(): - code = input("请输入代码: ") - ast = parse_code(code) - environment = {} - execute_ast(ast, environment) - -if __name__ == "__main__": - main() -- cgit v1.2.3-70-g09d2