如何编写一个判断运算符优先级的代码片段?
时间: 2024-09-25 16:01:45 浏览: 30
编写一个判断运算符优先级的代码片段通常涉及到解析表达式并确定操作符的顺序执行。这里以简单的算术运算为例,可以使用栈数据结构来辅助处理:
```python
def operator_precedence(op):
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3} # 定义运算符优先级
return precedence.get(op, 0) # 如果找不到,返回0表示无效运算符
def precedence_parser(expression):
tokens = expression.split() # 分割成单词列表
stack = []
result = []
for token in tokens:
if token.isdigit(): # 处理数字
result.append(token)
elif token in '+-*/^': # 操作符处理
while (stack and stack[-1] != '(' and
operator_precedence(stack[-1]) >= operator_precedence(token)):
result.append(stack.pop()) # 当前操作符优先级低,出栈操作数
stack.append(token)
elif token == ')': # 遇到右括号,开始计算左括号内的表达式
while stack[-1] != '(': # 出栈直到遇到左括号
result.append(stack.pop())
stack.pop() # 移除左括号
else: # 非法字符或运算符未找到对应操作数
raise ValueError(f"Invalid token '{token}'")
while stack: # 计算剩余的运算
result.append(stack.pop())
return result # 返回解析后的运算顺序
# 示例
expression = "3 + 5 * 2"
parsed_expression = precedence_parser(expression)
print(parsed_expression) # 输出:['3', '*', '5', '+', '2']
阅读全文