diff options
| author | 2023-07-25 16:11:05 +0800 | |
|---|---|---|
| committer | 2023-07-25 16:11:05 +0800 | |
| commit | 70908b2d0571278597f97bcae7bc2a1bc9773906 (patch) | |
| tree | acd5ebbef514152ee002eddd7498ab1c86494382 /tests | |
| parent | 3995e2e9e89cb8fcb10dc29bff3fb95e10fa2ab1 (diff) | |
| download | TRPGNivis-70908b2d0571278597f97bcae7bc2a1bc9773906.tar.gz TRPGNivis-70908b2d0571278597f97bcae7bc2a1bc9773906.zip | |
fix url
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/if-else.py | 76 |
1 files changed, 0 insertions, 76 deletions
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() |
